diff --git "a/doc/efun/\133\135" "b/doc/efun/\133\135"
index afbc0fe..357092f 100644
--- "a/doc/efun/\133\135"
+++ "b/doc/efun/\133\135"
@@ -1,66 +1,97 @@
 SYNOPSIS
-        mixed  arr[index];
-        int    str[index];
+        mixed   arr[index]
+        int     str[index]
 
-        mixed * arr[from..to];
-        string  str[from..to];
+        mixed * arr[from .. to]
+        string  str[from .. to]
+        mixed   m[key, from .. to]
 
-BESCHREIBUNG
-        Liefert ein Element aus einem Array oder String (erste Form), oder
-        eine Teilmenge (zweite Form).
+DESCRIPTION
+        Return one element from a string/array (first form), or a slice
+        (substring resp. subarray) of a string/array/mapping (second form).
 
-        Die Indizes <index>, <from> und <to> sind durchnummeriert von 0 bis
-        strlen(<str>)-1 bzw. sizeof(<arr>)-1. Wenn ein <index> als '<wert'
-        geschrieben wird, wird der Wert vom Ende des Stings / Arrays her
-        gezaehlt. Dabei wird nummeriert von 1 bis strlen(<str>) bzw.
-        sizeof(<arr>). Wird <from> weggelassen, beginnt die Teilmenge mit
-        dem ersten Element. Wird <to> weggelassen, endet die Teilmenge mit
-        dem letzten Element.
+        The indexes <index>, <from> and <to> are numbered 0 to
+        strlen(str)-1, sizeof(arr)-1 resp. widthof(m)-1.
 
-        In der ersten Form muss <index> innerhalb der Grenzen des Strings /
-        Arrays sein, sonst wird ein Laufzeitfehler (RTE) verursacht. In der
-        zweiten Form werden die Indizes an die Groesse des Strings / Arrays
-        angepasst. Wenn <from> groesser ist als <to> oder beide ausserhalb
-        der Groesse des Strings / Arrays liegen, wird ein leerer String ""
-        bzw. ein leeres Array ({}) zurueck geliefert.
+        If an index is written '<value', the value is counted from the
+        end of the string/array/mapping and is numbered 1 to strlen(str),
+        sizeof(arr) resp. widthof(m).
 
-        Die Notation als Closure ist entsprechend:
+        If an index is written '>value', the value is counted from the
+        end of the string/array/mapping if it is negative (starting with
+        -1 for the last element), and from the beginning if it is positive
+        (starting with 0 for the first element).
 
-            [index]      -> ({'#[,      arr, index })
-            [<index]     -> ({'#[<,     arr, index })
-            [from..to]   -> ({'#[..],   arr, from, to })
-            [<from..to]  -> ({'#[<..],  arr, from, to })
-            [from..<to]  -> ({'#[..<],  arr, from, to })
-            [<from..<to] -> ({'#[<..<], arr, from, to })
+        If <from> is omitted, it defaults to the beginning of the
+        string/array/mapping.
+        If <to> is omitted, it defaults to the beginning of the
+        string/array/mapping.
 
-BEISPIELE
+        In the first form, the <index> must be within the bounds of
+        the string/array, or a runtime error occurs.
+        In the second form, the indexes will be fitted to the bounds of
+        the string/array/mapping. If <from> is greater than <to>, or both
+        outside the bounds, an empty string/array ("" resp. ({})) will
+        be returned.
+
+        The closure notation is straightforward:
+
+          [index]          -> ({'#[,       arr, index })
+          [<index]         -> ({'#[<,      arr, index })
+          [>index]         -> ({'#[>,      arr, index })
+          [from..to]       -> ({'#[..],    arr, from, to })
+          [<from..to]      -> ({'#[<..],   arr, from, to })
+          [from..<to]      -> ({'#[..<],   arr, from, to })
+          [<from..<to]     -> ({'#[<..<],  arr, from, to })
+          [>from..to]      -> ({'#[>..],   arr, from, to })
+          [from..>to]      -> ({'#[..>],   arr, from, to })
+          [>from..<to]     -> ({'#[>..<],  arr, from, to })
+          [<from..>to]     -> ({'#[<..>],  arr, from, to })
+          [>from..>to]     -> ({'#[>..>],  arr, from, to })
+          [key,index]      -> ({'#[,],     m, index })
+          [key,<index]     -> ({'#[,<],    m, index })
+          [key,>index]     -> ({'#[,>],    m, index })
+          [key,from..to]   -> ({'#[,..],   m, from, to })
+          [key,<from..to]  -> ({'#[,<..],  m, from, to })
+          [key,from..<to]  -> ({'#[,..<],  m, from, to })
+          [key,<from..<to] -> ({'#[,<..<], m, from, to })
+          [key,>from..to]  -> ({'#[,>..],  m, from, to })
+          [key,from..>to]  -> ({'#[,..>],  m, from, to })
+          [key,>from..<to] -> ({'#[,>..<], m, from, to })
+          [key,<from..>to] -> ({'#[,<..>], m, from, to })
+          [key,>from..>to] -> ({'#[,>..>], m, from, to })
+
+EXAMPLES
         foo = ({ 1, 2, 3, 4 });         str = "test";
 
         foo[1]     -> 1                 str[1] -> 'e' == 101
         foo[1..2]  -> ({ 2, 3 })        str[1..2]  -> "es"
         foo[2..1]  -> ({ })             str[2..1]  -> ""
         foo[0..<2] -> ({ 1, 2 })        str[0..<2]  -> "tes"
-
         foo[..<2]  -> ({ 1, 2 })        str[..<2]  -> "tes"
         foo[<3..]  -> ({ 2, 3, 4 })     str[<3..]  -> "est"
 
-        foo[1] = 5                      -> foo == ({ 1, 5, 3, 4 })
-        foo[1..2] = ({ 5, 6, 7 })       -> foo == ({ 1, 5, 6, 7, 4 })
-        foo[1..2] = ({ })               -> foo == ({ 1, 4 })
+        foo[1] = 5                -> foo == ({ 1, 5, 3, 4 })
+        foo[1..2] = ({ 5, 6, 7 }) -> foo == ({ 1, 5, 6, 7, 4 })
+        foo[1..2] = ({ })         -> foo == ({ 1, 4 })
 
-        str[1] = 'a'                    -> str == "tast"
-        str[1..2] = "bar"               -> str == "tbart"
-        str[1..2] = ""                  -> str == "tt"
+        str[1] = 'a'              -> str == "tast"
+        str[1..2] = "bar"         -> str == "tbart"
+        str[1..2] = ""            -> str == "tt"
 
-GESCHICHTE
-        slice_array() ist die alte Form der []-Operatoren fuer Arrays,
-        extract() ist die alte Form der []-Operatoren fuer Strings.
-        BEIDE VARIANTEN SIND VERALTET, WERDEN NICHT MEHR UNTERSTUETZT UND
-        SOLLTEN DESHALB NICHT MEHR VERWENDET WERDEN.
+HISTORY
+        slice_array() is the old form of the [] operator on arrays.
+        extract() is the old form of the [] operator on strings.
+        Both ARE NO LONGER SUPPORTED and should not be used anymore!
 
-        Die Syntax fuer 'rueckwaerts zaehlen vom letzten Element' hat sich von
-        Version 3.1.J zu 3.1.K geaendert von '-1' zu '<1'. Auch ist seit dann
-        foo[0..-1] ein leeres Array bzw. ein leerer String.
+        The syntax for ``counting from last element'' has changed
+        between versions 3.1.J and 3.1.K from ``-1'' to ``<1''.
+        foo[0..-1] is now an empty string resp. array.
 
-SIEHE AUCH
-        member(E), sizeof(E), slice_array(E)
+        LDMud 3.3 introduced the '>' indexing method.
+
+        LDMud 3.6.6 introduced range indexing for mappings.
+
+SEE ALSO
+        member(E), sizeof(E)
+
diff --git a/doc/efun/abs b/doc/efun/abs
index d242124..cba9a32 100644
--- a/doc/efun/abs
+++ b/doc/efun/abs
@@ -2,19 +2,18 @@
         int   abs(int arg)
         float abs(float arg)
 
-BESCHREIBUNG
-        Liefert den Betrag des Argumentes <arg>.
+DESCRIPTION
+        Returns the absolute value of the argument <arg>.
 
-BEISPIELE
-        Funktion      Rueckgabewert
-        -------------------------------------------------------------------
-        abs(-18    )  18
-        abs( 11    )  11
-        abs( -1.974)   1.974
+EXAMPLES
+        abs(-18)    - returns 18
+        abs(11)     - returns 11
+        abs(-1.974) - returns 1.974
+        ...
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6.
+HISTORY
+        Introduced in LDMud 3.2.6.
 
-SIEHE AUCH
-        sin(E), asin(E), cos(E), acos(E), tan(E), atan(E), log(E), exp(E),
-        sqrt(E), floor(E), ceil(E), pow(E), sgn(E)
+SEE ALSO
+        sin(E), asin(E), cos(E), acos(E), tan(E), atan(E), log(E),
+        exp(E), sqrt(E), floor(E), ceil(E), pow(E), sgn(E)
diff --git a/doc/efun/acos b/doc/efun/acos
index 84bad82..f31e71f 100644
--- a/doc/efun/acos
+++ b/doc/efun/acos
@@ -1,8 +1,8 @@
 SYNOPSIS
         float acos(float)
 
-BESCHREIBUNG
-        Liefert den Arkuskosinus des Argumentes.
+DESCRIPTION
+        Returns the arcus cosine of the argument.
 
-SIEHE AUCH
+SEE ALSO
         sin(E), asin(E), cos(E), tan(E), atan(E), atan2(E)
diff --git a/doc/efun/add_action b/doc/efun/add_action
index 19813d2..000bf54 100644
--- a/doc/efun/add_action
+++ b/doc/efun/add_action
@@ -1,117 +1,122 @@
 SYNOPSIS
         #include <commands.h>
 
-        void add_action(string|closure fun, string cmd);
-        void add_action(string|closure fun, string cmd, int flag);
-        void add_action(string|closure fun);        /* veraltet */
+        void add_action(string|closure fun, string cmd)
+        void add_action(string|closure fun, string cmd, int flag)
 
-BESCHREIBUNG
-        Setzt eine lokale Funktion fun, die aufgerufen wird, wenn der Spieler
-        das Kommandos <cmd< eintippt. Der Funktion werden die Argumente des
-        vom Spieler eingegebenen Kommandos als string uebergeben. Die
-        Funktion muss entweder 1 zurueck geben, wenn das Kommando erfolgreich
-        ausgefuehrt werden konnte, sonst 0.
+DESCRIPTION
+        Set up a local function fun to be called when user input
+        matches the command cmd. Functions called by a user command
+        will get the arguments as a string. It must then return 0 if
+        it was the wrong command, otherwise 1.
 
-        Wenn das Kommando nicht erfolgreich ausgefuehrt werden konnte, sucht
-        der Parser weiter nach einer passenden Funktion, bis eine solche
-        1 zurueck liefert. Falls der Parser keine Funktion findet, wird an
-        den Spieler eine Fehlermeldung ausgegeben. ("Wie bitte?")
+        If it was the wrong command, the parser will continue
+        searching for another command, until one returns 1 or give an
+        error message to the user.
 
-        Wenn add_action() ohne das zweite Argument (string cmd) aufgerufen
-        wird, muss dieses mit add_verb() oder add_xverb() angegeben werden.
-        DIESE DEKLARATION IST JEDOCH VERALTET UND SOLLTE NICHT VERWENDET
-        WERDEN. Sie funktioniert auch nur, wenn USE_DEPRECATED gesetzt ist.
+        For example, there can be a wand and a rod. Both of these
+        objects define as command "wave". One of them will be randomly
+        called first, and it must look at the argument, and match
+        against "wand" or "rod" respectively.
 
-        Die Funktion fun wird mit einem string als Argument aufgerufen, der
-        die Worte nach dem Verb in der Inputzeile enthaelt. Das Verb kann
-        mit der Efun query_verb() abgefragt werden. Das Verb ist immer das
-        erste Wort in der Inputzeile bis zum ersten Leerschlag.
+        The function associated to a command will be called with a
+        string as argument which stands for the given words behind the
+        typed command. The verb entered can be retrieved using the
+        query_verb() efun and is always the first word in the input
+        line up to the first space.
 
-        add_action() muss immer aus einer init() Routine heraus aufgerufen
-        werden. Das Objekt, welches das Kommando cmd definiert, muss sich in
-        der Umgebung des Spielers befinden; also entweder der Spieler selbst,
-        im Inventar des Spielers, der Raum, in dem sich der Spieler befindet
-        oder ein Objekt im gleichen Raum wie der Spieler. Wenn der Spieler
-        die Umgebung des Objekts verlaesst, werden alle von add_action()
-        definierten Kommandos automatisch entfernt.
+        Always have add_action() called only from an init() routine.
+        The object defining these commands must be present to the
+        user, either being the user, being carried by the user,
+        being the room around the user, or being an object in the
+        same room as the user. If the player leaves this vicinity of the
+        object, the actions are automatically removed.
 
-        Die Kommandos lassen sich auch manuell entfernen. Die Efun dazu lautet
-        remove_actions().
+        Actions can also be removed on demand with the remove_actions() efun.
 
-        Wenn das Argument <flag> AA_SHORT (d.h. 1) ist, koennen Argumente von
-        cmd ohne einen Leerschlag an cmd angehaengt sein. An die Funktion fun
-        werden alle Zeichen nach dem ersten Leerschlag als Argument
-        uebergeben.
+        If argument <flag> is AA_SHORT (1), then the arguments may
+        follow the verb without separating space. Any arguments after
+        the first space are passed as argument string.
 
-        Wenn <flag> AA_NOSPACE (d.h. 2) ist, koennen die Argumente wiederum
-        ohne Leerschlag ans Verb angehaengt sein. Im Unterschied zu AA_SHORT
-        werden alle Zeichen nach dem Verb als Argument an die Funktion
-        uebergeben. Die Zeichen, welche nicht durch einen Leerschlag vom
-        Verb getrennt sind, werden ZUSAETZLICH von query_verb() zurueck
-        gegeben.
+        If argument <flag> is AA_NOSPACE (2), then again the arguments
+        may follow the verb without separating space. In contrast to
+        AA_SHORT, all characters following the verb are passed as
+        the argument string. However, note that the characters immediately
+        following the given verb are passed as argument AND as result
+        of query_verb().
 
-        Wenn <flag> AA_IMM_ARGS (3) ist, werden alle Zeichen nach dem Verb
-        als Argument uebergeben, nicht aber von query_verb() beruecksichtigt.
+        If argument <flag> is AA_IMM_ARGS (3), then again the arguments
+        may follow the verb without separating space. All characters following
+        the given verb are passed as argument, and only as argument.
 
-        Wenn -<flag> eine negative Zahl ist, muss das vom Spieler eingegebene
-        Kommando nur mit den ersten <flag> Zeichen von cmd uebereinstimmen.
+        If argument <flag> is negative, the verb given by the player
+        has to match only the leading -<flag> characters of the verb <cmd>.
 
-        Als Name fuer die Funktion fun duerfen keine geschuetzten Namen wie
-        zum Beispiel create, init, reset, heart_beat etc. verwendet werden
-        (eine vollstaendige Liste findet man unter /doc/applied/).
+        Never use one of the functions 'create' 'reset' 'init' 'exit'
+        'heart_beat' etc as the first argument to add_action(). In
+        general, a function with a name defined in /doc/applied should
+        have the behaviour defined there.
 
-BEISPIELE
-        add_action("geh_rein", "betrete");
 
-        Wenn der Spieler "betrete" eintippt, wird die Funktion geh_rein()
-        aufgerufen.
+EXAMPLES
+        add_action("GoInside", "enter");
 
-        add_action("disfunc", "disconnect", AA_NOSPACE);
+          When typing "enter" the function GoInside() will be invoked.
 
-        Die Funktion disfunc() wird aufgerufen, wenn der Spieler "disconnect"
-        oder eine Abkuerzung davon (zum Beispiel "di" oder "discon") eingibt.
-        Laengere Worte (zum Beispiel "disconnecting") werden NICHT erkannt.
-        Um rauszufinden, was der Spieler tatsaechlich eingegeben hat, muss
-        query_verb() aufgerufen werden.
+        add_action("DisFunc", "dis", AA_SHORT);
 
-        add_action("fun", "cmd");
-        add_action("fun", "scmd", AA_SHORT);
-        add_action("fun", "ncmd", AA_NOSPACE);
-        add_action("fun", "icmd", AA_IMM_ARGS);
+          Whenever you type in a command which starts with "dis" the
+          function DisFunc() will be called. To get the real word which
+          was typed in (because until now you only know that it was a
+          command beginning with "dis") you have to call the efun
+          query_verb().
 
-        Die folgende Tabelle zeigt, was die oben aufgefuehrten Kommandos bzw.
-        <flag> fuer Werte an query_verb() und als Argumente an die Funktion
-        fun uebergeben:
+        add_action("DisFunc", "disconnect", AA_NOSPACE);
 
-        |-------------------|--------------|----------------------------|
-        | Eingabe           | query_verb() | Argument der Funktion fun  |
-        |-------------------|--------------|----------------------------|
-        | "cmd"             | "cmd"        | 0                          |
-        | "cmd bla fasel"   | "cmd"        | "bla fasel"                |
-        |-------------------|--------------|----------------------------|
-        | "scmd"            | "scmd"       | 0                          |
-        | "scmd bla"        | "scmd"       | "bla"                      |
-        | "scmdbla"         | "scmdbla"    | 0                          |
-        | "scmd bla fasel"  | "scmd"       | "bla fasel"                |
-        | "scmdbla fasel"   | "scmdbla"    | "fasel"                    |
-        |-------------------|--------------|----------------------------|
-        | "ncmd"            | "ncmd"       | 0                          |
-        | "ncmd bla"        | "ncmd"       | " bla"                     |
-        | "ncmdbla"         | "ncmdbla"    | "bla"                      |
-        | "ncmd bla fasel"  | "ncmd"       | " bla fasel"               |
-        | "ncmdbla fasel"   | "ncmdbla"    | "bla fasel"                |
-        |-------------------|--------------|----------------------------|
-        | "icmd"            | "icmd"       | 0                          |
-        | "icmd bla"        | "icmd"       | " bla"                     |
-        | "icmdbla"         | "icmd"       | "bla"                      |
-        | "icmd bla fasel"  | "icmd"       | " bla fasel"               |
-        | "icmdbla fasel"   | "icmd"       | "bla fasel"                |
-        |-------------------|--------------|----------------------------|
+          The function DisFunc() will be called for all commands which
+          use "disconnect" or a shortened form like "di", "dis" or
+          "discon" as verb. The command 'disconnecting' will _not_
+          be recognized. To get the real word which was typed in
+          you have to call the efun query_verb().
 
-GESCHICHTE
-        Das Argument <flag> < 0 wird seit 3.2@127 unterstuetzt, aber erst ab
-        LDMud 3.2.8 richtig implementiert. LDMud 3.2.9 fuehrte das AA_IMM_ARGS
-        Flag ein. Ab LDMud 3.5 kann man Closures als Funktionen uebergeben.
 
-SIEHE AUCH
-        query_verb(E), query_command(E), add_verb(E), add_xverb(E), init(A)
+        add_action("...", "cmd");
+        add_action("...", "xcmd", AA_SHORT);
+        add_action("...", "scmd", AA_NOSPACE);
+        add_action("...", "icmd", AA_IMM_ARGS);
+
+          When given the following commands, the driver will parse it
+          as described below. 'verb' is what query_verb() would return,
+          'arg' is what would be passed to the command function.
+
+          "cmd"          -> verb "cmd",     arg 0
+          "cmd foo bar"  -> verb "cmd",     arg "foo bar"
+
+          "xcmd"         -> verb "xcmd",    arg 0
+          "xcmd foo"     -> verb "xcmd",    arg "foo"
+          "xcmdfoo"      -> verb "xcmdfoo", arg 0
+          "xcmd foo bar" -> verb "xcmd",    arg "foo bar"
+          "xcmdfoo bar"  -> verb "xcmdfoo", arg "bar"
+
+          "scmd"         -> verb "scmd",    arg 0
+          "scmd foo"     -> verb "scmd",    arg " foo"
+          "scmdfoo"      -> verb "scmdfoo", arg "foo"
+          "scmd foo bar" -> verb "scmd",    arg " foo bar"
+          "scmdfoo bar"  -> verb "scmdfoo", arg "foo bar"
+
+          "icmd"         -> verb "icmd",    arg 0
+          "icmd foo"     -> verb "icmd",    arg " foo"
+          "icmdfoo"      -> verb "icmd",    arg "foo"
+          "icmd foo bar" -> verb "icmd",    arg " foo bar"
+          "icmdfoo bar"  -> verb "icmd",    arg "foo bar"
+
+
+HISTORY
+        The flag < 0 argument was supported since 3.2@127, but not
+        really implemented before LDMud 3.2.8.
+        LDMud 3.2.9 introduced the AA_IMM_ARGS flag.
+        LDMud 3.3 removed the historical add_action(fun) notation.
+        Since LDMud 3.5 the function can be given as a closure.
+
+SEE ALSO
+        query_verb(E), query_command(E), remove_action(E), init(A)
diff --git a/doc/efun/all_environment b/doc/efun/all_environment
index 3da7cb6..ca10bea 100644
--- a/doc/efun/all_environment
+++ b/doc/efun/all_environment
@@ -1,22 +1,20 @@
 SYNOPSIS
         object * all_environment()
-        object * all_environment(object ob)
+        object * all_environment(object o)
 
-BESCHREIBUNG
-        Gibt ein Array mit allen Umgebungen des Objekts <ob> zurueck.
-        Wenn <ob> nicht angegeben wird, wird standardmaessig this_object()
-        verwendet.
+DESCRIPTION
+        Returns an array with all environments object <o> is in. If <o> is
+        omitted, the environments of the current object is returned.
 
-        Wenn <o> keine Umgebung hat oder zerstoert wurde, wird 0 zurueck
-        gegeben.
+        If <o> has no environment, or if <o> is destructed, 0 is returned.
 
-BEISPIELE
-        Wenn <ob> ein Zuendholz in einer Schachtel in einer Truhe in einem
-        Raum ist, so liefert all_environment(ob) das Array
-        ({ Schachtel, Truhe, Raum }) zurueck.
+EXAMPLES
+        If o is a match in a matchbox which is in a box in a chest,
+        in a room, all_environment(o) will return
+        ({ matchbox, box, chest, room }).
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6. Ein Vorschlag von Tubmud.
+HISTORY
+        Introduced in LDMud 3.2.6, suggested by Tubmud.
 
-SIEHE AUCH
+SEE ALSO
         environment(E), all_inventory(E)
diff --git a/doc/efun/all_inventory b/doc/efun/all_inventory
index 212c530..ee4a6b7 100644
--- a/doc/efun/all_inventory
+++ b/doc/efun/all_inventory
@@ -2,11 +2,10 @@
         object * all_inventory()
         object * all_inventory(object ob)
 
-BESCHREIBUNG
-        Liefert ein Feld (Array) mit allen Objekten, die sich im Objekt ob
-        befinden (bzw. in this_object(), sofern kein Argument angegeben
-        wurde).
+DESCRIPTION
+        Returns an array of the objects contained in the inventory of
+        ob, or of this_object(), if no arg given.
 
-SIEHE AUCH
+SEE ALSO
         first_inventory(E), next_inventory(E), deep_inventory(E),
         all_environment(E), environment(E)
diff --git a/doc/efun/allocate b/doc/efun/allocate
index cf74429..bdd3eb3 100644
--- a/doc/efun/allocate
+++ b/doc/efun/allocate
@@ -2,27 +2,28 @@
         mixed * allocate(int size)
         mixed * allocate(int size, mixed init_value)
 
-        mixed * allocate(*int sizes)
-        mixed * allocate(*int sizes, mixed init_value)
+        mixed * allocate(int *sizes)
+        mixed * allocate(int *sizes, mixed init_value)
 
-BESCHREIBUNG
-        Allokiert ein Array von <size> Elementen. Die Anzahl Elemente muss
-        groesser sein als 0, darf aber das Systemmaximum (normalerweise 1000)
-        nicht uebersteigen. Wird <init_value> angegeben, wird allen Elementen
-        dieser als Anfangswert zugewiesen. Wenn <init_value> ein Mapping oder
-        ein Array ist, wird fuer jedes Element eine einfache Kopie erstellt.
-        Wird <init_value> nicht angegeben, sind alle Elemente 0.
+DESCRIPTION
+        Allocate an array of size elements. The number of elements
+        must be >= 0 and not bigger than a system maximum (usually
+        1000).
 
-        In der zweiten Form (mit einem Feld von <sizes> anstelle nur einer
-        <size>) erzeugt allocate() ein mehrdimensionales Array, ein Array aus
-        Arrays.
+        If <init_value> is given, all array elements will be set
+        to this value (if <init_value> is an array or mapping, a shallow
+        copy will be created for each element), otherwise they all will be 0.
 
-        Heute wird allocate() kaum mehr benoetigt, weil Arrays mit dem
-        +-Operator addiert und mit dem ({})-Operator initialisiert werden
-        koennen. Der einzige Nutzen der Funktion ist, grosse leere
-        oder initialisierte Arrays zu erzeugen.
+        In the second form (using an array of sizes instead of one size),
+        the efun will allocate a multidimensional array, that is an array
+        of arrays.
 
-BEISPIELE
+        Note that this function is hardly needed anymore, because
+        arrays can be added by the + operator, and can be constructed
+        and initialized by the ({ }) operator. The functions only
+        use is to construct big empty arrays.
+
+EXAMPLES
         string *buffer;
         buffer = allocate(50);
         buffer = allocate(50, "");
@@ -30,9 +31,9 @@
         buffer = allocate( ({ 2, 3 }) )
           --> ({ ({ 0, 0, 0 }), ({ 0, 0, 0 }) })
 
-GESCHICHTE
-        LDMud 3.2.9 fuehrte den Anfangswert <init_value> und die
-            Initialisierung von mehrdimensionalen Arrays ein.
+HISTORY
+        LDMud 3.2.9 added the initialization value and the multi-dimensional
+          allocation.
 
-SIEHE AUCH
+SEE ALSO
         sizeof(E)
diff --git a/doc/efun/and_bits b/doc/efun/and_bits
index d1d89a3..0ee8426 100644
--- a/doc/efun/and_bits
+++ b/doc/efun/and_bits
@@ -1,13 +1,13 @@
 SYNOPSIS
         string and_bits(string str1, string str2)
 
-BESCHREIBUNG
-        <str1> und <str2> seien beides Bitstrings. Das Resultat von and_bits()
-        ist ein Bitstring mit dem binaeren Und von <str1> und <str2>, das
-        heisst ein String, in dem ein Bit nur gesetzt ist, wenn das
-        entsprechende Bit in beiden Strings <str1> und <str2> gesetzt ist.
+DESCRIPTION
+        <str1> and <str2> are both bitstrings. The result of the function
+        is a bitstring with the binary-and of <str1> and <str2>,
+        ie. a string in which a bit is set only if both corresponding
+        bits in the input strings are set, too.
 
-BEISPIELE
+EXAMPLES
         string s1, s2, s3;
 
         s1 = set_bit("", 3); s1 = set_bit(s1, 15);  -> s1 is "( ("
@@ -15,9 +15,8 @@
 
         s3 = and_bits(s1, s2);
 
-        --> s3 ist jetzt "8", d.h. ein Bitstring, in dem nur das 3. Bit
-            gesetzt ist.
+        -> s3 is now "8", ie. a bitstring with bit 3 set only.
 
-SIEHE AUCH
+SEE ALSO
         clear_bit(E), set_bit(E), test_bit(E), next_bit(E), last_bit(E),
         count_bits(E), or_bits(E), xor_bits(E), invert_bits(E), copy_bits(E)
diff --git a/doc/efun/apply b/doc/efun/apply
index d7c891e..0a8002e 100644
--- a/doc/efun/apply
+++ b/doc/efun/apply
@@ -1,35 +1,49 @@
 SYNOPSIS
-        mixed apply(closure cl, mixed arg, ...)
+        mixed apply(closure cl, ...)
 
-BESCHREIBUNG
-        Wertet die Closure <cl> aus. Wenn <cl> keine Closure ist, wird <cl>
-        unveraendert zurueck geliefert und alle Argumente <arg> werden
-        ignoriert.
+DESCRIPTION
+        Evaluates the closure <cl> with the following arguments.
+        If the last argument is an array or struct, it will be
+        flattened: ie. the array/struct itself will be removed and its
+        contents added to the argument list of <cl>
 
-        Es gibt einen kleinen Unterschied zu funcall(), das ja im Wesentlichen
-        das gleiche tut (naemlich, eine Closure auswerten): wenn das letzte
-        Argument von apply() ein Array ist, wird jedes Element dieses Arrays
-        zu einem separaten zusaetzlichen Parameter der Closure umgewandelt.
+        If <cl> is not a closure, it will simply be returned (and all
+        other arguments are ignored).
 
-        Eine moegliche Anwendung waere:
-            mixed eval(object ob,string func,mixed *args)
-            {
-                return apply(#'call_other,ob,func,args);
-            }
+EXAMPLES
+        The flattening of the last argument is the important difference
+        between apply() and funcall(). For example:
 
-        Das fuehrt zu folgenden Aufrufen:
-            ob->func(args[0],args[1],...,args[sizeof(args)-1])
+        mixed eval(object ob, string func, mixed *args)
+        {
+            return apply(#'call_other, ob, func, args);
+        }
 
-        Waere stattdessen funcall() aufgerufen worden, so haette das ergeben:
-            ob->func(args)
+        This will result in calling
 
-        Eine wichtige Anwendung von apply() ist das Auswerten des
-        Array-Arguments in "varargs" Funktionen.
+          ob->func(args[0],args[1],...,args[sizeof(args)-1]).
 
-GESCHICHTE
-        Eingefuehrt in 3.2@70.
-        LDMud 3.2.8 fuehrte ein, dass das erste Argument zurueck gegeben wird,
-            wenn es sich nicht um eine Closure handelt.
+        Using funcall() instead of apply() would have given us
 
-SIEHE AUCH
+          ob->func(args).
+
+
+        Of course, with the '...' operator we could also write
+
+        mixed eval(object ob, string func, mixed *args)
+        {
+            return funcall(#'call_other, ob, func, args...);
+        }
+
+        and achieve the same result.
+
+HISTORY
+        Introduced in 3.2@70
+        LDMud 3.2.8 adds the returning of a non-closure as first
+        argument.
+        LDMud 3.3 added the '...' operator and thus made apply() in fact
+        redundant.
+        LDMud 3.3.266 added support for structs.
+
+SEE ALSO
         funcall(E), closures(LPC), varargs(LPC)
diff --git a/doc/efun/asin b/doc/efun/asin
index a8ebc9b..60d79e7 100644
--- a/doc/efun/asin
+++ b/doc/efun/asin
@@ -1,8 +1,8 @@
 SYNOPSIS
         float asin(float)
 
-BESCHREIBUNG
-        Liefert den Arkussinus des Argumentes.
+DESCRIPTION
+        Returns the arcus sine of its argument.
 
-SIEHE AUCH
+SEE ALSO
         sin(E), cos(E), acos(E), tan(E), atan(E), atan2(E)
diff --git a/doc/efun/atan b/doc/efun/atan
index f8242b5..3077af2 100644
--- a/doc/efun/atan
+++ b/doc/efun/atan
@@ -1,11 +1,11 @@
 SYNOPSIS
         float atan(int|float)
 
-BESCHREIBUNG
-        Liefert den Arkustangens des Argumentes.
+DESCRIPTION
+        Returns the argument's arcus tangent.
 
-GESCHICHTE
-        LDMud 3.2.9: Ganzzahlen (Integers) als Argument hinzugefuegt.
+HISTORY
+        LDMud 3.2.9 added integers as arguments.
 
-SIEHE AUCH
+SEE ALSO
         atan2(E), sin(E), cos(E), tan(E), asin(E), acos(E)
diff --git a/doc/efun/atan2 b/doc/efun/atan2
index e1c939a..66d78ab 100644
--- a/doc/efun/atan2
+++ b/doc/efun/atan2
@@ -1,16 +1,16 @@
 SYNOPSIS
         float atan2(int|float y, int|float x)
 
-BESCHREIBUNG
-        Liefert den Winkel der Polarkoordinaten des Punktes (x, y) im
-        Bereich (-Pi, Pi].
+DESCRIPTION
+        Returns the angle part of the polar coordinates of the point (x, y)
+        in the range (-pi, pi].
 
-        Man beachte die Vertauschung der Koordinaten x und y in der
-        Parameter-Liste, die die Abfolge in der Steigungs-Winkel-Umrechnung
-        atan(y / x) widerspiegelt.
+        Note the exchange of the coordinates x and y in the parameter list
+        reflecting the sequenz in the gradient to angle transformation
+        atan(y / x).
 
-GESCHICHTE
-        LDMud 3.2.9: Ganzzahlen (Integers) als Argumente hinzugefuegt.
+HISTORY
+        LDMud 3.2.9 added integers as arguments.
 
-SIEHE AUCH
+SEE ALSO
         sin(E), cos(E), tan(E), asin(E), acos(E), atan(E)
diff --git a/doc/efun/attach_erq_demon b/doc/efun/attach_erq_demon
index 118a1ff..015b520 100644
--- a/doc/efun/attach_erq_demon
+++ b/doc/efun/attach_erq_demon
@@ -1,37 +1,37 @@
-GESCHUETZT
 SYNOPSIS
-        int attach_erq_demon(object ob, int do_close)
+        int attach_erq_demon(object ob,     int do_close)
         int attach_erq_demon(string obname, int do_close)
 
-BESCHREIBUNG
-        Diese geschuetzte Funktion setzt oder aendert die die Verbindung des
-        Treibers zum externen Erq-Demon, aendert also effektiv die Demons.
+DESCRIPTION
+        This privileged efun is to set/change the connection of the
+        driver to the external erq demon, thus in effect changing the
+        demons.
 
-        Die Verbindung wird dabei vom interaktiven Objekt <ob> entfernt (!)
-        und als Erq-Verbindung gespeichert. Das Objekt <ob> wird anschliessend
-        nicht mehr benoetigt, es kann aber als (nicht interaktives) Objekt
-        weiter existieren.
+        The connection of the given interactive 'ob'ject is taken away(!)
+        from it and stored as the erq-connection. The object itself is
+        then no longer needed, but may stay alive - it is just another
+        non-interactive object then.
 
-        In der zweiten Form wird der String an den Dateinamen ERQFILE<obname>
-        angehaengt, das dann als Binary als neuer Erq-Demon aufgespalten wird.
-        Die Kommunikation mit diesem Erq verlaeuft ueber Unix Domainsockets.
-        ERQFILE greift standardmaessig auf BINDIR/erq zu, wobei BINDIR der
-        konfigurierte Wert fuer das ausfuehrbare Verzeichnis ist.
+        In the second form, the string will be combined as suffix to
+        the filename ERQFILE<obname>, which is then the binary to be
+        forked off as new erq demon. The communication with this erq
+        will take place over unix domain sockets. ERQFILE defaults to
+        BINDIR/erq, where BINDIR is the configuration value for the
+        executable directory.
 
-        Besteht bereits eine Verbindung zu einem Erq-Demon, schlaegt die
-        Funktion fehl, wenn nicht do_close auf 1 gesetzt ist (Standard ist
-        do_close == 0). In diesem Fall wird die alte Verbindung geschlossen,
-        bevor zum neuen Demon verbunden wird.
+        If there is alreay an erq demon connected to the driver, the
+        function will fail unless 'do_close' (default 0) is specified
+        as 1 (or any other odd integer): then the old connection will
+        be closed before attaching the new.
+        The efun returns 1 on success, else 0.
 
-        Die Efun liefert 1 bei Erfolg, 0 sonst.
+EXAMPLES
+        To restart the (default) erq, write in
+        master.c::stale_erq(closure c):
+          attach_erq_demon("", 0);
 
-BEISPIELE
-        Um den (Standard-)Erq neu zu starten, muss in
-        master.c::stale_erq(closure c) geschrieben werden:
-        attach_erq_demon("", 0);
+HISTORY
+        Introduced in 3.2.1@61.
 
-GESCHICHTE
-        Eingefuehrt in 3.2.1@61.
-
-SIEHE AUCH
+SEE ALSO
         send_erq(E), erq(C)
diff --git a/doc/efun/baseof b/doc/efun/baseof
index d64cc20..41d8db0 100644
--- a/doc/efun/baseof
+++ b/doc/efun/baseof
@@ -1,5 +1,5 @@
 SYNOPSIS
-        int baseof (struct b, struct s)
+        int baseof(struct b, struct s)
 
 DESCRIPTION
         Test if the type of struct <b> is a base of struct <s> (the
diff --git a/doc/efun/binary_message b/doc/efun/binary_message
index 5b909a9..8d952f7 100644
--- a/doc/efun/binary_message
+++ b/doc/efun/binary_message
@@ -1,36 +1,32 @@
-GESCHUETZT
 SYNOPSIS
-        int binary_message(int *|bytes messages, int flags)
+        int binary_message(int *|bytes message, int flags)
 
-BESCHREIBUNG
-        Liest den Output aus und sendet diesen direkt mit write() OHNE IAC
-        QUOTING. Die Nachricht kann Nullen enthalten, wenn sie als
-        int * angegeben sind. Die Nachricht wird an this_object() ausgegeben,
-        aber nur, wenn dieses interaktiv ist.
+DESCRIPTION
+        Flush output and send output directly with write WITHOUT IAC QUOTING.
+        The message may contain zeroes if given as int *.
+        The messages goes to this_object(), but only if interactive.
+        return value: number of characters actually written.
+        Any 'allowed charset' setting is ignored.
 
-        Der Rueckgabewert ist die Anzahl tatsaechlich gedruckter Zeichen. Eine
-        allfaellige "allowed charset" Einstellung wird uebergangen.
+        Flag settings are interpreted bitwise and may be ored
+        together (only for clients not using MCCP compression):
 
-        <flags> werden bitweise interpretiert und koennen ueber das binaere
-        Oder verbunden werden.
+          Bit 0 (value 1): when set, add_message() is used instead of
+            write(). Thus no previous flushing of the buffer is
+            needed, but the output is not immediate, nor can the
+            number of bytes actually sent be determined - the return
+            value is undefined.
+          Bit 1 (value 2): The buffer is flushed _after_ adding the
+            message. Useful only in conjunction with Bit 0.
 
-        Bit 0 (Wert 1): wenn gesetzt, wird add_message() anstelle von
-            write() verwendet. So muss der Output nicht zuerst ausgelesen
-            werden, allerdings erfolgt die Ausgabe nicht sofort. Auch kann
-            dann die Anzahl effektiv uebertragener Zeichen nicht bestimmt
-            werden - der Rueckgabewert ist nicht definiert.
+        The idea behind the flag settings is that sending command
+        codes for colours and other things needs to bypass the allowed
+        charset filters, but isn't important enough to waste bandwith
+        on a synchronous transmission.
 
-        Bit 1 (Wert 2): Der Puffer wird ausgelesen, _nachdem_ die Nachricht
-            angefuegt wurde. Macht nur in Verbindung mit Bit 0 Sinn.
+HISTORY
+        Introduced in 3.2.1@40.
+        Argument 'flags' introduced in 3.2.1@60.
 
-            Die Idee hinter den Flags ist, dass das Senden von Kommandocodes
-            zum Beispiel fuer Farben an den vorhandenen Filtern fuer erlaubte
-            Zeichen vorbeigeschleust werden muss, jedoch nicht wichtig genug
-            ist, um die Verschwendung von Bandbreite mittels einer
-            synchronen Uebertragung zu rechtfertigen.
-
-GESCHICHTE
-        Eingefuehrt in 3.2.1@40.
-
-SIEHE AUCH
+SEE ALSO
         set_connection_charset(E)
diff --git a/doc/efun/bind_lambda b/doc/efun/bind_lambda
index 96e70af..cc06783 100644
--- a/doc/efun/bind_lambda
+++ b/doc/efun/bind_lambda
@@ -1,18 +1,16 @@
 SYNOPSIS
-        closure bind_lambda(closure cl, object|lwobject ob)
+        closure bind_lambda(closure, object|lwobject ob)
 
-BESCHREIBUNG
-        Bindet eine ungebundene Lambda-Closure (die von unbound_lambda()
-        erzeugt wurde) an ein Objekt <ob> und gibt die Closure zurueck. Die
-        Funktion kann auch dazu genutzt werden, eine Efun-, Simul-Efun- oder
-        Operator-Closure an ein anderes Objekt zu binden.
+DESCRIPTION
+        Binds an unbound lambda closure to an object and return it.
+        The efun can also be used to rebind an efun-, simul-efun
+        or operator closure to a different object.
 
-        Wenn das optionale Argument <ob> nicht mit this_object()
-        uebereinstimmt, wird eine Schutzverletzung ("bind_lambda",
-        this_object(), ob) verursacht.
+        If the optional argument ob is not this_object(), the privilege
+        violation ("bind_lambda", this_object(), ob) occurs.
 
-GESCHICHTE
-        Eingefuehrt in 3.2.1@82.
+HISTORY
+        Introduced in 3.2@82.
 
-SIEHE AUCH
+SEE ALSO
         lambda(E), unbound_lambda(E), apply(E), funcall(E), closures(LPC)
diff --git a/doc/efun/blueprint b/doc/efun/blueprint
index 78c4f0a..0017942 100644
--- a/doc/efun/blueprint
+++ b/doc/efun/blueprint
@@ -1,23 +1,26 @@
-VORLAEUFIG
+PRELIMINARY
 SYNOPSIS
         object blueprint()
         object blueprint(string|object|lwobject ob)
 
-BESCHREIBUNG
-        Die Efun liefert den Blueprint fuer das angegeben Objekt <ob> oder
-        fuer this_object(), wenn nicht angegeben.
+DESCRIPTION
+        The efuns returns the blueprint for the given object <ob>, or for
+        the current object if <ob> is not specified.
 
-        Wenn der Blueprint zerstoert wurde, liefert die Funktion 0. Fuer
-        Objekte mit replace_program() liefert die Funktion den Blueprint des
-        ersetzenden Programs.
+        If the blueprint is destructed, or its program replaced, the efun
+        returns 0.
 
-BEISPIELE
-        blueprint("/obj/ding");                 -> liefert /obj/ding
-        blueprint(find_object("/obj/ding"));    -> liefert /obj/ding
-        blueprint(clone_object("/obj/ding"));   -> liefert /obj/ding
+        For objects with replaced programs, the efun returns the blueprint
+        for the replacement program.
+        In COMPAT mode the returned blueprint does not start with a "/".
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
+EXAMPLES
+        blueprint("/std/thing"))               -> /std/thing
+        blueprint(find_object("/std/thing"))   -> /std/thing
+        blueprint(clone_object("/std/thing"))  -> /std/thing
 
-SIEHE AUCH
+HISTORY
+        Introduced in LDMud 3.2.9.
+
+SEE ALSO
         clones(E), clone_object(E)
diff --git a/doc/efun/break_point b/doc/efun/break_point
index 6566923..584453e 100644
--- a/doc/efun/break_point
+++ b/doc/efun/break_point
@@ -1,11 +1,11 @@
-OPTIONAL, GESCHUETZT
+OPTIONAL
 SYNOPSIS
         void break_point()
 
-BESCHREIBUNG
-        Diese Funktion ist fuer interne Benutzung und sollte niemals von einem
-        Userobjekt aufgerufen werden. Die Funktion prueft die Integritaet des
-        Stacks und faehrt den Driver herunter, falls sie Schaeden feststellt.
+DESCRIPTION
+        This function is for system internal use and should never be called by
+        user objects. It is supposed to check the stack integrity and aborts
+        the driver when it detects corruption.
 
-SIEHE AUCH
+SEE ALSO
         shutdown(E), swap(E)
diff --git a/doc/efun/bytesp b/doc/efun/bytesp
index 89e1a2a..a6b9524 100644
--- a/doc/efun/bytesp
+++ b/doc/efun/bytesp
@@ -8,5 +8,6 @@
         Introducted in LDMud 3.6.0.
 
 SEE ALSO
-        clonep(E), closurep(E), floatp(E), mappingp(E), objectp(E), intp(E),
-        referencep(E), pointerp(E), stringp(E), structp(E), symbolp(E)
+        clonep(E), closurep(E), coroutinep(E), floatp(E), intp(E),
+        lpctypep(E), lwobjectp(E), mappingp(E), objectp(E), pointerp(E),
+        referencep(E), stringp(E), structp(E), symbolp(E)
diff --git a/doc/efun/call_coroutine b/doc/efun/call_coroutine
new file mode 100644
index 0000000..80f4197
--- /dev/null
+++ b/doc/efun/call_coroutine
@@ -0,0 +1,23 @@
+SYNOPSIS
+        mixed call_coroutine(coroutine cr, mixed value = 0)
+
+DESCRIPTION
+        Continues execution of the coroutine.
+
+        The value will be passed as the result of its last suspension
+        point (the previous yield() call of its execution). If the
+        coroutine is at its start, the value will be discarded.
+
+        The coroutine may pass execution to other coroutines through
+        await() and yield() calls. A yield() call without a coroutine,
+        a return statement or simply the end of the statement block
+        will return to the caller.
+
+        The result of the call will be the value given to the yield()
+        or return statement.
+
+HISTORY
+        Coroutines were introduced in LDMud 3.6.5.
+
+SEE ALSO
+        coroutines(LPC), this_coroutine(E)
diff --git a/doc/efun/call_direct b/doc/efun/call_direct
index 94ab028..493b16d 100644
--- a/doc/efun/call_direct
+++ b/doc/efun/call_direct
@@ -1,26 +1,22 @@
 SYNOPSIS
-        unknown call_direct (object ob, string fun, mixed arg, ...)
-        unknown call_direct (object *ob, string fun, mixed arg, ...)
+        unknown call_direct(object ob, string fun, mixed arg, ...)
+        unknown call_direct(object *ob, string fun, mixed arg, ...)
 
 DESCRIPTION
-        Call a member function <fun> in another object <ob> with an
-        the argument(s) <arg...>. Result is the value returned from
+        Call a member function <fun> in another object <ob> with 
+        argument(s) <arg...>. Result is the value returned from
         the called function (or 0 for non-existing or void functions).
 
         This efun is a twin to call_other(), with the difference
         being that call_direct() never calls a default method.
 
-        Optionally the driver can be configured to accept an array of
-        objects as <ob>: the function is called with the same
-        arguments in all the given objects.  The single results are
-        collected in an array and yield the final result.  Array
-        elements can be objects or the names of existing objects;
-        destructed objects and 0s will yield a '0' as result, but
+        Additionally the efun accepts an array of objects as <ob>: the
+        function is called with the same arguments in all the given objects.
+        The single results are collected in an array and yield the final
+        result.  Array elements can be objects or the names of existing
+        objects; destructed objects and 0s will yield a '0' as result, but
         don't cause an error.
 
-        If the array-calling mode is available, the macro
-        __LPC_ARRAY_CALLS__ is defined.
-
         The object(s) can be given directly or via a string (i.e. its
         object_name). If it is given by a string and the object does not
         exist yet, it will be loaded.
@@ -47,6 +43,7 @@
         'unknown', and the result of call_other() must be casted to
         the appropriate type before you can use it for anything.
 
+
 EXAMPLES
         // All the following statements call the lfun QueryProp()
         // in the current player with the argument P_SHORT.
@@ -61,7 +58,7 @@
 
         // This statement calls the lfun short() in all interactive users
         // and stores the collected results in a variable.
-        string * s;
+        string *s;
 
         s = (string *)call_direct(users(), "short");
 
@@ -69,7 +66,9 @@
 HISTORY
         Introduced in LDMud 3.3.113 with the H_DEFAULT_METHOD hook.
         LDMud 3.2.10 made the call on arrays of objects configurable.
+        LDMud 3.5.0 made the call on arrays of objects non-optional.
 
 SEE ALSO
-        call_other(E), call_direct_resolved(E), create(A), pragma(LPC),
-        extern_call(E), function_exists(E), functions(LPC)
+        call_other(E), call_strict(E), call_direct_strict(E),
+        call_resolved(E), call_direct_resolved(E), create(A), pragma(LPC),
+        extern_call(E), function_exists(E), functions(LPC), map_objects(E)
diff --git a/doc/efun/call_direct_resolved b/doc/efun/call_direct_resolved
index e227934..c0f9120 100644
--- a/doc/efun/call_direct_resolved
+++ b/doc/efun/call_direct_resolved
@@ -1,5 +1,6 @@
 SYNOPSIS
         int call_direct_resolved(mixed result, object ob, string func, ...)
+        int* call_direct_resolved(mixed* result, object* ob, string func, ...)
 
 DESCRIPTION
         Similar to call_direct(). If ob->func() is defined and publicly
@@ -17,9 +18,20 @@
         ob can also be an object_name. If a string is passed for ob, and
         no object with that name does exist, an error occurs.
 
+        Additionally the efun accepts an array of objects as <ob>: the
+        function is called with the same arguments in all the given objects.
+        The single results are collected in two arrays, one for the result
+        of the function calls that will be stored in the result parameter,
+        and one for the efun result codes that will finally be returned from
+        the efun. Array elements can be objects or the names of existing
+        objects; destructed objects and 0s will yield a '0' as result in
+        both arrays, but don't cause an error.
+
 HISTORY
         Introduced in LDMud 3.3.113 with the H_DEFAULT_METHOD hook.
+        LDMud 3.6.2 added array calls.
 
 SEE ALSO
-        call_direct(E), call_resolved(E), function_exists(E),
-        find_object(E)
+        call_other(E), call_strict(E), call_resolved(E), call_direct(E),
+        call_direct_strict(E), create(A), pragma(LPC), extern_call(E),
+        function_exists(E), functions(LPC), map_objects(E)
diff --git a/doc/efun/call_direct_strict b/doc/efun/call_direct_strict
new file mode 100644
index 0000000..f9f319c
--- /dev/null
+++ b/doc/efun/call_direct_strict
@@ -0,0 +1,34 @@
+SYNOPSIS
+        unknown call_direct_strict(object|string ob, string func, ...)
+        unknown call_direct_strict(object*|string* ob, string func, ...)
+
+DESCRIPTION
+        Similar to call_other(). Call a member function <fun> in another
+        object <ob> if the function is defined and publicly accessible.
+        Any of the optional extra arguments are passed to the function.
+        Result is the value returned from the called function.
+
+        This efun is a twin to call_strict(), with the difference
+        being that call_direct_strict() never calls a default method.
+
+        Thus if ob::fun does not define a publicly accessible function,
+        the efun will raise a runtime error.
+
+        ob can also be an object_name. If a string is passed for ob
+        and an object with that name can't be found or loaded, an
+        error occurs.
+
+        Additionally the efun accepts an array of objects as <ob>: the
+        function is called with the same arguments in all the given objects.
+        The single results are collected in an array and yield the final
+        result. Array elements can be objects or the names of existing
+        objects. If a call to any of the objects failes, the efun will
+        raise a runtime error.
+
+HISTORY
+        Introduced in LDMud 3.6.2.
+
+SEE ALSO
+        call_other(E), call_resolved(E), call_direct(E), call_strict(E),
+        call_direct_resolved(E), create(A), pragma(LPC), extern_call(E),
+        function_exists(E), functions(LPC), map_objects(E)
diff --git a/doc/efun/call_other b/doc/efun/call_other
index ee6ebdd..4cfaddd 100644
--- a/doc/efun/call_other
+++ b/doc/efun/call_other
@@ -2,93 +2,95 @@
         unknown call_other(object ob, string fun, mixed arg, ...)
         unknown call_other(object *ob, string fun, mixed arg, ...)
 
-        ob->fun(mixed arg, ...)
-        ob->"fun"(mixed arg, ...)
-        ob->(fun)(mixed arg, ...)
+        ob->fun (mixed arg, ...)
+        ob->"fun" (mixed arg, ...)
+        ob->(fun) (mixed arg, ...)
 
-BESCHREIBUNG
-        Ruft die in einem anderen Objekt <ob> die Funktion <fun> mit den
-        Argumenten <arg...> auf und gibt den Wert zurueck, der von der
-        Funktion <fun> geliefert wird (oder 0 fuer nicht existierende oder
-        als void deklarierte  Funktionen).
+DESCRIPTION
+        Call a member function <fun> in another object <ob> with an
+        the argument(s) <arg...>. Result is the value returned from
+        the called function (or 0 for non-existing or void functions).
 
-        Weiterhin wird auch ein Array von Objekten *<ob> akzeptiert. Die
-        Funktion <fun> wird dann fuer jedes Objekt <ob> im Array mit den
-        Argumenten <arg...> aufgerufen.
-        Die einzelnen Resultate werden in einem Array zusammen gefasst und
-        dieses Array dann als Endresultat von call_other() zurueck gegeben.
-        Die Elemente von *<ob> koennen Objekte oder Namen von Objekten sein.
-        Zerstoerte Objekte und 0 als Element geben eine 0 zurueck, fuehren
-        aber nicht zu einem Fehler.
+        Additionally the efun accepts an array of objects as <ob>: the
+        function is called with the same arguments in all the given objects.
+        The single results are collected in an array and yield the final
+        result.  Array elements can be objects or the names of existing
+        objects; destructed objects and 0s will yield a '0' as result, but
+        don't cause an error.
 
-        Das Objekt (bzw. die Objekte) kann direkt oder ueber einen String
-        (d.h. den Objektnamen) angegeben werden. Wenn ein String angegeben
-        wird und das Objekt noch nicht existiert, wird es geladen.
+        The object(s) can be given directly or via a string (i.e. its
+        object_name). If it is given by a string and the object does not
+        exist yet, it will be loaded.
 
-        ob->fun(args) und "ob_name"->fun(args) sind aequivalent zu
-        call_other(ob, "fun", args). Heutzutage kann "ob_name" auch eine
-        Variable sein. ob->(fun)(args) ist aequivalent zu
-        call_other(ob, fun, args), wobei <fun> ein Runtime Ausdruck ist,
-        der den Funktionsnamen liefert.
+        ob->fun(args) and "ob_name"->fun(args) is equivalent to
+        call_other(ob, "fun", args). Nowadays the ob_name string can
+        also be a variable.
 
-        Wenn das Objekt <ob> keine oeffentliche Funktion mit dem Namen <fun>
-        enthaelt, gibt call_other() den Wert 0 zurueck. Dies ist nicht
-        unterscheidbar von einer Funktion <fun>, die 0 zurueck liefert.
-        Oeffentlich bedeutet "public", wenn andere Objekte aufgerufen
-        werden und "public" oder "static", wenn der Aufruf an this_object()
-        ergeht. Funktionen, die "private" oder "protected" definiert sind,
-        koennen niemals von call_other() aufgerufen werden.
+        ob->fun(args) and ob->"fun"(args) are equivalent to
+        call_other(ob, "fun", args). ob->(fun)(args) are equivalent
+        to call_other(ob, fun, args) where fun is a runtime expression
+        returning the function name.
 
-        Der Rueckgabewert von call_other() ist standardmaessig 'any'. Falls
-        aber #pragma strict_types gesetzt ist, ist der Rueckgabewert
-        'unknown', und das Resultat des call_other() muss zuerst auf einen
-        zutreffenden Variablentyp gecastet werden, bevor man es fuer etwas
-        verwenden kann.
+        If ob::fun does not define a publicly accessible function, the
+        efun will call the H_DEFAULT_METHOD hook if set. If the hook
+        is not set or can't resolve the call either, call_other()
+        will return 0, which is indistinguishable from a function returning 0.
 
-BEISPIELE
-        Die nachfolgenden Beispiele rufen alle die Funktion "QueryProp" auf
-        mit dem Argument P_SHORT.
+        Calls to the master object never use the H_DEFAULT_METHOD hook.
+        To force non-default calls, the efun call_direct() can be used.
 
-            string str, fun;
-            str = (string)call_other(this_player(), "QueryProp", P_SHORT);
-            fun = "QueryProp";
-            str = (string)call_other(this_player(), fun, P_SHORT);
+        "publicly accessible" means "public" when calling other objects,
+        and "public" or "static" when calling this_object(). "private"
+        and "protected" function can never be called with call_other().
 
-            str = (string)this_player()->QueryProp(P_SHORT);
-            str = (string)this_player()->"QueryProp"(P_SHORT);
-            fun = "QueryProp";
-            str = (string)this_player()->(fun)(P_SHORT);
+        The return type of call_other() is 'any' by default. However,
+        if your LPC code uses #pragma strict_types, the return type is
+        'unknown', and the result of call_other() must be casted to
+        the appropriate type before you can use it for anything.
 
-        Solange #pragma strict_types gesetzt ist, muss man das Resultat von
-        call_other() explizit auf einen passenden Typ casten, weil
-        call_other() unknown liefert.
+EXAMPLES
+        // All the following statements call the lfun QueryProp()
+        // in the current player with the argument P_SHORT.
+        string str, fun;
 
-        Das folgende Statement ruft die lfun short() in allen aktiven
-        Benutzern auf und speichert das gesammelte Resultat in einer
-        Variablen:
+        str = (string)call_other(this_player(), "QueryProp", P_SHORT);
+        fun = "QueryProp";
+        str = (string)call_other(this_player(), fun, P_SHORT);
 
-            string *s;
-            s = (string *)users()->short();
-            !Compat: call_other("/users/luser/thing", "???", 0);
-            Compat: call_other("users/luser/thing", "???", 0);
+        str = (string)this_player()->QueryProp(P_SHORT);
+        str = (string)this_player()->"QueryProp"(P_SHORT);
+        fun = "QueryProp";
+        str = (string)this_player()->(fun)(P_SHORT);
 
-        Das sieht etwas merkwuerdig aus, wurde aber oft verwendet, um einfach
-        ein Objekt zu laden. Dazu wurde die (nicht existierende) Funktion
-        "???" im Objekt aufgerufen. Gluecklicherweise gibt es heute zu
-        diesem Zweck die Efun load_object().
+        You have to do explicit type casting because of the unknown
+        return type, if you have set #pragma strict_types.
 
-GESCHICHTE
-        In LDMud 3.2.8 wurden die folgenden Verbesserungen eingefuehrt:
-          - die Formen x->"y"() und x->(y)() werden erkannt;
-          - die Form x->y() kollidiert nicht mehr mit einer lokalen Variablen,
-            die auch "y" heisst.
-          - eine simul_efun call_other() erwischt auch Aufrufe der Form ->().
-          - call_other kann auch auf Arrays von Objekten angewandt werden.
-        LDMud 3.2.10 machte den Aufruf von Objektarrays konfigurierbar.
-        LDMud 3.3.113 fuehrte den Hook H_DEFAULT_METHOD ein.
-        LDMud 3.5.0 machte den Aufruf von Objektarrays nicht mehr optional.
+        // This statement calls the lfun short() in all interactive users
+        // and stores the collected results in a variable.
+        string *s;
 
-SIEHE AUCH
-        call_direct(E), call_direct_resolved(E), call_resolved(E), create(A),
-        pragma(LPC), extern_call(E), function_exists(E), functions(LPC),
-        map_objects(E)
+        s = (string *)users()->short();
+
+        !Compat: call_other("/users/luser/thing", "???", 0);
+         Compat: call_other("users/luser/thing", "???", 0);
+
+        This looks a bit weird but it was used very often to just load
+        the object by calling a not existing function like "???".
+        Fortunately nowadays there is an efun load_object() for this
+        purpose.
+
+HISTORY
+        In LDMud 3.2.8 the following improvements were made:
+         - the forms x->"y"() and x->(y)() are recognized;
+         - the form x->y() no longer clashes with a local variable also
+           called "y";
+         - a simul_efun call_other() also catches ->() calls.
+         - call_other can be applied on arrays of objects.
+        LDMud 3.2.10 made the call on arrays of objects configurable.
+        LDMud 3.3.113 introduced the H_DEFAULT_METHOD hook.
+        LDMud 3.5.0 made the call on arrays of objects non-optional.
+
+SEE ALSO
+        call_direct(E), call_strict(E), call_direct_strict(E),
+        call_resolved(E), call_direct_resolved(E), create(A), pragma(LPC),
+        extern_call(E), function_exists(E), functions(LPC), map_objects(E)
diff --git a/doc/efun/call_out b/doc/efun/call_out
index 0293b3e..f3293c0 100644
--- a/doc/efun/call_out
+++ b/doc/efun/call_out
@@ -2,48 +2,52 @@
         void call_out(string fun, int delay, mixed arg, ...)
         void call_out(closure cl, int delay, mixed arg, ...)
 
-BESCHREIBUNG
-        Ruft zeitverzoegert die Funktion <fun> im aktuellen Objekt oder
-        die Closure <cl> auf. Der Aufruf erfolgt in <delay> Sekunden.
-        Die Funktion / Closure wird mit den <arg> Argumenten aufgerufen.
-        Die minimale Verzoegerung ist 0 (negative <delay> werden implizit als
-        0 behandelt). Allerdings ist die reale Verzoegerung etwas zwischen
-        <delay> und __ALARM_TIME__.
+DESCRIPTION
+        Set up a call to function fun in the current object, or to
+        closure cl. The call will take place after <delay> seconds, with the
+        remaining argument list provided.
+        <delay> can be a minimum time of 0 (negative values are implicitly
+        treated as 0), but the real delay will be something between <delay>
+        and <delay> + __ALARM_TIME__.
 
-        call_out() merkt sich den aktuellen User und ruft die Funktion
-        entsprechend auf. call_out() kann nur Funktionen aufrufen, die
-        oeffentlich zugaenglich sind, das heisst "public" und "static"
-        deklarierte Funtionen. "private" und "protected" deklarierte
-        Funktionen koennen nicht aufgerufen werden.
+        call_out() saves and restores the current user. It is now
+        possible to use say() or write() which rely on a current
+        user to be something useful.
 
-        Die Ausfuehrung von call_out()s erfordert einen einfachen (nicht
-        zu aufwendigen) Schutz gegen Rabbits: die Evalkosten aller
-        gleichzeitig anstehenden call_out()s werden auf einer pro-UID-Basis
-        summiert. Uebersteigt die Summe ein vorgegebenes Maximum, wird
-        ein Fehler 'too long evaluation' erzeugt, und es werden alle
-        call_out()s des betreffenden Benutzers, die zur gleichen Zeit
-        faellig werden, entfernt.
+        call_out() can only call functions by name <fun> which are publicly
+        accessible, i.e. "public" and "static" functions. "private" and
+        "protected" functions can't be called.
 
-        Wenn zwei call_out()s zum gleichen Zeitpunkt ausgefuehrt werden
-        sollen, wird der zuerst gestartete zuerst ausgefuehrt.
+        If <fun> does not define a publicly accessible function, the
+        efun will call the H_DEFAULT_METHOD hook if set.
+        Calls to the master object never use the H_DEFAULT_METHOD hook.
 
-BEISPIELE
+        The execution of the call_out()s implies a simple (not
+        exhaustive) measure against rabbits: the evaluation costs of
+        those call_outs() executing at the same time are summed up on
+        a per-UID base. If the summed-up costs exceed the given maximum,
+        a 'too long evaluation' error will occur and any remaining
+        call_outs() of this user scheduled for the same time are
+        discarded.
+
+        If two call_out()s were started with the same target time
+        the one that was issued first will be executed first.
+
+EXAMPLES
         call_out("RefreshMe", 10);
 
-        Dies ruft die Funktion RefreshMe() nach Ablauf von 10 Sekunden ohne
-        irgendwelche Argumente auf. Die Funktion RefresMe() kann dann
-        wiederum selbst call_out()s starten, auch auf sich selbst, was
-        eine Schleife erzeugt (keine Rekursion). Mit einer solchen Schleife
-        koennen Anweisungen in einem Objekt in regelmaessigen Zeitintervallen
-        ausgefuehrt werden. Es ist allerdings zu beachten, dass call_out()s
-        in einer linearen Liste gespeichert werden, und deshalb ziemlich
-        rechenaufwendig fuer den Treiber sind.
+        This will call the function RefreshMe() in 10 seconds without
+        any arguments. The function RefreshMe() can then call out
+        itself again which will result in a loop (not in a recursion)
+        which can be used to check or set up things in the object in
+        intervals. Be aware that callouts are stored in a linear
+        list, and so are somewhat expensive for the driver.
 
-        Und JA: selbst-replizierende call_out()s, bei denen jeder call_out()
-        selbst zwei oder mehr call_out()s in einem Loop erzeugt (sogenannte
-        Rabbits) verlangsamen das Mud ungemein und koennen es sogar zum
-        Crash bringen. Kein Grund, es selbst auszuprobieren.
+        And YES: self-replicating call_out()s, where each call_out()
+        creates two or more other call_out()s in a loop (so called
+        'rabbits') slow the mud down very fast, and are even able
+        to crash it. No need to try it yourself.
 
-SIEHE AUCH
+SEE ALSO
         remove_call_out(E), call_out_info(E), find_call_out(E),
         this_player(E), reset(A), heart_beat(A)
diff --git a/doc/efun/call_out_info b/doc/efun/call_out_info
index df357bc..8038bdd 100644
--- a/doc/efun/call_out_info
+++ b/doc/efun/call_out_info
@@ -1,19 +1,18 @@
 SYNOPSIS
-        mixed * call_out_info()
+        mixed * call_out_info(void)
 
-BESCHREIBUNG
-        Liefert Informationen ueber alle laufenden call_out()s. Das Resultat
-        ist ein Array, bei dem jedes Element wiederum aus einem Array besteht,
-        das einen call_out() beschreibt. Jedes dieser Unter-Arrays enthaelt 3
-        oder mehr Elemente:
+DESCRIPTION
+        Get information about all pending call outs. The result is an
+        array in which every entry is itself an array describing one
+        call_out. Each of these arrays consists of 3 or more elements:
 
-        1. Das Objekt, in dem die Funktion oder die Closure aufgerufen wird.
-        2. Die Funktion oder Closure.
-        3. Der verbleibende Delay bis zum Aufruf.
-        4ff. Die (optionalen) Argumente.
+        1. The object the function/closure is called in.
+        2. The function or closure.
+        3. The delay to go
+        4ff. The optional argument(s)
 
-        call_out()s fuer zerstoerte Objekte werden nicht in der Liste
-        aufgefuehrt.
+        Callouts for destructed objects will not be contained in the
+        list.
 
-SIEHE AUCH
+SEE ALSO
         call_out(E), remove_call_out(E), find_call_out(E)
diff --git a/doc/efun/call_resolved b/doc/efun/call_resolved
index 2b101df..68fe6bc 100644
--- a/doc/efun/call_resolved
+++ b/doc/efun/call_resolved
@@ -1,33 +1,41 @@
 SYNOPSIS
-        int call_resolved(mixed result, object ob, string func, mixed arg,...)
-        int* call_resolved(mixed* result, object* ob, string func, mixed arg,...)
+        int call_resolved(mixed result, object ob, string func, ...)
+        int* call_resolved(mixed* result, object* ob, string func, ...)
 
-BESCHREIBUNG
-        Die Funktion ist aehnlich zu call_other(). Wenn obj->func() definiert
-        und oeffentlich ist, werden alle Argumente <arg> an obj->func()
-        uebergeben. Das Resultat dieses Funktionsaufrufes wird in <result>
-        gespeichert und muss deshalb als Referenz uebergeben werden.
+DESCRIPTION
+        Similar to call_other(). If ob->func() is defined and publicly
+        accessible, any of the optional extra arguments are passed to
+        ob->func(...). The result of that function call is stored in
+        result, which must be passed by reference.
 
-        Wenn <ob> zerstoert wurde oder keine oeffentlich zugaengliche Funktion
-        <func> definiert, liefert call_resolved() 0 fuer Fehler, 1 bei Erfolg.
+        The efun returns 1 if the function could be called.
+        If ob::fun does not define a publicly accessible function, the
+        efun will call the H_DEFAULT_METHOD hook if set. If the hook
+        is not set or can't resolve the call either, the efun will return 0.
+        If the hook is set and can resolve the call, the efun will return -1.
 
-        <ob> kann auch ein object_name() sein. Wenn <ob> ein String ist und
-        das Objekt mit diesem Namen nicht gefunden oder geladen werden kann,
-        tritt ein Fehler auf.
+        Calls to the master object never use the H_DEFAULT_METHOD hook.
+        To force non-default calls, the efun call_direct_resolved() can
+        be used.
 
-        Ausserdem akzeptiert diese Efun auch Arrays von Objekten in <ob>:
-        The Funktion wird dann mit den gleichen Argumenten in allen angegebenen
-        Objekten aufgerufen. Die Ergebnisse des Funktionsaufrufes werden
-        in einem Array gespeichert, das an <result> zugewiesen wird, und die
-        Status-Codes werden in einem zweiten Array gesammelt, welches von der
-        Efun zurueckgeliefert wird. In dem Array koennen Objekte oder Namen
-        der Objekte angegebenen werden. Zerstoerte Objekte oder Nullen werden
-        als 0 in beiden Arrays eingetragen, verursachen jedoch keinen Fehler.
+        ob can also be an object_name. If a string is passed for ob
+        and an object with that name can't be found or loaded, an
+        error occurs.
 
-GESCHICHTE
-        LDMud 3.6.2 fuegte die Aufrufe von Arrays hinzu.
+        Additionally the efun accepts an array of objects as <ob>: the
+        function is called with the same arguments in all the given objects.
+        The single results are collected in two arrays, one for the result
+        of the function calls that will be stored in the result parameter,
+        and one for the efun result codes that will finally be returned from
+        the efun. Array elements can be objects or the names of existing
+        objects; destructed objects and 0s will yield a '0' as result in
+        both arrays, but don't cause an error.
 
-SIEHE AUCH
+HISTORY
+        LDMud 3.3.113 introduced the H_DEFAULT_METHOD hook.
+        LDMud 3.6.2 added array calls.
+
+SEE ALSO
         call_other(E), call_strict(E), call_direct(E), call_direct_strict(E),
         call_direct_resolved(E), create(A), pragma(LPC), extern_call(E),
         function_exists(E), functions(LPC), map_objects(E)
diff --git a/doc/efun/call_strict b/doc/efun/call_strict
index fbf6bd3..dddfbf7 100644
--- a/doc/efun/call_strict
+++ b/doc/efun/call_strict
@@ -3,8 +3,8 @@
         unknown call_strict(object*|string* ob, string func, ...)
 
         ob.fun(...)
-        ob->"fun"(...)
-        ob->(fun)(...)
+        ob."fun"(...)
+        ob.(fun)(...)
 
 DESCRIPTION
         Similar to call_other(). Call a member function <fun> in another
diff --git a/doc/efun/caller_stack b/doc/efun/caller_stack
index a08c8d1..7d6e286 100644
--- a/doc/efun/caller_stack
+++ b/doc/efun/caller_stack
@@ -2,32 +2,31 @@
         <object|lwobject>* caller_stack()
         <object|lwobject>* caller_stack(int add_interactive)
 
-BESCHREIBUNG
-        Liefert ein Array der previous_object(), die einen call_other() auf
-        this_object() verursacht haben. Dabei entspricht previous_object(i)
-        caller_stack()[i].
+DESCRIPTION
+        Returns an array of the previous_object()s who caused the
+        call_other() to this_object().
+        previous_object(i) equals caller_stack()[i].
 
-        Wenn die Funktion mit <add_interactive> (als wahr) aufgerufen wird,
-        wird this_interactive() dem Array hinzugefuegt, oder 0, wenn kein
-        this_interactive() existiert.
+        If you pass the optional argument <add_interactive> (as true value)
+        this_interactive() is appended to the array, or 0 if there is no
+        current interactive.
 
-BEISPIELE
-        Das interaktive Objekt A gibt ein Kommando ein, das im Objekt B eine
-        Funktion aufruft, die auf das Objekt C verweist, welches wiederum
-        eine Funktion im Objekt D aufruft.
+        Note: calls to 'alien lfun closures' (see symbol_function(E))
+        generate two entries on the stack if the bound object differs
+        from the closure object: the first is for the bound object,
+        the second for the closure object.
 
-        Wenn D nun caller_stack() aufruft, ergibt dies: ({C,B}).
-        Fuer caller_stack(1) ergibt die Funktion: ({C,B,A}).
+EXAMPLES
+        interactive object A enters a command which causes
+        a call to a function in object B, that one calls a
+        function in object C and that, in turn, in object D
 
-ANMERKUNGEN
-        Aufrufe von "alien lfun closures" (vergleiche symbol_function())
-        erzeugen zwei Eintraege im Stack, wenn das gebundene Objekt sich vom
-        Objekt der Closure unterscheidet: der erste Eintrag steht fuer das
-        gebundene Objekt, der zweite fuer das Closure-Objekt.
+        If D now calls caller_stack() the result would be: ({C,B}).
+        If it calls caller_stack(1) the result is: ({C,B,A}).
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6, vorgeschlagen von Tubmud.
+HISTORY
+        Introduced in LDMud 3.2.6, suggested by Tubmud.
 
-SIEHE AUCH
+SEE ALSO
         caller_stack_depth(E), previous_object(E), this_interactive(E),
         call_other(E)
diff --git a/doc/efun/caller_stack_depth b/doc/efun/caller_stack_depth
index 41b4e79..230827e 100644
--- a/doc/efun/caller_stack_depth
+++ b/doc/efun/caller_stack_depth
@@ -1,9 +1,9 @@
 SYNOPSIS
-        int caller_stack_depth()
+        int caller_stack_depth(void)
 
-BESCHREIBUNG
-        Liefert die Anzahl previous_object()s im Caller Stack. Dies kann fuer
-        Sicherheitschecks genutzt werden.
+DESCRIPTION
+        Returns the number of previous objects on the stack. This
+        can be used for security checks.
 
-SIEHE AUCH
+SEE ALSO
         caller_stack(E), previous_object(E), call_other(E), call_resolved(E)
diff --git a/doc/efun/capitalize b/doc/efun/capitalize
index 5c3b107..bbb82b7 100644
--- a/doc/efun/capitalize
+++ b/doc/efun/capitalize
@@ -1,12 +1,12 @@
 SYNOPSIS
         string capitalize(string str)
 
-BESCHREIBUNG
-        Konvertiert das erste Zeichen des Strings <str> in einen
-        Grossbuchtaben und gibt den neuen String zurueck.
+DESCRIPTION
+        Convert the first character in str to upper case, and return
+        the new string.
 
-BEISPIELE
-        capitalize("hallo welt!") -> "Hallo welt!"
+EXAMPLES
+        capitalize("heya!") -> "Heya!"
 
-SIEHE AUCH
+SEE ALSO
         lower_case(E), upper_case(E)
diff --git a/doc/efun/catch b/doc/efun/catch
index 57c58aa..f9a6056 100644
--- a/doc/efun/catch
+++ b/doc/efun/catch
@@ -1,65 +1,67 @@
 SYNOPSIS
         mixed catch(expr, expr, ...)
-        mixed catch(expr, expr, ...; modifiers)
+        mixed catch(expr, expr, ... ; modifiers)
 
-BESCHREIBUNG
-        Wertet die Ausdruecke <expr> aus. Wenn kein Fehler auftritt, wird 0
-        zurueck geliefert. Wenn ein Fehler auftritt, wird die Ausfuehrung an
-        diesem Punkt abgebrochen und ein String mit der Fehlermeldung wird
-        zurueck gegeben.
+DESCRIPTION
+        Evaluate the expressions. If there is no error, 0 is returned.
+        If there is an error, the evaluation of the expressions stops at
+        that point, and a string with the error message is returned.
 
-        Systemeigene Fehlermeldungen beginnen mit einem "*", benutzerdefinierte
-        Fehlermeldungen aus throw() und raise_error() (sofern von 0
-        verschieden), werden unveraendert zurueck geliefert.
+        System error messages start with a leading '*', user-defined
+        error values (other than 0) as given to throw() and raise_error() are
+        returned as they are.
 
-        Wenn zum Zeitpunkt, zu dem catch() aufgerufen wird, weniger als
-        __CATCH_EVAL_COST__ Rechenticks uebrig sind, wird ein Laufzeitfehler
-        RTE innerhalb von catch() erzeugt (und somit wie jeder andere
-        Fehler abgefangen) und es werden keine Ausdruecke <expr> aus catch()
-        ausgewertet. Der Modifikator 'reserve' kann verwendet werden,
-        einen anderen Wert fuer die Reserve anzugeben.
+        If at the time the catch() is encountered less than
+        __CATCH_EVAL_COST__ eval ticks are left, a runtime error will be
+        thrown from inside the catch() (and thus caught like every other
+        error) and the expressions will not be executed. The 'reserve'
+        modifier can be used to reserve a different amount of eval ticks.
 
-        Das Verhalten von catch() kann durch <modifiers> veraendert werden:
+        The default behaviour of catch() can be changed using modifiers:
 
-            'nolog':    Normalerweise wird der Fehler im Fehlerlog
-                        gespeichert, um die Fehlersuche zu erleichtern. Wird
-                        'nolog' gesetzt, wird dieser Log-Eintrag unterdrueckt.
-            'publish':  Normalerweise wird master::runtime_error() fuer einen
-                        Fehler innerhalb eines catch() nicht aufgerufen. Mit
-                        diesem <modifier> wird runtime_error() trotzdem
-                        aufgerufen.
-            'reserve <expr>': <expr> muss eine ganzen Zahl groesser 0
-                        ergeben, welche dann als Rechenreserve anstelle
-                        von __CATCH_EVAL_COST__ verwendet wird. Das Minimum
-                        ist 2 * __MASTER_EVAL_COST__ .
+          'nolog':   Normally, the caught error will be logged in the
+                     error logs for easier debugging. With this
+                     modifier, the log is suppressed.
 
-        catch() an sich ist nicht besonders laufzeit-intensiv: es braucht
-        nur etwas mehr Zeit als ein Intra-Objekt-Funktionsaufruf.
-        
-        throw() ist ebenfalls nicht sehr teuer, da lediglich einige
-        interne Strukturen aufgeraeumt werden muessen.
+          'publish': Normally, master::runtime_error() is not called
+                     for a caught error. This modifier instructs
+                     catch() to call it nevertheless.
 
-        Echte Laufzeitfehler (ob nun mit oder ohne catch()) sind hingegen
-        sehr zeitintensiv.
+          'reserve <expr>': The expression has to evaluate to a number
+                     greater than 0 and is used to determine the amount
+                     of eval ticks to reserve, instead of the default
+                     of __CATCH_EVAL_COST__. The minimum required
+                     are 2 * __MASTER_EVAL_COST__.
+          'limit <expr>': The expression has to evaluate to a number
+                     greater than 0 and is used to limit the eval cost
+                     for the evaluation of the expression.
 
-        catch ist nicht im eigentlichen Sinne eine Efun, sondern eine Compiler
-        Anweisung.
+        catch() itself is not expensive as far as execution time is
+        concerned: it is about the same as a intra-object function call.
 
+        throw() is not very expensive either, but does include the
+        internal cleanup of several structures.
 
-BEISPIELE
+        Real runtime errors on the other hand are expensive regardless
+        of whether they are caught or not, as they include the generation 
+        of the stack backtrace.
+
+        catch() is not really an efun but a compiler directive.
+
+EXAMPLES
         object obj;
         string err;
-        if(err = catch(obj = clone_object("/foo/bar/baz")))
-            write("Kann das Objekt nicht clonen. Grund: "+err+"\n");
+        if (err = catch(obj = clone_object("/foo/bar/baz")))
+           write("Cannot clone object, reason:"+err"+\n");
 
-GESCHICHTE
-        LDMud 3.2.9 fuehrte den 'nolog' catch() als experimentelles Feature
-            ein.
-        LDMud 3.2.10 implementierte 'nolog' als offizielle Form und fuehrte
-            zudem 'publish' ein.
-        LDMud 3.3.559 verlegte den Test auf verbleibende Rechenticks in die
-            vom catch() umschlossenen Ausfuehrung.
-        LDMud 3.3.560 fuegte den Modifikator 'reserve' ein.
+HISTORY
+        LDMud 3.2.9 introduced the 'nolog' catch() as experimental feature.
+        LDMud 3.2.10 implemented 'nolog' as official form and added
+          'publish'.
+        LDMud 3.3.559 moved the check regarding __CATCH_EVAL_COST__ inside
+          the catch().
+        LDMud 3.3.560 added the 'reserve' modifier.
+        LDMud 3.6.7 added the 'limit' modifier.
 
-SIEHE AUCH
+SEE ALSO
         throw(E), raise_error(E), predefined(D), runtime_error(M)
diff --git a/doc/efun/ceil b/doc/efun/ceil
index 6989baa..f5893f8 100644
--- a/doc/efun/ceil
+++ b/doc/efun/ceil
@@ -1,19 +1,19 @@
 SYNOPSIS
         float ceil(int|float arg)
 
-BESCHREIBUNG
-        Rundet <arg> zur naechsten ganzen Zahl auf und liefert das Resultat
-        zurueck. Wenn <arg> ein Integer ist, wird das Resultat in float
-        konvertiert.
+DESCRIPTION
+        Round the <arg>ument upwards the nearest whole number, returning
+        that value. If the <arg>ument value is an integer, the result will
+        be that value, converted to float.
 
-BEISPIELE
-        ceil(4.5);      ergibt:  5.0
-        ceil(-4.5);     ergibt: -4.0
-        ceil(5);        ergibt:  5.0
+EXAMPLES
+        ceil(4.5)  - returns 5.0
+        ceil(-4.5) - returns -4.0
+        ceil(4)    - returns 4.0
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.7.
-        LDMud 3.2.9 fuehrte neu Integer als moegliche Argumente ein.
+HISTORY
+        Introduced in LDMud 3.2.7.
+        LDMud 3.2.9 allowed integers as argument values.
 
-SIEHE AUCH
+SEE ALSO
         abs(E), floor(E)
diff --git a/doc/efun/check_type b/doc/efun/check_type
new file mode 100644
index 0000000..01977cd
--- /dev/null
+++ b/doc/efun/check_type
@@ -0,0 +1,16 @@
+SYNOPSIS
+        int check_type(mixed arg, lpctype type)
+
+DESCRIPTION
+        Returns 1 if the first argument <arg> fulfills the type <type>,
+        0 otherwise.
+
+        This check is similar to runtime type checks. The target type
+        doesn't need to match exactly, but a variable of that type should
+        be able to hold the argument.
+
+HISTORY
+        Introduced in LDMud 3.6.7
+
+SEE ALSO
+        get_type_info(E), lpctypes(LPC)
diff --git a/doc/efun/clear_bit b/doc/efun/clear_bit
index eddd69d..04b80be 100644
--- a/doc/efun/clear_bit
+++ b/doc/efun/clear_bit
@@ -1,35 +1,37 @@
 SYNOPSIS
         string clear_bit(string str, int n)
 
-BESCHREIBUNG
-        Gibt einen neuen String zurueck, in dem das n-te Bit im String <str>
-        nicht gesetzt ist. Dabei wird <str> selbst nicht veraendert.
+DESCRIPTION
+        Return the new string where bit n is cleared in string str.
+        Note that the old string str is not modified.
 
-        Jedes Zeichen enthaelt sechs Bits. So kann in jedem Zeichen eine Zahl
-        zwischen 0 und 63 (2^6=64) gespeichert werden. Das erste Zeichen ist
-        der Leerschlag " " mit Wert 0. Das erste Zeichen im String ist jenes
-        mit den niedrigsten Bits (0 bis 5).
+        Each character contains 6 bits. So you can store a value
+        between 0 and 63 ( 2^6=64) in one character. Starting
+        character is the blank character " " which has the value 0.
+        The first charcter in the string is the one with the lowest
+        bits (0-5).
 
-BEISPIELE
+EXAMPLES
         string s;
-        s = clear_bit("_", 5);
+        s=clear_bit("_",5);
 
-        Weil "_" den hoechsten moeglichen Wert enthaelt (63), enthaelt die
-        Variable s nun das Zeichen "?", das dem Wert 31 entspricht (63-2^5=31).
+        Because "_" is the highest possible value (63), the variable s
+        will now contain the charcter "?" wich is equal to 31
+        (63-2^5=31).
 
         string s;
-        s = clear_bit("?<",3);
-        s = clear_bit(s, 8);
+        s=clear_bit("?<",3);
+        s=clear_bit(s,8);
 
-        s enthaelt nun den String "78". "?" entspricht dem Wert 31 und "<" dem
-        Wert 28. "?<" entspricht also dem Wert 31+28<<6=31+1792=1823, was in
-        Binaerschreibweise (hoechstes Bit rechts) 11111000111 ergibt. Werden
-        aus dieser Zahl die Bits 3 und 8 (die Nummerierung beginnt mit dem
-        0. Bit) ergibt dann: 11101000011. Die ersten 6 Bits 010111 sind in
-        Dezimalschreibweise 23. Die zweiten 6 Bits (0)11000 ergeben 24 in
-        Dezimalschreibweise. Nun entspricht der Wert 23 dem Zeichen "7" und
-        der Wert 24 dem Zeichen "8". Der String s enthaelt also "78".
+        s will now contain the string "78". "?" equals 31 and "<"
+        equals 28. Now "?<" is equal to 31+28<<6=31+1792=1823 which is
+        in binary notation (highest bit on the right side)
+        11111000111. Now clearing the bit 3 and bit 8 (bit numbering
+        starts with zero) will result in 11101000011. The first 6 bits
+        are in decimal notation 23 and the next 6 are equal to 24. Now
+        the 23 is the character "7" and 24 is the "8". So the string s
+        contains "78".
 
-SIEHE AUCH
+SEE ALSO
         set_bit(E), next_bit(E), last_bit(E), test_bit(E), count_bits(E),
         and_bits(E), or_bits(E), xor_bits(E), invert_bits(E), copy_bits(E)
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)
diff --git a/doc/efun/clonep b/doc/efun/clonep
index 6e63cd2..06534d2 100644
--- a/doc/efun/clonep
+++ b/doc/efun/clonep
@@ -4,25 +4,27 @@
         int clonep(string obj)
         int clonep(mixed  arg)
 
-BESCHREIBUNG
-        Liefert 1, wenn das angegebene Objekt ein Klon ist, ansonsten 0.
-        Das Objekt kann dabei auch durch seinen Objekt-Namen angegeben werden.
-        Wird kein Argument uebergeben, so wird this_object() getestet.
-        Liefert 0, wenn das Argument von einem anderen Typ ist.
-        Ein Objekt, dessen Programm mittels replace_program() ersetzt wurde,
-        zaehlt nicht als Klon.
+DESCRIPTION
+        The efun returns 1 if <obj> is a clone, and 0 if it is not.
+        The <obj> can be given as the object itself, or by its name.
+        If <obj> is omitted, the current object is tested.
+        Arguments of other types return 0.
+        Objects with replaced programs no longer count as clones.
 
-BEISPIELE
+EXAMPLES
         object o;
-        o = clone_object("/obj/ding");
-        write(clonep(o));                          --> schreibt "1"
-        write(clonep("/obj/ding"))                 --> schreibt "0"
+        o = clone_object("/std/thing");
+        write(clonep(o));                           --> writes "1"
+        write(clonep("/std/thing"))                 --> writes "0"
 
-        (Im COMPAT_MODE "obj/ding" als Dateinahmen benutzen)
+        (In COMPAT_MODE use "std/thing" as the filename)
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6, geaendert in 3.2.7, so dass Objekte mit
-        ersetzten Programmen nicht mehr als Klone zaehlen.
+HISTORY
+        Introduced in LDMud 3.2.6, changed in 3.2.7 so that objects
+        with replaced programs no longer count as clones.
 
-SIEHE AUCH
-        load_name(E), clone_object(E), clones(E)
+SEE ALSO
+        load_name(E), clone_object(E), clones(E), bytesp(E),
+        closurep(E), coroutinep(E), floatp(E), intp(E), lpctypep(E),
+        lwobjectp(E), mappingp(E), objectp(E), pointerp(E), referencep(E),
+        stringp(E), structp(E), symbolp(E)
diff --git a/doc/efun/clones b/doc/efun/clones
index f302287..c402c0b 100644
--- a/doc/efun/clones
+++ b/doc/efun/clones
@@ -3,36 +3,40 @@
         object * clones(int what)
         object * clones(string|object obj [, int what])
 
-BESCHREIBUNG
-        Diese Efun liefert ein Array mit allen Clones eines bestimmten
-        Blueprints. Dabei unterliegt das Array den normalen Systemlimiten.
+DESCRIPTION
+        The efuns returns an array with all clones of a certain blueprint.
+        The array is subject to the usual runtime limits.
 
-        Wenn <obj> angegeben ist, werden alle Clones des Blueprints von <obj>
-        (oder von <obj> selbst, falls <obj> ein Blueprint ist) ausgegeben,
-        sonst die Clone des aktuellen Objekts bzw. die Clone des Blueprints
-        des aktuellen Objekts. Wenn <obj> als String angegeben ist, muss es
-        der Name eines existierenden Objekts sein.
+        If <obj> is given, all clones of the blueprint of <obj> (which
+        may be <obj> itself) are returned, otherwise all clones of the
+        current object resp. of the current object's blueprint. If <obj>
+        is given as string, it must name an existing object.
 
-        <what> waehlt aus, wie Clone von aelteren Versionen des Blueprints
-        zu behandeln sind:
-            == 0: liefert nur die Clone des aktuellen Blueprints (Standard)
-            == 1: liefert nur die Clone der alten Blueprint-Version
-            == 2: liefert alle Clones aller Blueprint-Versionen
+        <what> selects how to treat clones made from earlier versions
+        of the blueprint:
+          == 0: (default) return the clones of the current blueprint only.
+          == 1: return the clones of the previous blueprints only.
+          == 2: return all clones of the blueprint.
 
-        Wenn der Treiber mit DYNAMIC_COSTS kompiliert wurde, sind die Kosten
-        fuer diese Funktion proportional zur Anzahl Objekte im Spiel.
+        Note: this efun is computationally expensive.
 
-BEISPIELE
+        If the driver is compiled with DYNAMIC_COSTS, the cost of this
+        efun is proportional to the number of objects in the game.
+
+EXAMPLES
         object o, p;
-        o = clone_object("/std/thing"); /* oder "std/thing" im COMPAT-Modus */
+        o = clone_object("/std/thing"); /* or "std/thing" in COMPAT mode */
         destruct(find_object("/std/thing"));
         p = clone_object("/std/thing");
 
-        clones("/std/thing")    --> ergibt ({ p })
-        clones("/std/thing", 0) --> ergibt ({ p })
-        clones("/std/thing", 1) --> ergibt ({ o })
-        clones("/std/thing", 2) --> ergibt ({ o, p })
+        clones("/std/thing")    --> returns ({ p })
+        clones("/std/thing", 0) --> returns ({ p })
+        clones("/std/thing", 1) --> returns ({ o })
+        clones("/std/thing", 2) --> returns ({ o, p })
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.8.
-        LDMud 3.2.9 fuehrte die dynamischen Kosten ein.
+HISTORY
+        Introduced in LDMud 3.2.8.
+        LDMud 3.2.9 added the dynamic cost.
+
+SEE ALSO
+        blueprint(E), clone_object(E), clonep(E)
diff --git a/doc/efun/closurep b/doc/efun/closurep
index e93183a..3bb8f60 100644
--- a/doc/efun/closurep
+++ b/doc/efun/closurep
@@ -1,11 +1,13 @@
 SYNOPSIS
-        int closurep(mixed arg)
+        int closurep(mixed)
 
-BESCHREIBUNG
-        Liefert 1, wenn das Argument eine Closure ist, ansonsten 0.
+DESCRIPTION
+        Returns 1 if the argument is a closure.
 
-GESCHICHTE
-        Eingefuehrt in 3.2@70.
+HISTORY
+        Introduced in 3.2@70
 
-SIEHE AUCH
-        intp(E), referencep(E), symbolp(E)
+SEE ALSO
+        bytesp(E), clonep(E), coroutinep(E), floatp(E), intp(E), lpctypep(E),
+        lwobjectp(E), mappingp(E), objectp(E), pointerp(E), referencep(E),
+        stringp(E), structp(E), symbolp(E)
diff --git a/doc/efun/command b/doc/efun/command
index 5058a14..e32ee61 100644
--- a/doc/efun/command
+++ b/doc/efun/command
@@ -1,31 +1,29 @@
-GESCHUETZT
 SYNOPSIS
         int command(string str)
         int command(string str, object ob)
 
-BESCHREIBUNG
-        Wertet <str> wie ein Kommando aus, das direkt von einem interaktiven
-        Benutzer gegeben wurde. Das Kommando wird auf das aktuelle Objekt
-        angewendet oder, falls angegeben, auf das Objekt <obj>.
+DESCRIPTION
+        Execute str as a command given directly by the user. Any
+        effects of the command will apply to the current object,
+        or to the given <ob>ject.
 
-        Der Rueckgabewert ist 0 bei Fehlschlag. Bei Erfolg wird ein
-        numerischer Wert zurueckgegeben, der die Eval Kosten darstellt. Ein
-        hoeherer Rueckgabewert bedeutet hoehere Kosten. Die Eval Kosten
-        entsprechen ungefaehr der Anzahl ausgefuehrter LPC Maschinencode
-        Instruktionen.
+        Return value is 0 for failure. Otherwise a numeric value is
+        returned which tells the evaluation cost. Bigger number means
+        higher cost.  The evaluation cost is approximately the number
+        of LPC machine code instructions executed.
 
-        Wenn command() auf auf ein anderes Objekt angewedet wird, koennen auf
-        diesem Wege keine "static" deklarierten Funktionen aufgerufen werden,
-        um etwas Schutz vor unerlaubten Aufrufen zu geben.
+        If command() is called on another object, it is not possible
+        to call static functions in this way, to give some protection
+        against illegal forces.
 
-        Kommandos werden gestapelt, das heisst, nach der Ausfuehrung von <str>
-        werden die alten Werte fuer this_player(), query_verb() etc. wieder
-        hergestellt.
+        Commands are stacked, meaning that after the given command <str>
+        has finished, the old settings of this_player(), query_verb()
+        etc, are restored.
 
-GESCHICHTE
-        Bis 3.2.6 im Native-Modus konnten Kommandos nur auf das aktuelle 
-            Objekt angewendet werden.
-        Seit 3.2.7 werden Kommandos gestapelt.
+HISTORY
+        Up to 3.2.6 in native mode, commands could be applied to the current
+        object only.
+        Since 3.2.7, commands are stacked.
 
-SIEHE AUCH
+SEE ALSO
         command_stack(E), notify_fail(E), enable_commands(E), get_eval_cost(E)
diff --git a/doc/efun/command_stack b/doc/efun/command_stack
index 37e2f0b..3efd0cb 100644
--- a/doc/efun/command_stack
+++ b/doc/efun/command_stack
@@ -1,34 +1,31 @@
-GESCHUETZT
 SYNOPSIS
         #include <commands.h>
 
-        mixed * command_stack()
+        mixed * command_stack(void)
 
-BESCHREIBUNG
-        Liefert ein Array, das den Kommandostack beschreibt. Das Array
-        umfasst command_stack_depth() Eintraege; der erste davon beschreibt
-        das Top-Level-Kommando, der letzte Eintrag das aktuelle Kommando.
+DESCRIPTION
+        Return an array describing the current command stack. The array has
+        command_stack_depth() entries, the first describing the top-level
+        command, and the last describing the current one.
 
-        Jeder Eintrag ist wiederum ein Array mit folgenden Eintraegen:
+        Each entry is an array itself with these entries:
 
-            string [CMD_VERB]:      das Verb dieses Kommandos
-            string [CMD_TEXT]:      der volle Text des Kommandos
-            object [CMD_ORIGIN]:    der urspruengliche Kommandogeber
-            object [CMD_PLAYER]:    der momentane Kommandogeber
-            mixed  [CMD_FAIL]:      der Inhalt von notify_fail() (oder 0)
-            mixed  [CMD_FAILOBJ]:   das Objekt, welches notify_fail() gesetzt
-                                    hat
+          string [CMD_VERB]:    the verb of this command
+          string [CMD_TEXT]:    the full command text
+          object [CMD_ORIGIN]:  the original command giver
+          object [CMD_PLAYER]:  the current command giver
+          mixed  [CMD_FAIL]:    the notify_fail setting (or 0).
+          mixed  [CMD_FAILOBJ]: the object which set the notify_fail setting.
 
-        CMD_ORIGIN und CMD_PLAYER sind fuer gewoehnlich das gleiche Objekt.
-        Es gibt nur einen Unterschied, wenn der modify_command-Hook den
-        Kommandogeber mit set_this_player() aendert.
+        CMD_ORIGIN and CMD_PLAYER are usually the same; there is a difference
+        only if the modify_command hook changes the command giver with
+        set_this_player().
 
-ANMERKUNGEN
-        Jeder der Eintraege im Array kann 0 sein.
+        Note that any of the entries may be returned as 0.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.7.
-        LDMud 3.2.8 fuegte den CMD_FAILOBJ Eintrag hinzu.
+HISTORY
+        Introduced in LDMud 3.2.7.
+        LDMud 3.2.8 added the CMD_FAILOBJ result.
 
-SIEHE AUCH
+SEE ALSO
         command(E), command_stack_depth(E), notify_fail(E)
diff --git a/doc/efun/command_stack_depth b/doc/efun/command_stack_depth
index b9b67c5..16ab86f 100644
--- a/doc/efun/command_stack_depth
+++ b/doc/efun/command_stack_depth
@@ -1,13 +1,12 @@
-GESCHUETZT
 SYNOPSIS
-        int command_stack_depth()
+        int command_stack_depth(void)
 
-BESCHREIBUNG
-        Liefert die Anzahl der verschachtelten Kommandos, also die Tiefe des
-        Command Stacks.
+DESCRIPTION
+        Return the number of nested commands, ie. the depth of the command
+        stack
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.7.
+HISTORY
+        Introduced in LDMud 3.2.7.
 
-SIEHE AUCH
+SEE ALSO
         command(E), command_stack(E)
diff --git a/doc/efun/compile_string b/doc/efun/compile_string
new file mode 100644
index 0000000..b2242dd
--- /dev/null
+++ b/doc/efun/compile_string
@@ -0,0 +1,78 @@
+SYNOPSIS
+        #include <compile_string.h>
+
+        closure compile_string(symbol* args, string str)
+        closure compile_string(symbol* args, string str
+                              , struct compile_string_options opts)
+        closure compile_string(symbol* args, string &str
+                              , struct compile_string_options opts)
+
+DESCRIPTION
+        Compiles <str> into a closure. The closure will be bound to the
+        current object. By default the string will be interpreted as an
+        LPC expression. The string may also contain preprocessor directives
+        (which must occur on their own line).
+
+        The argument names are given as the first argument <args>.
+
+        Optionally the function accepts a struct with additional options.
+        All entries in this struct are optional. These are the members:
+
+          functions:
+          variables:
+          structs:
+              A mapping or closure for the lookup of functions, variables,
+              resp. structs during compilation. A mapping is looked up using
+              the name, the closure will be called with the name as its only
+              argument. The name of the function, variable, resp. struct will
+              be given as a symbol. The result (mapping value resp. closure
+              return value) should be:
+                - for <functions> a closure,
+                - for <variables> a reference, and
+                - for <structs> a template struct (i.e. a struct whose data
+                  is irrelevant, only its type will be used).
+
+          use_object_functions:
+          use_object_variables:
+          use_object_structs:
+              If set (integer != 0) the compiled code may reference the
+              current object's functions, variables, resp. structs. However
+              successful lookups in <variables>, <functions>, resp. <structs>
+              have precedence. Private variables, functions and structs
+              cannot be accessed this way.
+
+          compile_expression:
+              If set (integer != 0) the string is interpreted as an expression
+              (eg. "1+1") and therefore must not contain a terminal semicolon.
+              If no compile mode is selected, this is the default.
+
+          compile_block:
+              If set (integer != 0) the string is interpreted as a block (code
+              between braces), the surrounding braces can be omitted. To return
+              a value, the code needs a return statement.
+
+          as_async:
+              If set (integer != 0) the code will be compiled as a coroutine,
+              i.e. the resulting closure will return a coroutine when called.
+
+          detect_end:
+              If set (integer != 0) the driver will try(!) to detect the end
+              of the expression/block and return the remaining string in <str>
+              (<str> needs to be passed as a reference for this).
+              An end is detected if the word or character following a full
+              expression or block is not suitable to continue the expression
+              or block. Also a comma will end an expression.
+
+        When compiling expressions the result of the H_AUTO_INCLUDE_EXPRESSION
+        driver hook will be prepended, for blocks the H_AUTO_INCLUDE_BLOCK
+        hook will be used.
+
+EXAMPLES
+        funcall(compile_string(({'a,'b}), "a+b"), 1, 2);
+
+HISTORY
+        Introduced in LDMud 3.6.7.
+
+SEE ALSO
+        compile_string_options(S), lambda(E), block(LPC),
+        auto_include_expression(H), auto_include_block(H)
diff --git a/doc/efun/configure_driver b/doc/efun/configure_driver
index fa2407b..0924da2 100644
--- a/doc/efun/configure_driver
+++ b/doc/efun/configure_driver
@@ -118,6 +118,73 @@
            the swap file as small as possible.
            (Same as the --swap-compact command line switch.)
 
+        <what> == DC_SWAP_TIME
+           Sets the time until the program of an unused object is swapped out
+           (if possible). Setting the interval to 0 disables swapping of
+           programs.
+           <data> is an integer and measured in seconds.
+           (Same as the --swap-time command line switch.)
+
+        <what> == DC_SWAP_VAR_TIME
+           Sets the time until the variables of an unused object are swapped
+           out. Setting the interval to 0 disables swapping of variables.
+           <data> is an integer and measured in seconds.
+           (Same as the --swap-variables command line switch.)
+
+        <what> == DC_CLEANUP_TIME
+           Sets the time until the cleanup hook is called in unused objects.
+           <data> is an integer and measured in seconds.
+           (Same as the --cleanup-time command line switch.)
+
+        <what> == DC_RESET_TIME
+           Sets the default time until the reset hook is called in objects.
+           The change will take effect for each object after its next reset.
+           <data> is an integer and measured in seconds.
+           (Same as the --reset-time command line switch.)
+
+        <what> == DC_DEBUG_FILE
+           Sets the debug log file.
+           The filename can be given relative to the mudlib directory
+           or absolute with regard to the operating system.
+           Settings this option will force closing and reopening
+           the log file (even if the name didn't change).
+
+         <what> == DC_FILESYSTEM_ENCODING
+           Sets the character encoding used in the filesystem.
+           If not set, the default encoding is derived from the LC_CTYPE
+           environment setting. If LC_CTYPE is not defined, or it is set to
+           the "C" locale, then "UTF-8" is used as a default.
+
+         <what> == DC_SIGACTION_SIGHUP
+         <what> == DC_SIGACTION_SIGINT
+         <what> == DC_SIGACTION_SIGUSR1
+         <what> == DC_SIGACTION_SIGUSR2
+           Sets the default action when the driver encounters those
+           POSIX signals. It can be set to one of the following options:
+
+             DCS_DEFAULT:
+                 This is the default action: Call handle_external_signal()
+                 in the master and act upon its result.
+
+             DCS_IGNORE:
+                 Ignore the signal.
+
+             DCS_TERMINATE:
+                 Terminate the process immediately.
+
+             DCS_SHUTDOWN:
+                 Do a graceful shutdown.
+
+             DCS_INFORM_MASTER:
+                 Call handle_external_signal(), but ignore its result.
+
+             DCS_RELOAD_MASTER:
+                 Reload the master object.
+
+             DCS_THROW_EXCEPTION:
+                 Cause an error in the currently running LPC or Python
+                 function.
+
 HISTORY
         Introduced in LDMud 3.3.719.
         DC_ENABLE_HEART_BEATS was added in 3.5.0.
@@ -128,6 +195,12 @@
         DC_TLS_DHE_PARAMETER was added in 3.5.0.
         DC_TLS_CIPHERLIST was added in 3.5.0.
         DC_SWAP_COMPACT_MODE was added in 3.5.0.
+        DC_SWAP_TIME was added in 3.5.2
+        DC_SWAP_VAR_TIME was added in 3.5.2
+        DC_CLEANUP_TIME was added in 3.5.2
+        DC_RESET_TIME was added in 3.5.2
+        DC_DEBUG_FILE was added in 3.5.2.
+        DC_SIGACTION_* were added in 3.5.2.
 
 SEE ALSO
         configure_interactive(E)
diff --git a/doc/efun/configure_interactive b/doc/efun/configure_interactive
index b7d145d..360c8b7 100644
--- a/doc/efun/configure_interactive
+++ b/doc/efun/configure_interactive
@@ -35,7 +35,8 @@
           interactive user <ob>. Non-combinable characters and single
           received characters are returned as separate strings as usual.
 
-          The newline '\n' and the NUL character '\0' are always
+          The newline '\n', the NUL character '\0' and non-ASCII
+          characters (unicode characters > 127) are always
           non-combinable.
 
           The given string should contain all combinable characters.
@@ -46,7 +47,7 @@
           Set the set of characters which can be combined into a single
           string, just like IC_COMBINE_CHARSET_AS_STRING.
 
-          The given array shall contain an array of up to 32 integers
+          The given array shall contain an array of up to 16 integers
           that are interpreted as 8-bit-values. Each character is encoded
           as one bit (ASCII characters 0-7 in the first integer, and so on).
           So a character <n> is treated as combinable if
@@ -58,8 +59,10 @@
 
         <what> == IC_CONNECTION_CHARSET_AS_STRING
           Set the set of characters which can be output to the interactive
-          user <ob>. All other characters are discarded. (This does not
-          apply to binary_message()).
+          user <ob>. All other characters are discarded. This does only
+          apply to characters in the ASCII character set (first 128
+          characters). This does not apply to unicode characters > 127
+          or to binary_message().
 
           The given string should contain all allowed characters.
           If given as the number 0, the default charset is re-established.
@@ -68,7 +71,7 @@
           Set the set of characters which can be output to the interactive
           user <ob>, just like IC_CONNECTION_CHARSET_AS_STRING.
 
-          The given array shall contain an array of up to 32 integers
+          The given array shall contain an array of up to 16 integers
           that are interpreted as 8-bit-values. Each character is encoded
           as one bit (ASCII characters 0-7 in the first integer, and so on).
           So a character <n> is allowed to be output if
@@ -131,9 +134,20 @@
           from modify_command() to something else using the
           H_MODIFY_COMMAND_FNAME hook.
 
+        <what> == IC_ENCODING
+          Sets the encoding to convert the network input to/from.
+          All received bytes (except telnet negotiations) will be converted
+          using this encoding to the internal unicode representation.
+          And all text strings will be converted back to this encoding
+          when sent to the interactive.
+
+          Default is "ISO-8859-1//TRANSLIT".
+
 
 HISTORY
         Introduced in LDMud 3.3.719.
+        IC_ENCODING introduced in LDMud 3.6.0.
+
 
 SEE ALSO
         configure_driver(E)
diff --git a/doc/efun/configure_object b/doc/efun/configure_object
index d3d7c0f..7e13d40 100644
--- a/doc/efun/configure_object
+++ b/doc/efun/configure_object
@@ -5,7 +5,7 @@
 
 DESCRIPTION
         Sets the option <what> to the value <data> on the object <ob>
-        or the default for all interactives if <ob> is 0.
+        or the default for all objects if <ob> is 0.
 
         If the first argument <ob> is not this_object(), the privilege
         violation ("configure_object", this_object(), ob, what, data)
@@ -46,4 +46,5 @@
         Introduced in LDMud 3.5.0.
 
 SEE ALSO
-        object_info(E), configure_interactive(E), configure_driver(E)
+        object_info(E), configure_interactive(E), configure_lwobject(E),
+        configure_driver(E)
diff --git a/doc/efun/copy b/doc/efun/copy
index be041ac..8ee701b 100644
--- a/doc/efun/copy
+++ b/doc/efun/copy
@@ -1,24 +1,29 @@
 SYNOPSIS
         mixed copy(mixed arg)
 
-BESCHREIBUNG
-        Erzeugt eine flache Kopie von <arg> und liefert diese zurueck. Fuer
-        Arrays und Mappings heisst das, dass neue Arrays bzw. Mappings erzeugt
-        werden, die Kopien der Elemente des Originals enthalten. Eingebettete
-        Arrays und Mappings werden jedoch als Referenz uebergeben!
+DESCRIPTION
+        Create a shallow copy of <arg> and return it. For arrays, mappings,
+        structs and lightweight objects this means that a new array, mapping,
+        struct resp. lightweight object is created with copies of the
+        original content. Embedded arrays, mappings, structs or lightweight
+        objects are copied by reference!
 
-        Fuer andere Werte von <arg> bewirkt diese Funktion nichts.
+        For other values this function is a no-op.
 
-BEISPIELE
+        If a lightweight objects was copied, the H_CREATE_LWOBJECT_COPY hook
+        will be called to finish initialization of the lightweight object.
+
+EXAMPLES
         mixed *a, *b;
+
         a = ({ 1, ({ 21, 22 }) });
         b = copy(a);
         a[0] = -1; a[1][0] = -21;
-            --> a ist nun ({ -1, ({ -21, 22 }) })
-                b ist nun ({  1, ({ -21, 22 }) })
+         --> a is now ({ -1, ({ -21, 22 }) })
+             b is now ({  1, ({ -21, 22 }) })
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6.
+HISTORY
+        Introduced in LDMud 3.2.6.
 
-SIEHE AUCH
+SEE ALSO
         deep_copy(E)
diff --git a/doc/efun/copy_bits b/doc/efun/copy_bits
index c3a8eb2..f103855 100644
--- a/doc/efun/copy_bits
+++ b/doc/efun/copy_bits
@@ -1,41 +1,42 @@
 SYNOPSIS
-        string copy_bits(string src, string dest [, int srcstart
-            [, int deststart [, int copylen]]])
+        string copy_bits(string src, string dest
+                         [, int srcstart [, int deststart [, int copylen ]]])
 
-BESCHREIBUNG
-        Kopiert den Bitbereich [<srcstart> .. <srcstart> + <copylen>] aus dem
-        Bitstring <src> in den Bitstring <dest> beginnend an der Position
-        <deststart>. Die alten Werte von <dest> werden dabei ueberschrieben.
+DESCRIPTION
+        Copy the bitrange [<srcstart>..<srcstart>+<copylen>[ from
+        bitstring <src> and copy it into the bitstring <dest> starting
+        at <deststart>, overwriting the original bits at those positions.
 
-        Der resultierende String wird zurueck geliefert, die beiden
-        Originalstrings bleiben unbeeinflusst.
+        The resulting combined string is returned, the input strings remain
+        unaffected.
 
-        Wird <srcstart> nicht angegeben, wird <src> von Anfang an kopiert.
-        Ist <srcstart> negativ, wird vom letzten Bit her gezaehlt (d.h. -1
-        bezeichnet das letzte Bit).
+        If <srcstart> is not given, <src> is copied from the start.
+        If <srcstart> is negative, it is counted from one past the last set
+        bit in the string (ie. '-1' will index the last set bit).
 
-        Wird <deststart> nicht angegeben, wird <dest> von Anfang an kopiert.
-        Ist <deststart> negativ, wird vom letzten Bit her gezaehlt (d.h. -1
-        bezeichnet das letzte Bit).
+        If <deststart> is not given, <dest> will be overwritten from the start.
+        If <deststart> is negative, it is counted from one past the last set
+        bit in the string (ie. '-1' will index the last set bit).
 
-        Wird <copylen> nicht angegeben wird, so wird der gesamte Bitstring
-        <src> kopiert. Das Resultat besteht dann aus dem Bitstring <dest>
-        bis zur Position <deststart>, gefolgt von <src> ab der Position
-        <srcstart>.
+        If <copylen> is not given, it is assumed to be infinite, ie. the result
+        will consist of <dest> up to position <deststart>, followed by
+        the data copied from <src>.
+        If <copylen> is negative, the function will copy the abs(<copylen>)
+        bits _before_ <srcstart> in to the result.
 
-        Wenn <copylen> negativ ist, werden abs(<copylen>) _vor_ <srcstart> in
-        das Resultat kopiert.
+        None of the range limits can become negative.
 
-BEISPIELE
-        copy_bits(src, dest, 10)       === src[10..]
-        copy_bits(src, dest, 10, 5)    === dest[0..4] + src[10..]
-        copy_bits(src, dest, 10, 5, 3) === dest[0..4] + src[10..12] + dest[8..]
+EXAMPLES
+        copy_bits(src, dest, 10)    === src[10..]
+        copy_bits(src, dest, 10, 5) === dest[0..4] + src[10..]
+        copy_bits(src, dest, 10, 5, 3)
+                                    === dest[0..4] + src[10..12] + dest[8..]
 
-        (Die Notation src[] / dest[] dient nur der Illustration!)
+          (The src[]/dest[] is just for explanatory purposes!)
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
+HISTORY
+        Introduced in LDMud 3.3.166.
 
-SIEHE AUCH
+SEE ALSO
         clear_bit(E), set_bit(E), test_bit(E), next_bit(E), last_bit(E),
         count_bits(E), or_bits(E), xor_bits(E), invert_bits(E), and_bits(E)
diff --git a/doc/efun/copy_file b/doc/efun/copy_file
index 7f12111..685fd03 100644
--- a/doc/efun/copy_file
+++ b/doc/efun/copy_file
@@ -1,22 +1,22 @@
 SYNOPSIS
         int copy_file(string from, string to)
 
-BESCHREIBUNG
-        Die Efun copy_file() kopiert die Datei <from> nach <to>. Wenn <to> ein
-        existierendes Verzeichnis ist, wird <from> in dieses Verzeichnis
-        kopiert und behaelt seinen Namen.
+DESCRIPTION
+        The efun copy_file() will copy the file <from> to the new name <to>.
+        If <to> exists and is a directory, then <from> will be placed in that
+        directory and keep its original name.
 
-        Die Funktion erfordert Lesezugriff auf <from> und Schreibrechte fuer
-        <to>.
+        You must have read permission for <from> and write permission for
+        the target file to copy the file.
 
-        Bei Erfolg liefert die Funktion 0 zurueck, im Fehlerfalle einen
-        Wert ungleich Null.
+        On successfull completion copy_file() will return 0. If any error
+        occurs, a non-zero value is returned.
 
-BEISPIELE
+EXAMPLES
         copy_file("/players/wizard/obj.c", "/players/wizard/newobj.c");
 
-GESCHICHTE
-        LDMud 3.2.9 beschraenkte die Fehlermeldungen auf Werte != 0.
+HISTORY
+        LDMud 3.2.9 restricted the error behaviour to returning non-0.
 
-SIEHE AUCH
+SEE ALSO
         mkdir(E), rmdir(E), rm(E), rename(E)
diff --git a/doc/efun/coroutinep b/doc/efun/coroutinep
new file mode 100644
index 0000000..373d218
--- /dev/null
+++ b/doc/efun/coroutinep
@@ -0,0 +1,13 @@
+SYNOPSIS
+        int coroutinep(mixed arg)
+
+DESCRIPTION
+        Returns 1 if the argument is a coroutine.
+
+HISTORY
+        Introduced in LDMud 3.6.5.
+
+SEE ALSO
+        bytesp(E), clonep(E), closurep(E), floatp(E), intp(E), lpctypep(E),
+        lwobjectp(E), mappingp(E), objectp(E), pointerp(E), referencep(E),
+        stringp(E), structp(E), symbolp(E)
diff --git a/doc/efun/cos b/doc/efun/cos
index 1345404..359e016 100644
--- a/doc/efun/cos
+++ b/doc/efun/cos
@@ -1,11 +1,11 @@
 SYNOPSIS
         float cos(int|float)
 
-BESCHREIBUNG
-        Liefert den Kosinus des Argumentes.
+DESCRIPTION
+        Returns the cosinus of the argument.
 
-GESCHICHTE
-        LDMud 3.2.9: Ganzzahlen (Integers) als Argument hinzugefuegt.
+HISTORY
+        LDMud 3.2.9 added integers as arguments.
 
-SIEHE AUCH
+SEE ALSO
         sin(E), asin(E), acos(E), tan(E), atan(E), atan2(E)
diff --git a/doc/efun/count_bits b/doc/efun/count_bits
index 67e6dd4..c3f61c8 100644
--- a/doc/efun/count_bits
+++ b/doc/efun/count_bits
@@ -1,15 +1,17 @@
 SYNOPSIS
         int count_bits(string str)
 
-BESCHREIBUNG
-        Diese Funktion zaehlt die Anzahl gesetzer Bits im Bitstring <str> und
-        liefert die Anzahl als Resultat zurueck.
+DESCRIPTION
+        Count the number of set bits in bitstring <str> and return the number
+        as result.
 
-BEISPIELE
+EXAMPLES
         string s;
-        s = set_bit("", 3); s = set_bit(s, 15);
-        count_bits(s) --> liefert 2
 
-SIEHE AUCH
+        s = set_bit("", 3); s = set_bit(s, 15);
+
+        count_bits(s) --> returns 2
+
+SEE ALSO
         clear_bit(E), set_bit(E), test_bit(E), next_bit(E), last_bit(E),
         or_bits(E), xor_bits(E), invert_bits(E), copy_bits(E)
diff --git a/doc/efun/creator b/doc/efun/creator
index 93bc69b..ab07b7f 100644
--- a/doc/efun/creator
+++ b/doc/efun/creator
@@ -1,13 +1,15 @@
 SYNOPSIS
         string creator(object|lwobject ob)
 
-BESCHREIBUNG
-        Diese Funktion ist nur im COMPAT-Modus verfuegbar.
+DESCRIPTION
+        This efun is for backward compatibility only. It is only
+        available in compat mode.
 
-        Resultat is der Name des Erzeugers des Objektes. Dies kann ein
-        Wizard sein, oder eine Domain.
+        Returns the creator (i.e. the name of the wizard or domain) of
+        the object. Default for ob is this_object().
 
-        Default fuer <ob> ist this_object().
+HISTORY
+        Since 3.2.1@47, this efun is an alias for getuid().
 
-SIEHE AUCH
+SEE ALSO
         getuid(E), native(C), uids(C)
diff --git a/doc/efun/crypt b/doc/efun/crypt
index e6c183d..57266f9 100644
--- a/doc/efun/crypt
+++ b/doc/efun/crypt
@@ -1,18 +1,18 @@
 SYNOPSIS
         string crypt(string str, int seed)
         string crypt(string str, string seed)
-        string crypt(bytes  str, int seed)
-        string crypt(bytes  str, string seed)
+        string crypt(bytes str, int seed)
+        string crypt(bytes str, string seed)
 
-BESCHREIBUNG
-        Verschluesselt den String <str> mit dem Schluessel <seed>. <seed> kann
-        entweder ein Integer sein oder zwei Zeichen aus dem String <seed>.
-        Wenn <seed> 0 ist, wird ein zufaelliger Schluessel erzeugt.
+DESCRIPTION
+        Crypt the string <str> the first two characters
+        from the string <seed> as a seed. If <seed> is an integer, then
+        a random seed is used.
 
-        Das Resultat enthaelt den Schluessel als die ersten beiden Zeichen.
+        The result has the first two characters as the seed.
 
-        Fuer Passwortabfragen, die ohne Echo eingegeben werden koennen sollen,
-        bietet input_to() ein spezielles Flag.
+        If you want to let enter password information without echo,
+        input_to() can be used with special argument.
 
-SIEHE AUCH
-        md5_crypt(E), md5(E), sha1(E), hash(E), hmac(E)
+SEE ALSO
+        md5(E), md5_crypt(E), sha1(E), hash(E), hmac(E)
diff --git a/doc/efun/ctime b/doc/efun/ctime
index 5bb3136..c06d72a 100644
--- a/doc/efun/ctime
+++ b/doc/efun/ctime
@@ -2,24 +2,23 @@
         string ctime(int clock)
         string ctime(int *uclock)
 
-BESCHREIBUNG
-        Interpretiert das Argument <clock> als Anzahl Sekunden seit dem
-        01.JAN.1970, 00:00 Uhr und konvertiert dieses in einen ansehnlichen
-        String, der Datum und Zeit enthaelt. Wenn <clock> nicht angegeben
-        wird, wird time() verwendet.
+DESCRIPTION
+        Interpret the argument clock as number of seconds since Jan,
+        1st, 1970, 0.00 and convert it to a nice date and time string.
+        If clock is not specified, time() is used as default.
 
-        Die zweite Form entspricht der ersten, ausser dass das Argument ein
-        Array mit zwei Integer Elementen ist. Das erste Element int[0] gibt
-        die Anzahl Sekunden seit dem 01. Januar 1970 an, das zweite Element
-        int[1] die Anzahl Millisekunden innerhalb dieser Sekunde.
+        The second form is like the first, except that it takes as argument
+        an array of ints as it is returned from utime(): int[0] is the number
+        of seconds like before, int[1] is the number of microseconds within
+        that second.
 
-BEISPIELE
+EXAMPLES
         write(ctime()+"\n");
 
-        Dies gibt etwas aus wie "Sun Oct 26 19:28:30 2003".
+        This will print out something like "Fri Jul 17 19:13:33 1992".
 
-GESCHICHTE
-        LDMud 3.2.9 fuehrte die zweite Variante ein.
+HISTORY
+        LDMud 3.2.9 introduced the second form.
 
-SIEHE AUCH
+SEE ALSO
         gmtime(E), localtime(E), mktime(E), strftime(E), time(E), utime(E)
diff --git a/doc/efun/db_affected_rows b/doc/efun/db_affected_rows
index 1ea2783..999fb88 100644
--- a/doc/efun/db_affected_rows
+++ b/doc/efun/db_affected_rows
@@ -2,23 +2,21 @@
 SYNOPSIS
         int db_affected_rows(int handle)
 
-BESCHREIBUNG
-        Resultat ist die Anzaehl der Zeilen die vom letzten SQL-Befehl
-        beeinflusst wurden, welches zum SQL-server via <handle> gesendet
-        wurde. Diese Funktion ist nuetzlich lediglich fuer DELETE-
-        und UPDATE-Befehle.
+DESCRIPTION
+        Return the number of affected rows of the last SQL-statement that
+        has been sent to the SQL-server via handle <handle>.
+        Only useful for DELETE- or UPDATE-operations.
 
-        Die Funktion ist nur verfuegbar wenn der Driver mit
-        mySQL-Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __MYSQL__ definiert.
+        The function is available only if the driver is compiled with
+        mySQL support. In that case, __MYSQL__ is defined.
 
-        Die Efun ist privilegiert als ("mysql", "db_affected_rows").
+        The efun triggers a privilege violation ("mysql", "db_affected_rows").
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
-        LDMud 3.2.11 machte die Efun privilegiert.
+HISTORY
+        Added in 3.2.9 .
+        LDMud 3.2.11 added the privilege violation.
 
-SIEHE AUCH
+SEE ALSO
         db_conv_string(E), db_close(E), db_coldefs(E), db_connect(E),
         db_exec(E), db_error(E), db_fetch(E), db_insert_id(E), db_handles(E),
         mysql(C), privilege_violation(M)
diff --git a/doc/efun/db_close b/doc/efun/db_close
index 208176c..8bfd4fb 100644
--- a/doc/efun/db_close
+++ b/doc/efun/db_close
@@ -2,21 +2,20 @@
 SYNOPSIS
         int db_close(int handle)
 
-BESCHREIBUNG
-        Schliesse die Verbindung <handle> zum SQL-Server. Resultat ist
-        <handle> bei Erfolg.
+DESCRIPTION
+        Close the server-connection with the handle <handle>
+        Return the handle-number on success.
 
-        Die Funktion ist nur verfuegbar wenn der Driver mit
-        mySQL-Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __MYSQL__ definiert.
+        The function is available only if the driver is compiled with
+        mySQL support. In that case, __MYSQL__ is defined.
 
-        Die Efun ist privilegiert als ("mysql", "db_close").
+        The efun triggers a privilege violation ("mysql", "db_close").
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
-        LDMud 3.2.11 machte die Efun privilegiert.
+HISTORY
+        Added in 3.2.9 .
+        LDMud 3.2.11 added the privilege violation.
 
-SIEHE AUCH
+SEE ALSO
         db_affected_rows(E), db_conv_string(E), db_coldefs(E), db_connect(E),
         db_exec(E), db_error(E), db_fetch(E), db_handles(E), db_insert_id(E),
-        mysql(C, privilege_violation(M))
+        mysql(C), privilege_violation(M)
diff --git a/doc/efun/db_coldefs b/doc/efun/db_coldefs
index bf08fc2..e3a5d49 100644
--- a/doc/efun/db_coldefs
+++ b/doc/efun/db_coldefs
@@ -2,22 +2,21 @@
 SYNOPSIS
         string * db_coldefs(int handle)
 
-BESCHREIBUNG
-        Resultat ist ein Array mit den Spaltennamen der Tabelle des
-        letzten QUERY-Befehls. Gab die Datenbank keine Tabelle zurueck, dann
-        gibt die Efun 0 als Ergebnis.
+DESCRIPTION
+        Return an array with the column names of the current table.
+        If the database didn't return a result, the result of this efun
+        is 0.
 
-        Die Funktion ist nur verfuegbar wenn der Driver mit
-        mySQL-Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __MYSQL__ definiert.
+        The function is available only if the driver is compiled with
+        mySQL support. In that case, __MYSQL__ is defined.
 
-        Die Efun ist privilegiert als ("mysql", "db_coldefs").
+        The efun triggers a privilege violation ("mysql", "db_coldefs").
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
-        LDMud 3.2.11 machte die Efun privilegiert.
+HISTORY
+        Added in 3.2.9.
+        LDMud 3.2.11 added the privilege violation.
 
-SIEHE AUCH
+SEE ALSO
         db_affected_rows(E), db_conv_string(E), db_close(E), db_connect(E),
         db_exec(E), db_error(E), db_fetch(E), db_handles(E), db_insert_id(E),
         mysql(C), privilege_violation(M)
diff --git a/doc/efun/db_connect b/doc/efun/db_connect
index ffbd515..df7b560 100644
--- a/doc/efun/db_connect
+++ b/doc/efun/db_connect
@@ -4,30 +4,26 @@
         int db_connect(string database, string user)
         int db_connect(string database, string user, string password)
 
-BESCHREIBUNG
-        Stelle eine Verbindung zur SQL-Datenbank <database> des
-        lokalen SQL-Servers her. Das Ergebnis ist die Handle-Nummer fuer diese
-        Verbindung und kann fuer Anfragen zu dieser Datenbank verwendet
-        werden. Bei der Verbindung ist die automatische Wiederverbindung
-        aktiv - moegliche Folgen davon finden sich in mysql(C).
+DESCRIPTION
+        Connect to the database <database> on the local mySQL-server.
+        The return-value is the handle for this connection. Automatic
+        reconnects are enabled for this connection; see mysql(C) for
+        implications.
+        If the database does not exist or the server is NOT started,
+        a runtime-error is raised.
 
-        Existiert die Datenbank nicht, oder kann der lokale SQL-Server nicht
-        gefunden werden, wird ein Laufzeitfehler erzeugt.
+        If specified, the connection is made for <user> with <password>.
 
-        Wenn angegeben, wird die Verbindung fuer <user> mit <password>
-        erzeugt.
+        The function is available only if the driver is compiled with
+        mySQL support. In that case, __MYSQL__ is defined.
 
-        Die Funktion ist nur verfuegbar wenn der Driver mit
-        mySQL-Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __MYSQL__ definiert.
+        The efun triggers a privilege violation ("mysql", "db_connect").
 
-        Die Efun ist privilegiert als ("mysql", "db_connect").
+HISTORY
+        Added in 3.2.9 .
+        LDMud 3.2.11 added the privilege violation.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
-        LDMud 3.2.11 machte die Efun privilegiert.
-
-SIEHE AUCH
+SEE ALSO
         db_affected_rows(E), db_conv_string(E), db_close(E), db_coldefs(E),
         db_exec(E), db_error(E), db_fetch(E), db_handles(E),
         db_insert_id(E), mysql(C), privilege_violation(M)
diff --git a/doc/efun/db_conv_string b/doc/efun/db_conv_string
index b630d6f..6c2fa37 100644
--- a/doc/efun/db_conv_string
+++ b/doc/efun/db_conv_string
@@ -2,19 +2,18 @@
 SYNOPSIS
         string db_conv_string(string str)
 
-BESCHREIBUNG
-        Wandele den String <str> in einen String um, der von der Datenbank
-        korrekt interpretiert werden kann; z.B. werden all Apostrophe
-        durch \' ersetzt.
+DESCRIPTION
+        Convert the string <str> into a string that is correctly interpretated
+        for usage as a string in db_exec(), e.g. ' is replaced with \' and so
+        on.
 
-        Die Funktion ist nur verfuegbar wenn der Driver mit
-        mySQL-Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __MYSQL__ definiert.
+        The function is available only if the driver is compiled with
+        mySQL support. In that case, __MYSQL__ is defined.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
+HISTORY
+        Added in 3.2.9 .
 
-SIEHE AUCH
+SEE ALSO
         db_affected_rows(E), db_close(E), db_coldefs(E), db_connect(E),
         db_exec(E), db_error(E), db_fetch(E), db_handles(E), db_insert_id(E),
         mysql(C)
diff --git a/doc/efun/db_error b/doc/efun/db_error
index cb6d291..f5271d0 100644
--- a/doc/efun/db_error
+++ b/doc/efun/db_error
@@ -2,22 +2,21 @@
 SYNOPSIS
         string db_error(int handle)
 
-BESCHREIBUNG
-        Result ist ein String, der den Fehler der letzten
-        Datenbanktransaktion beschreibt.  War die letzte Transaktion
-        erfolgreich, ist das Ergebnis 0.
+DESCRIPTION
+        Return a string describing the error which occurred during the last
+        database transaction. If the last database transaction was successful,
+        this call returns 0.
 
-        Die Funktion ist nur verfuegbar wenn der Driver mit
-        mySQL-Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __MYSQL__ definiert.
+        The function is available only if the driver is compiled with
+        mySQL support. In that case, __MYSQL__ is defined.
 
-        Die Efun ist privilegiert als ("mysql", "db_error").
+        The efun triggers a privilege violation ("mysql", "db_error").
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
-        LDMud 3.2.11 machte die Efun privilegiert.
+HISTORY
+        Added in 3.2.9 .
+        LDMud 3.2.11 added the privilege violation.
 
-SIEHE AUCH
+SEE ALSO
         db_affected_rows(E), db_conv_string(E), db_close(E), db_coldefs(E),
         db_connect(E), db_exec(E), db_fetch(E), db_handles(E), db_insert_id(E),
         mysql(C), privilege_violation(M)
diff --git a/doc/efun/db_exec b/doc/efun/db_exec
index 274c983..2c48faa 100644
--- a/doc/efun/db_exec
+++ b/doc/efun/db_exec
@@ -2,21 +2,21 @@
 SYNOPSIS
         int db_exec(int handle, string statement)
 
-BESCHREIBUNG
-        Fuehre den SQL-Befehl <statement> fuer die Verbindung <handle> aus.
-        Resultat ist das Handle bei Erfolg, oder 0 bei einem Fehler.
+DESCRIPTION
+        Execute the SQL-statement <statement> for the connection <handle> to
+        the SQL-server. The result is the handle if all went okay. If there
+        was an error in the statement, 0 is returned.
 
-        Die Funktion ist nur verfuegbar wenn der Driver mit
-        mySQL-Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __MYSQL__ definiert.
+        The function is available only if the driver is compiled with
+        mySQL support. In that case, __MYSQL__ is defined.
 
-        Die Efun ist privilegiert als ("mysql", "db_exec").
+        The efun triggers a privilege violation ("mysql", "db_exec").
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
-        LDMud 3.2.11 machte die Efun privilegiert.
+HISTORY
+        Added in 3.2.9 .
+        LDMud 3.2.11 added the privilege violation.
 
-SIEHE AUCH
+SEE ALSO
         db_affected_rows(E), db_conv_string(E), db_close(E), db_coldefs(E),
         db_connect(E), db_error(E), db_fetch(E), db_handles(E),
         db_insert_id(E), mysql(C), privilege_violation(M)
diff --git a/doc/efun/db_fetch b/doc/efun/db_fetch
index b143e8a..39465b2 100644
--- a/doc/efun/db_fetch
+++ b/doc/efun/db_fetch
@@ -2,22 +2,21 @@
 SYNOPSIS
         mixed db_fetch(int handle)
 
-BESCHREIBUNG
-        Hole _eine_ Resultatzeile der letzten SQL-Aktion fuer Verbindung
-        <handle>. Sind keine weiteren Zeilen verfuegbar, wird 0
-        zurueckgegeben.
+DESCRIPTION
+        Retrieve _ONE_ line of result of the latest SQL-action to the server
+        based on the handle <handle>. If not more results are on the server,
+        0 is returned.
 
-        Die Funktion ist nur verfuegbar wenn der Driver mit
-        mySQL-Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __MYSQL__ definiert.
+        The function is available only if the driver is compiled with
+        mySQL support. In that case, __MYSQL__ is defined.
 
-        Die Efun ist privilegiert als ("mysql", "db_fetch").
+        The efun triggers a privilege violation ("mysql", "db_fetch").
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
-        LDMud 3.2.11 machte die Efun privilegiert.
+HISTORY
+        Added in 3.2.9 .
+        LDMud 3.2.11 added the privilege violation.
 
-SIEHE AUCH
+SEE ALSO
         db_affected_rows(E), db_conv_string(E), db_close(E), db_coldefs(E),
         db_connect(E), db_error(E), db_exec(E), db_handles(E), db_insert_id(E),
         mysql(C), privilege_violation(M)
diff --git a/doc/efun/db_handles b/doc/efun/db_handles
index 99811a6..de9fa23 100644
--- a/doc/efun/db_handles
+++ b/doc/efun/db_handles
@@ -2,23 +2,24 @@
 SYNOPSIS
         int * db_handles()
 
-BESCHREIBUNG
-        Result ist ein Array mit allen aktiven Verbindungshandles zum
-        SQL-Server. Das Array ist nach der Zeit der letzten Aktion sortiert:
-        das zuletzt genutzte Handle kommt an erster Stelle. Sind keine
-        Verbindungen aktiv, ist das Array leer.
+DESCRIPTION
+        Returns an array with all open handles to the SQL-server.
+        As mySQL is most of the time limited to 100 connections, you
+        should not let this number grow too big. The handles are sorted
+        in a special order: The last used handle is the first one and
+        the handle that hasn't been used for the longest time is
+        the last one. If no handles are open, an empty array is returned.
 
-        Die Funktion ist nur verfuegbar wenn der Driver mit
-        mySQL-Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __MYSQL__ definiert.
+        The function is available only if the driver is compiled with
+        mySQL support. In that case, __MYSQL__ is defined.
 
-        Die Efun ist privilegiert als ("mysql", "db_handles").
+        The efun triggers a privilege violation ("mysql", "db_handles").
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
-        LDMud 3.2.11 machte die Efun privilegiert.
+HISTORY
+        Added in 3.2.9 .
+        LDMud 3.2.11 added the privilege violation.
 
-SIEHE AUCH
+SEE ALSO
         db_affected_rows(E), db_conv_string(E), db_close(E), db_coldefs(E),
         db_connect(E), db_error(E), db_exec(E), db_fetch(E), db_insert_id(E),
         mysql(C), privilege_violation(M)
diff --git a/doc/efun/db_insert_id b/doc/efun/db_insert_id
index 93159e2..ae73c10 100644
--- a/doc/efun/db_insert_id
+++ b/doc/efun/db_insert_id
@@ -2,22 +2,21 @@
 SYNOPSIS
         int db_insert_id(int handle)
 
-BESCHREIBUNG
-        Nach dem Einfuegen einer Zeile in eine Tabelle mit einem
-        AUTO_INCREMENT-Feld, diese Efun kann dazu benutzt werden den neuen
-        Wert dieses Feldes zurueckzugeben.
+DESCRIPTION
+        After inserting a line into a table with an AUTO_INCREMENT field,
+        this efun can be used to return the (new) value of the AUTO_INCREMENT
+        field.
 
-        Die Funktion ist nur verfuegbar wenn der Driver mit
-        mySQL-Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __MYSQL__ definiert.
+        The function is available only if the driver is compiled with
+        mySQL support. In that case, __MYSQL__ is defined.
 
-        Die Efun ist privilegiert als ("mysql", "db_insert_id").
+        The efun triggers a privilege violation ("mysql", "db_insert_id").
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
-        LDMud 3.2.11 machte die Efun privilegiert.
+HISTORY
+        Added in 3.2.9 .
+        LDMud 3.2.11 added the privilege violation.
 
-SIEHE AUCH
+SEE ALSO
         db_affected_rows(E), db_conv_string(E), db_close(E), db_coldefs(E),
         db_connect(E), db_error(E), db_exec(E), db_fetch(E), db_handles(E),
         mysql(C), privilege_violation(M)
diff --git a/doc/efun/debug_message b/doc/efun/debug_message
index 6b3b652..35e09e1 100644
--- a/doc/efun/debug_message
+++ b/doc/efun/debug_message
@@ -4,34 +4,35 @@
         void debug_message(string text)
         void debug_message(string text, int flags)
 
-BESCHREIBUNG
-        Gibt <text> an die Ausgaenge stdout und stderr sowie an die Datei
-        <host>.debug.log oder an eine beliebige Kombination dieser drei aus.
+DESCRIPTION
+        Prints the given text to stdout, stderr, the <host>.debug.log file,
+        or any combination of these.
 
-        Das Argument <flag> bezeichnet durch eine Kombination von Bitflags das
-        Ziel und die Art, in der das Resultat geschrieben wird.
+        The parameter <flags> is a combination of bitflags determining the
+        target and the mode of writing.
 
-        Die Ziel-Flags sind: DMSG_STDOUT, DMSG_STDERR und DMS_LOGFILE. Wird
-        zusaetzlich das Flag DMSG_STAMP gesetzt, erhaelt jeder Eintrag einen
-        Zeitstempel (Timestamp) im Format 'YYYY.MM.DD HH:MM:SS '.
+        The target flags are: DMSG_STDOUT, DMSG_STDERR and DMSG_LOGFILE.
+        If the flag DMSG_STAMP is given, the message is prepended with the
+        current date and time in the format 'YYYY.MM.DD HH:MM:SS '.
 
-        Wenn <flags> 0 ist, weggelassen wird oder kein Ziel-Flag enthaelt,
-        wird <text> standardmaessig an stdout und ins Logfile ausgegeben.
+        If <flags> is given as 0, left out, or contains no target
+        definition, debug_message() will print to stdout and to the logfile.
 
 
-BEISPIELE
-        debug_message("Dieser Text geht an stdout und ins Logfile.\n");
-        debug_message("Dies geht an stderr.\n", DMSG_STDERR);
-        debug_message("Dies geht an stdout und stderr.\n", DMSG_STDOUT
-            | DMSG_STDERR);
-        debug_message("Dies geht an stdout und ins Logfile, mit Timestamp.\n",
-            DMSG_STAMP);
-        debug_message("Die geht an stdout, mit vorangestelltem Timestamp.\n",
-            DMSG_STDOUT | DMSG_STAMP);
+EXAMPLES
+        debug_message("This goes to stdout and the logfile.\n");
+        debug_message("This goes to stderr.\n", DMSG_STDERR);
+        debug_message("This goes to stdout and stderr.\n"
+                     , DMSG_STDOUT | DMSG_STDERR);
 
-GESCHICHTE
-        Eingefuehrt in 3.2.1@34.
-        LDMud 3.2.9 fuehrte das Argument <flags> ein.
+        debug_message("This goes to stdout and the logfile, with timestamp.\n"
+                     , DMSG_STAMP);
+        debug_message("This goes to stdout and has the timestamp in front.\n"
+                     , DMSG_STDOUT | DMSG_STAMP);
 
-SIEHE AUCH
+HISTORY
+        Introduced in 3.2.1@34.
+        LDMud 3.2.9 introduced the <flags> parameter.
+
+SEE ALSO
         last_instructions(E)
diff --git a/doc/efun/deep_copy b/doc/efun/deep_copy
index 460d90a..1a4d7e1 100644
--- a/doc/efun/deep_copy
+++ b/doc/efun/deep_copy
@@ -1,27 +1,34 @@
 SYNOPSIS
         mixed deep_copy(mixed arg)
 
-BESCHREIBUNG
-        Erzeugt eine echte Kopie von <arg> und liefert diese zurueck. Fuer
-        Arrays und Mappings bedeutet dies, dass ein neues Array oder Mapping
-        erzeugt wird, das exakte Kopien der Eintraege des Originals enthaelt.
-        Eingebettete Arrays und Mappings werden ebenso echt kopiert.
+DESCRIPTION
+        Create a deep copy of <arg> and return it. For arrays, mappings,
+        structs and lightweight objects this means that a new array, mapping,
+        struct resp. lightweight object is created with copies of the
+        original content. Embedded arrays, mappings, structs or lightweight
+        objects are truly copied, too.
 
-        Fuer andere Typen als Mappings und Arrays bewirkt diese Funktion
-        nichts.
+        For other values this function is a no-op.
 
-        Wenn im Driver DYNAMIC_COST definiert ist, zaehlt jedes eingebettete
-        Mapping oder Array zu den Evaluationskosten sowohl in der Groesse als
-        auch in der Einbettungstiefe.
+        If a lightweight objects was copied, the H_CREATE_LWOBJECT_COPY hook
+        will be called to finish initialization of the lightweight object.
 
-BEISPIELE
+        If DYNAMIC_COST is defined, every nested array, mapping, struct and
+        lightweight objects counts towards the evaluation cost in both size
+        and nesting depth.
+
+EXAMPLES
         mixed *a, *b;
+
         a = ({ 1, ({ 21, 22 }) });
         b = deep_copy(a);
         a[0] = -1; a[1][0] = -21;
-         --> a ist jetzt   ({ -1, ({ -21, 22 }) })
-             b bleibt      ({  1, ({  21, 22 }) })
+         --> a is now   ({ -1, ({ -21, 22 }) })
+             b is still ({  1, ({  21, 22 }) })
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6.
-        LDMud 3.2.9 fuegte die dynamischen Kosten zur Efun hinzu.
+HISTORY
+        Introduced in LDMud 3.2.6.
+        LDMud 3.2.9 added the dynamic cost to the efun.
+
+SEE ALSO
+        copy(E)
diff --git a/doc/efun/deep_inventory b/doc/efun/deep_inventory
index 05200f1..12a2e8a 100644
--- a/doc/efun/deep_inventory
+++ b/doc/efun/deep_inventory
@@ -1,36 +1,40 @@
 SYNOPSIS
-        object * deep_inventory()
+        object * deep_inventory(void)
         object * deep_inventory(object ob)
         object * deep_inventory(object ob, int depth)
 
-BESCHREIBUNG
-        Gibt ein Array der Objekte zurueck, die in <obj> enthalten sind.
-        Wenn <obj> nicht angegeben wird, wird standardmaessig this_object()
-        verwendet. Ebenso werden alle Objekte angegeben, die sich im Inventory
-        der in <obj> enthaltenen Objekte befinden. Die Suche verlaeuft
-        rekursiv absteigend.
+DESCRIPTION
+        Returns an array of the objects contained in the inventory of
+        ob (or this_object() if no arg given) and in the inventories
+        of these objects, climbing down recursively.
 
-        Ist <depth> angegeben und ungleich 0, ist das Resultat wie folgt
-        gefiltert:
-          <depth> > 0: Nur die Objekte in den ersten <depth> Ebenen
-                       werden zurueckgegeben.
-          <depth> < 0: Nur die Objekte in der -<depth>ten Ebene werden
-                       zurueckgegeben.
+        If <depth> is given and not 0, the result is limited as follows:
 
-BEISPIELE 
+          <depth> > 0: Only the objects in the first <depth> levels of
+                       inventory are returned.
+          <depth> < 0: Only the objects in level -<depth> of inventory are
+                       returned.
+
+        In this, level '1' is the inventory of <ob> itself.
+
+EXAMPLES
+        Given the following inventory structure
+
         ob
         +- ob1
         +- ob2
-        |   +- ob21
+        |   `- ob21
         |  ob3
-        |   +- ob31
+        |   `- ob31
         +- ob4
 
-
-        deep_inventory(ob) => ({ob1, ob2, ob3, ob4, ob21, ob31})
-        deep_inventory(ob, 1) => ({ob1, ob2, ob3, ob4})
-        deep_inventory(ob, 2) => ({ob1, ob2, ob3, ob4, ob21, ob31})
+        deep_inventory(ob)     => ({ob1, ob2, ob3, ob4, ob21, ob31})
+        deep_inventory(ob, 1)  => ({ob1, ob2, ob3, ob4})
+        deep_inventory(ob, 2)  => ({ob1, ob2, ob3, ob4, ob21, ob31})
         deep_inventory(ob, -2) => ({ob21, ob31})
 
-SIEHE AUCH
+HISTORY
+        LDMud 3.3.554 added the <depth> parameter.
+
+SEE ALSO
         first_inventory(E), next_inventory(E), all_inventory(E)
diff --git a/doc/efun/destruct b/doc/efun/destruct
index fd4ab2c..2947aad 100644
--- a/doc/efun/destruct
+++ b/doc/efun/destruct
@@ -1,43 +1,43 @@
 SYNOPSIS
         void destruct(object ob)
 
-BESCHREIBUNG
-        Zerstoert und entfernt das Objekt ob. Ist ob == 0 (ob wurde schon
-        zerstoert), so passiert nichts. Nach dem Aufruf von destruct()
-        existieren keine globalen Variablen mehr, sondern nur noch lokale
-        Variablen und Argumente.
+DESCRIPTION
+        Completely destroy and remove object ob (if not already done so).
+        After the call to destruct(), no global variables will exist any
+        longer, only local ones, and arguments.
 
-        Wenn sich ein Objekt selbst zerstoert, wird die Ausfuehrung nicht
-        sofort abgebrochen. Wird die Efun this_object() aufgerufen, so
-        liefert diese 0 zurueck.
+        If an object self-destructs, it will not immediately terminate
+        execution. If the efun this_object() will be called by the
+        destructed object, the result will be 0. Furthermore, all
+        calls to other objects and to simul-efuns will be ignored, instead
+        the driver will return 0 als 'call' result.
 
-        Die meisten Mudlibs moegen es nicht, wenn andere Objekte mittels
-        destruct() ins Daten-Nirwana geschickt werden. Stattdessen erwarten
-        sie den Aufruf einer speziellen Lfun im zu zerstoerenden Objekt,
-        welche normalerweise remove() heisst. Damit kann das zu
-        zerstoerende Objekt noch abschliessende Arbeiten im Zusammenhang
-        mit seinem Ableben erledigen, wie z. B. die Anpassung des Gewichtes
-        seiner Umgebung etc. pp.
+        To keep things consistent, most mudlibs frown upon the
+        destruct()ion of other objects, and instead demand call_others
+        to a specific lfun in the object to destruct (traditionally
+        named "remove"). This will then ensure correct update of e.g.
+        weights, volumes etc. Additionally or instead, the master apply
+        prepare_destruct() can be used for this 'cleanup' functionality.
 
-        Der Interpreter zerstoert das Objekt nicht sofort, sondern er
-        markiert es als zerstoert, entfernt es von der Liste, die alle
-        Objekte enthaelt, und fuegt es zu der Liste zu zerstoerenden
-        Objekte hinzu. Die tatsaechliche Zerstoerung geschieht erst dann,
-        wenn keine Referenzen mehr auf das Objekt existieren. Deshalb ist
-        es moeglich, dass ein Objekt noch lange nach seiner Zerstoerung
-        Speicher belegt, obwohl es von ausserhalb nicht mehr gefunden wird.
+        The interpreter does not really destruct the object
+        immediately, but marks it as deleted, removes it from the list
+        of all objects, and puts it onto a list of to-be-destructed
+        objects. The actual freeing occurs only when all references to
+        a destructed object have gone. Thus it is possible, that an
+        object occupies memory long after it has been destructed,
+        although the object is not visible anywhere anymore from
+        outside.
 
-BEISPIELE
+EXAMPLES
         ob->remove();
-        if(ob)        // es existiert noch, vielleicht ist die Lfun
-                      // remove() nicht definiert?
-            destruct(ob);
+        if(ob)        /* still there, probably ob does not provide remove() */
+           destruct(ob);
 
-        Dies ist die Standard-Methode, ein Objekt zu zerstoeren, ihm aber
-        vorher noch die Chance zu geben, es selber zu tun.
+        This is a way of destructing an object but giving it a chance
+        to do it by itself.
 
-GESCHICHTE
-        LDMud 3.2.7: 0 (zerstoerte Objekt) als Argument annehmen.
+HISTORY
+        Changed in 3.2.7 to accept destructed objects as argument, too.
 
-SIEHE AUCH
-        clone_object(E), remove(A)
+SEE ALSO
+        clone_object(E), remove(A), prepare_destruct(M)
diff --git a/doc/efun/driver_info b/doc/efun/driver_info
index f609e63..45e7485 100644
--- a/doc/efun/driver_info
+++ b/doc/efun/driver_info
@@ -376,9 +376,27 @@
         <what> == DI_NUM_REGEX_TABLE_SLOTS:
           Number of slots in the regexp cache table.
 
-        <what> == DI_NUM_LVALUES
+        <what> == DI_NUM_LVALUES:
           Number of lvalues (values referenced by &var).
 
+        <what> == DI_NUM_NAMED_OBJECT_TYPES:
+          Number of named object types.
+
+        <what> == DI_NUM_NAMED_OBJECT_TYPES_TABLE_SLOTS:
+          Number of table entries for named object types.
+
+        <what> == DI_NUM_COROUTINES:
+          Number of coroutines.
+
+        <what> == DI_NUM_LWOBJECTS:
+          Number of lightweight objects.
+
+        <what> == DI_NUM_LPC_PYTHON_REFS:
+          Number of references to Python objects from LPC.
+
+        <what> == DI_NUM_PYTHON_LPC_REFS:
+          Number of references to LPC values from Python.
+
         <what> == DI_SIZE_ACTIONS:
           Total size of allocated actions.
 
@@ -449,6 +467,17 @@
         <what> == DI_SIZE_BUFFER_SWAP:
           The size of the memory buffer for the swap file.
 
+        <what> == DI_SIZE_NAMED_OBJECT_TYPES_TABLE:
+          The size of the table for named object types.
+
+        <what> == DI_SIZE_LWOBJECTS:
+          The size of all lightweight objects (not counting the size
+          of the values of their variables).
+
+        <what> == DI_SIZE_COROUTINES
+          The size of all coroutines (not counting the size of any
+          values held by the coroutines).
+
 
 
         Memory swapper statistics:
@@ -659,7 +688,7 @@
 
 
 
-        Status texts:
+      Status texts:
 
         <what> == DI_STATUS_TEXT_MEMORY:
           A printable string containing information about
@@ -682,6 +711,13 @@
           (if the driver was compiled with them).
 
 
+      Misc Status:
+
+        <what> == DI_NUM_SIMUL_EFUNS_TABLED:
+          The number of known simul_efuns (active or not) in the simul_efun
+          table.
+
+
 HISTORY
         Introduced in LDMud 3.5.0.
 
diff --git a/doc/efun/dump_driver_info b/doc/efun/dump_driver_info
index 111f8ad..fb765ba 100644
--- a/doc/efun/dump_driver_info
+++ b/doc/efun/dump_driver_info
@@ -5,13 +5,13 @@
         int dump_driver_info(int what, string filename)
 
 DESCRIPTION
-        Dumps information specificied by <what> into a file
+        Dumps information specified by <what> into a file
         specified by <filename>. If <filename> is omitted,
         a default file name is used. The function calls
         master->valid_write() to check that it can write
         the files. The file in question is always written anew
 
-        On success the efun returns 1, or 0 if an error occured.
+        On success the efun returns 1, or 0 if an error occurred.
 
         <what> == DDI_OBJECTS:
           Dumps information about all live objects.
@@ -32,7 +32,7 @@
             - the swap status:
                nothing if not swapped,
                'PROG SWAPPED' if only the program is swapped
-               'VAR SWAPPED' if only the variabes are swapped
+               'VAR SWAPPED' if only the variables are swapped
                'SWAPPED' if both program and variables are swapped
             - the time the object was created
 
diff --git a/doc/efun/ed b/doc/efun/ed
index 44c84ff..8a8dc33 100644
--- a/doc/efun/ed
+++ b/doc/efun/ed
@@ -3,17 +3,17 @@
         void ed(string file)
         void ed(string file, string func)
 
-BESCHREIBUNG
-        Der Aufruf von ed() ohne Argumente startet den Editor mit dem Namen
-        der Fehlerdatei, die von master->valid_read(0, geteuid(this_player()),
-        "ed_start", this_player()) bestimmt wird, gewoehnlich etwas wie
-        ~/.err. Wenn dieses File leer ist, wird ed() sofort wieder beendet.
+DESCRIPTION
+        Calling without arguments will start the editor ed with the
+        name of the error file, that was returned by
+        master->valid_read(0, geteuid(this_player()), "ed_start",
+        this_player()), usually something like ~/.err. If that file is
+        empty, ed will immediatly exit again.
+        Calling ed() with argument file will start the editor on the
+        file. If the optional argument func is given, this function
+        will be called after exiting the editor.
 
-        Wird ed() mit einem Argument <file> aufgerufen, wird der Editor fuer
-        dieses File geoeffnet. Wird zusaetzlich das optionale Argument <func>
-        angegeben, wird diese Funktion nach dem Beenden des ed() aufgerufen.
+        The editor ed is almost ed(1) compatible.
 
-        Der LPC-Editor ist fast ed(1)-kompatibel.
-
-SIEHE AUCH
+SEE ALSO
         enable_commands(E), query_editing(E), ed0(LPC)
diff --git a/doc/efun/efun b/doc/efun/efun
index 2e9ae6a..1f94ee4 100644
--- a/doc/efun/efun
+++ b/doc/efun/efun
@@ -1,18 +1,19 @@
 NAME
         efun
 
-BESCHREIBUNG
-        Dieses Directory enthaelt die Beschreibungen fuer die Efuns in
-        LDMud 3.3.
+DESCRIPTION
+        This directory contains descriptions for the efuns of LDMud 3.3.
 
-        Diese Funktionen werden vom Driver zur Verfuegung gestellt und koennen
-        von jedem LPC-Objekt verwendet werden.
+        These are functions that are supplied by the driver and can be
+        called by any LPC object (somewhat similar to system calls in the
+        C library).
 
-        Spezielle Arten dieser Efuns sind:
+        There a few kinds of efuns:
 
-         - 'Optional'
+         - 'optional'
 
-           Es steht dem Mud-Betreiber frei, diese Efuns zu deaktivieren.
+           A mud's maintainer is free to deactivate these efuns when
+           compiling the driver:
 
              break_point()
              db_*()
@@ -36,23 +37,24 @@
              json_serialize()
              json_parse()
 
-         - 'Vorlaeufig'
+         - 'preliminary' or 'experimental'
 
-           Das Verhalten dieser Efuns kann sich in spaeteren Driverversionene
-           aendern.
+           The behaviour of these efuns is not fixed yet, and may change
+           with further releases:
 
              tls_*()
-             xml_*()
+             xml_generate()
+             xml_parse()
 
-         - 'Obsolet' bzw. 'Veraltet'
+         - 'deprecated' or 'obsolete'
+
+           These efuns should no longer be used, they are merely provided
+           for backwards compatibility:
 
              make_shared_string()
              md5()
              sha1()
 
-           Diese Efuns sollten nicht weiter verwendet werden. Sie stehen
-           lediglich aus Kompatibilitaetsgruenden zur Verfuegung, und
-           werden in einer spaeteren Drivervariante entfernt werden.
 
-SIEHE AUCH
+SEE ALSO
         efuns(LPC), applied(A), master(M), lpc(LPC), concepts(C), driver(D)
diff --git a/doc/efun/environment b/doc/efun/environment
index 38ca58e..f4fc6ac 100644
--- a/doc/efun/environment
+++ b/doc/efun/environment
@@ -1,22 +1,21 @@
 SYNOPSIS
-        object environment()
+        object environment(void)
         object environment(object obj)
         object environment(string obj)
 
-BESCHREIBUNG
-        Gibt das umgebende Objekt von <obj> wider. Das Objekt <obj> kann
-        direkt angegeben werden oder ueber seinen Namen als String. Wenn
-        kein Argument angegeben wird, wird die Umgebung des aktuellen
-        Objekts zurueck gegeben.
+DESCRIPTION
+        Returns the surrounding object of obj, which may be given by name.
+        If no argument is given, it returns the surrounding of the current
+        object.
 
-        Zerstoerte Objekte haben kein Environment.
+        Destructed objects do not have an environment.
 
-BEISPIELE
+EXAMPLES
         object room;
         room = environment(this_player());
 
-        Dies liefert den Raum, in dem sich der Spieler im Moment aufhaelt.
+        This will return the current room you are in.
 
-SIEHE AUCH
+SEE ALSO
         first_inventory(E), next_inventory(E), all_inventory(E),
         all_environment(E)
diff --git a/doc/efun/exec b/doc/efun/exec
index 10a320a..7df1df5 100644
--- a/doc/efun/exec
+++ b/doc/efun/exec
@@ -1,40 +1,39 @@
-GESCHUETZT
 SYNOPSIS
         int exec(object new, object old)
 
-BESCHREIBUNG
-        exec() schaltet die Verbindung um vom interaktiven Objekt <old> zum
-        Objekt <old>. Wenn <new> ebenfalls interaktiv ist, wird dessen
-        Verbindung zum Objekt <old> uebertragen, die Verbindungne von <old>
-        und <new> werden also ausgetauscht. Wenn <new> nicht interaktiv ist,
-        ist <old> nach der Ausfuehrung von exec() nicht mehr interaktiv.
+DESCRIPTION
+        exec() switches the connection from the interactive object old
+        to the object new. If the new object is also interactive, it's
+        connection will be transferred to the old object, thus
+        exchaning the two connections between the object. If the new
+        object is not interactive, the old will not be interactive
+        anymore after the exec call succeeded.
 
-        Das Resultat von exec() ist 1 bei Erfolg, 0 sonst.
+        The result is 1 on success, and 0 on failure.
 
-        exec() wird verwendet, um unterschiedliche "user objects" zu laden
-        oder um User mit totem Netz wieder zu verbinden.
+        exec() is used to load different "user objects" or to reconnect
+        link dead users.
 
-        Um Sicherheitsmechanismen zu gewaehrleisten, wird im Masterobjekt
-        valid_exec(<laufendes Programm>, <new>, <old>) aufgerufen. Dieser
-        Aufruf muss etwas von 0 verschiedenes liefern, um den Aufruf von
-        exec() zu erlauben.
+        To provide security mechanisms, the interpreter calls
+        master->valid_exec(current_program, new, old), which must
+        return anything other than 0 to allow this exec() invocation.
 
-        Wenn <old> this_player() war, enthaelt this_player() nach dem Aufruf
-        von exec() <new> und umgekehrt. Gleiches gilt fuer this_interactive().
+        After the exec(), if arg 2 was this_player(), this_player()
+        becomes arg 1, else vice versa. Ditto for this_interactive().
 
-        Vorsicht ist geboten, wenn eine simul-efun() um exec() herum gebaut
-        wird: das <laufende Programm>, das an valid_exec() uebergeben wird,
-        ist das simul-efun Objekt. Um dieses Problem zu umgehen, kann mittels
-        bind_lambda() #'exec an das richtige Objekt gebunden und anschliessend
-        mit funcall() aufgerufen werden.
+        Take care when writing a simul-efun around exec(): the
+        'current_program' passed to the valid_exec() function will be
+        that of the simul-efun object. To get around this, use
+        bind_lambda() to bind #'exec to the real object and funcall()
+        the resulting closure.
 
-BEISPIELE
+EXAMPLES
         ob = clone_object("std/player");
         exec(ob, this_object());
         destruct(this_object());
 
-GESCHICHTE
-        LDMud 3.2.9 fuehrte den Austauschprozess fuer this_interactive() ein.
+HISTORY
+        LDMud 3.2.9 added the switchover of this_interactive().
 
-SIEHE AUCH
+SEE ALSO
         connect(M), disconnect(M), logon(A), interactive(E)
diff --git a/doc/efun/execute_command b/doc/efun/execute_command
index 1ef2343..c0e8a0b 100644
--- a/doc/efun/execute_command
+++ b/doc/efun/execute_command
@@ -1,21 +1,27 @@
-VORLAEUFIG, GESCHUETZT
 SYNOPSIS
         int execute_command(string command, object origin, object player)
 
-BESCHREIBUNG
-        Diese Funktion bietet Low-Level Zugriff auf den Kommandoparser:
-        <command> wird in Verb und Rest aufgespaltet und es werden die
-        entsprechenden add_actions in <origin> aufgerufen. Fuer die
-        Ausfuehrung der Funktion(en) wird this_player() auf <player> gesetzt.
-        execute_command() setzt auch passende Werte fuer query_command()
-        und query_verb(), die dem angegebenen <command> entsprechen.
+DESCRIPTION
+        Low-level access to the command parser: take the <command>, parse it
+        into verb and argument and call the appropriate action added to
+        <origin> (read: <origin> is the object 'issuing' the command).
+        For the execution of the function(s), this_player() is set to
+        player. The function also sets results of query_command() and
+        query_verb() to match the given <command>.
 
-        execute_command() beruecksichtigt weder den H_MODIFY_COMMAND noch den
-        H_NOTIFY_FAIL Hook. Zwar kann notify_fail() verwendet werden, die
-        Verarbeitung muss jedoch durch das aufrufende Objekt erfolgen.
+        The result is non-0 if the command was found and execute, and 0
+        otherwise.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.7.
+        The efun raises a privilege violation ("execute_command",
+        this_object(), origin, command).
 
-SIEHE AUCH
-        hooks(C), command(E), notify_fail(E), command_stack(E)
+        Note that this function does not use the H_MODIFY_COMMAND
+        and H_NOTIFY_FAIL hooks; the notify_fail() efun is can be used,
+        but must be evaluated by the caller.
+
+HISTORY
+        Introduced in LDMud 3.2.7.
+
+SEE ALSO
+        hooks(C), match_command(E), command(E), notify_fail(E),
+        command_stack(E)
diff --git a/doc/efun/exp b/doc/efun/exp
index 584fc0b..112c141 100644
--- a/doc/efun/exp
+++ b/doc/efun/exp
@@ -1,11 +1,11 @@
 SYNOPSIS
-        float exp(int|float zahl)
+        float exp(int|float)
 
-BESCHREIBUNG
-        Die Exponentialfunktion. Liefert e^zahl.
+DESCRIPTION
+        The exponential function.
 
-GESCHICHTE
-        LDMud 3.2.9 erlaubte Ganzzahlen als Argument.
+HISTORY
+        LDMud 3.2.9 added integers as arguments.
 
-SIEHE AUCH
+SEE ALSO
         log(E), pow(E)
diff --git a/doc/efun/expand_define b/doc/efun/expand_define
index 5e2eca0..3313d3b 100644
--- a/doc/efun/expand_define
+++ b/doc/efun/expand_define
@@ -2,23 +2,23 @@
         string expand_define(string name)
         string expand_define(string name, string arg, ...)
 
-BESCHREIBUNG
-        Wandelt das Makro <name> mit den Argumenten <arg> in den
-        vollstaendigen String um. Fuer <arg> wird standardmaessig ein
-        leerer String "" verwendet. Die Funktion liefert das umgewandelte
-        Makro oder 0, wenn kein Makro mit dem Namen <name> existiert.
+DESCRIPTION
+        Expands the macro <name> with the argument(s) <arg>... (default is
+        one empty string "").
+        Result is the expanded macro, or 0 if there is no macro with
+        that name.
 
-        Diese Efun kann nur aufgerufen werden, waehrend das Objekt kompiliert
-        wird, ihre Benutzung ist deshalb auf wenige Funktionen beschraenkt,
-        etwa den H_INCLUDE_DIRS Treiber Hook oder runtime_error() im
-        Masterobjekt.
+        This efun is applicable only while an object is compiled,
+        therefore its usage is restricted to a few functions like the
+        H_INCLUDE_DIRS driver hook, or the masters runtime_error()
+        function.
 
-BEISPIELE
-        Waehrend dem Kompilieren von 'foo.c':
-            expand_define("__FILE__") --> "foo.c"
+EXAMPLES
+        While compiling 'foo.c':
+          expand_define("__FILE__") --> "foo.c"
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.1@93.
+HISTORY
+        Introduced in 3.2.1@93.
 
-SIEHE AUCH
+SEE ALSO
         hooks(C), runtime_error(M)
diff --git a/doc/efun/explode b/doc/efun/explode
index f004d41..fca1aa8 100644
--- a/doc/efun/explode
+++ b/doc/efun/explode
@@ -2,17 +2,15 @@
         string * explode(string str, string del)
         bytes *  explode(bytes str, bytes del)
 
-BESCHREIBUNG
-        Liefert ein Feld (Array) mit Zeichenketten (Strings), indem alle
-        Vorkommen von del (delimiter = Trenner) aus str herausgeschnitten
-        werden und so str in mehrere Zeichenketten zerlegt wird. Falls
-        eine Bytefolge uebergeben wurde, so wird diese in gleicher Weise
-        zerschnitten und zurueckgegeben.
+DESCRIPTION
+        Return an array of strings, created when the string str is split
+        into substrings as divided by del. When given a byte sequence
+        returns an array of byte sequences in a similar fashion.
 
-        implode(explode(str, del), del) == str ist immer wahr.
+        implode(explode(str, del), del) == str is always true.
 
-BEISPIELE
-        Funktion                    Rueckgabewert
+EXAMPLES
+        function                    returns
         -------------------------------------------------------------------
         explode(" ab cd ef ", " ")  ({ "", "ab", "cd", "ef", "" })
         explode("abc", "abc")       ({ "", "" })
@@ -21,14 +19,14 @@
         explode("abc", "xyz")       ({ "abc" })
         explode("abc", "")          ({ "a", "b", "c" })
 
-GESCHICHTE
-        Zeitpunkt der Aenderung unbekannt.
-        explode(" ab cd ef ", " ") lieferte frueher ({ "ab", "cd", "ef" })
-        anstatt ({ "", "ab", "cd", "ef", "" }), d. h., leere Zeichenketten
-        wurden ignoriert. Das neue Verhalten ist schoener, da nun
-        implode(explode(str, del), del) == str immer wahr ist.
-        Seit 3.5.0 liefert explode("","") ({""}) zurueck, sodass garantiert
-        ist, dass ein nicht-leeres Array geliefert wird.
+HISTORY
+        Date of change is unknown.
+        explode(" ab cd ef ", " ") formerly returned ({ "ab", "cd", "ef" })
+        instead of ({ "", "ab", "cd", "ef", "" }), i. e. the empty strings
+        were ignored. The new behaviour is more consistent, because now
+        implode(explode(str, del), del) == str is always true.
+        Since 3.5.0 explode("","") returns ({""}), so it is guaranteed to
+        return a non-empty array.
 
-SIEHE AUCH
+SEE ALSO
         sscanf(E), extract(E), implode(E), regexplode(E)
diff --git a/doc/efun/extern_call b/doc/efun/extern_call
index b20bbf8..a1e4fcf 100644
--- a/doc/efun/extern_call
+++ b/doc/efun/extern_call
@@ -1,15 +1,15 @@
 SYNOPSIS
-        int extern_call()
+        int extern_call();
 
-BESCHREIBUNG
-        Liefert 0, wenn die momentane ausgefuehrte Funktion durch eine lokale
-        Funktion aufgerufen wurde, einen Wert ungleich 0 fuer Aufrufe durch
-        call_other(), den Treiber, Closures etc. Im Moment liefert die
-        Funktion in all diesen Faellen 1 zurueck, in Zukunft koennte
-        allerdings eine Unterscheidung der Aufrufe moeglich werden.
+DESCRIPTION
+        Returns zero, if the function that is currently being executed
+        was called by a local call, non-zero for call_other(), driver
+        applies, closure calls, etc. Currently the only return value
+        for them is 1, but later the various methods may be
+        distinguished by means of the return value.
 
-GESCHICHTE
-        Eingefuehrt in 3.2@263 bzw. 3.2.1@12.
+HISTORY
+        Introduced in 3.2@263 resp. 3.2.1@12
 
-SIEHE AUCH
+SEE ALSO
         call_other(E), previous_object(E)
diff --git a/doc/efun/file_size b/doc/efun/file_size
index 59a1ec3..78673e1 100644
--- a/doc/efun/file_size
+++ b/doc/efun/file_size
@@ -3,15 +3,13 @@
 
         int file_size(string file)
 
-BESCHREIBUNG
-        Liefert die Dateigroesse in Bytes.
+DESCRIPTION
+        Returns the size of the file in bytes.
 
-        Existiert die angegebene Datei nicht oder ist fuer das aufrufende
-        Objekt bzw. den aufrufenden Benutzer nicht lesbar, so wird
-        FSIZE_NOFILE (-1) zurueckgeliefert.
+        Size FSIZE_NOFILE (-1) indicates that the file either does not exist,
+        or that it is not readable for the calling object/user.
+        Size FSIZE_DIR (-2) indicates that it is a directory.
 
-        Verzeichnisse haben die Groesse FSIZE_DIR (-2).
 
-SIEHE AUCH
-        write_file(E), write_bytes(E), read_file(E), read_bytes(E),
-        get_dir(E)
+SEE ALSO
+        write_file(E), write_bytes(E), read_file(E), read_bytes(E), get_dir(E)
diff --git a/doc/efun/filter b/doc/efun/filter
index f75b98d..dca723f 100644
--- a/doc/efun/filter
+++ b/doc/efun/filter
@@ -13,34 +13,36 @@
                                                , mixed extra...)
         mapping filter(mapping arg, closure cl, mixed extra...)
 
-BESCHREIBUNG
-        Ruft fuer jedes Element des Arrays oder Mappings <arg> die Funktion
-        <ob>-><func>() bzw. die Closure <cl> auf und liefert jene Elemente,
-        fuer die die Funktion / Closure TRUE ergeben hat. Die <extra>
-        Argumente werden als zusaetzliche Parameter an die Funktion
-        uebergeben und duerfen keine Referenzen von Array- oder Mapping-
-        Elementen sein (wie &(i[1]) ).
+DESCRIPTION
+        Call the function <ob>-><func>() resp. the closure <cl> for
+        every element of the array, or mapping <arg>, and return a
+        result made from those elements for which the function call
+        returns TRUE.  The <extra> arguments are passed as additional
+        parameters to the function calls and must not be references of
+        array of mapping elements (like &(i[1]) ).
 
-        Wird <ob> nicht angegeben oder ist es weder ein String noch ein
-        Objekt, wird standardmaessig this_object() verwendet.
+        If <ob> is omitted, or neither a string nor an object, it
+        defaults to this_object().
 
-        Ist <arg> ein Array oder struct, wird <fun> mit jedem Element des
-        Arrays/der struct als ersten Parameter aufgerufen, gefolgt von den
-        <extra> Argumenten. Wenn das Resultat der Funktion TRUE ergibt, wird
-        das Element in das Ergebnis der filter() Operation mit einbezogen.
 
-        Wird filter() mit einem Mapping <map> anstelle der Funktion <func>
-        aufgerufen, wird jedes Element im Array <arg>, das ein Key von <map>
-        ist, ins Ergebnis mit einbezogen.
+        If <arg> is an array or struct, the function will be called with
+        each of the array/struct values as first parameter, followed by the
+        <extra> arguments. If the result from the function call is true,
+        the array element in question is included into the efun result.
 
-        Wenn <arg> ein Mapping ist, wird die Funktion <func> mit jedem Key
-        als erstem und (falls vorhanden) den Werten dieses Keys als zweitem
-        Parameter, gefolgt von den <extra> Argumenten, aufgerufen. Wenn die
-        Funktion TRUE ergibt, wird das betreffende Element des Mappings ins
-        Ergebnis aufgenommen.
+        If the efun is used with a mapping <map> instead of a function,
+        every array element which is key in <map> is included into the
+        result.
 
-        Abhaengig von der Groesse des Mappings <arg> erfolgt der Aufruf der
-        Funktion auf drei unterschiedliche Arten:
+
+        If <arg> is a mapping, the function will be called with
+        each of the mapping keys as first, and (if existing) the
+        associated values as second parameter, followed by the <extra>
+        arguments. If the result is true, the mapping element in question
+        is included into the result.
+
+        Depending on the width of the mapping <arg>, the function
+        call takes one of three forms:
 
             widthof(arg) == 0: ob->func(key, 0, extra...)
                          == 1: ob->func(key, arg[key], extra...)
@@ -48,22 +50,25 @@
                                        , ({ arg[key,0] ...arg[key,width-1] })
                                        , extra...)
 
-        Der Vorteil dieser Vorgehensweise ist, dass beide Typen von
-        multidimensionalen Mappings (Mappings mit mehreren Werte pro Key und
-        Mappings aus Arrays) gleich verarbeitet werden koennen.
+        The advantage of this approach is that the two types of
+        multi-dimensional mappings (mappings with multiple values
+        per key, and mappings of arrays) can be treated in the same way.
 
-        Ist <arg> ein String, werden der Filterfunktion die einzelnen Zeichen
-        des Strings uebergeben und nur jene Zeichen im zurueckgegebenen
-        String aufgenommen, fuer die die Filterfunkton != 0 zurueckgibt.
+        If <arg> is a string, the function will be called with each of the
+        characters of the string. If the result is true, the character in
+        question is included into the result.
 
-ANMERKUNGEN
+NOTES
 
-        Fuer Arrays wirkt filter() wie filter_array(), fuer Mappings stellt
-        filter() eine Verallgemeinerung von filter_indices() dar.
+        Historical Note: filter() used with arrays behaves like
+        filter_array(), but used with mappings is a generalisation of
+        filter_indices().
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6. Die Funktion loest filter_array() ab.
+HISTORY
+        Introduced in LDMud 3.2.6, obsoletes filter_array().
+        LDMud 3.3.439 added filtering of strings.
 
-SIEHE AUCH
+SEE ALSO
         filter(E), filter_indices(E), map(E), walk_mapping(E), member(E),
         m_contains(E)
+
diff --git a/doc/efun/filter_indices b/doc/efun/filter_indices
index 504effe..3c5bb50 100644
--- a/doc/efun/filter_indices
+++ b/doc/efun/filter_indices
@@ -1,27 +1,23 @@
-VERALTET
 SYNOPSIS
-        mapping filter_indices(mapping map, string func, string|object ob,
-                                                          mixed extra ... )
-        mapping filter_indices(mapping map, closure cl, mixed extra ... )
+        mapping filter_indices(mapping, string func, string|object ob, ...)
+        mapping filter_indices(mapping, closure cl, ...)
 
-BESCHREIBUNG
-        Die Funktion ob->func() bzw. die Closure cl wird fuer jedes Element
-        von <map> aufgerufen. Das erste Argument von func() ist dabei der Key
-        von <map>, die restlichen Argumente von func() sind die <extra>
-        Argumente. Die Werte von <extra> duerfen keine geschuetzten
-        Referenzen wie &(i[0]) enthalten.
+DESCRIPTION
+        ob->func() is called resp. cl applied to every element in the
+        mapping, with first argument being the key of the
+        element, and then the extra args that were given to
+        filter_indices (these args must not be protected references like
+        &(i[0]). If the function returns true, the element is
+        added to the result mapping. ob can also be an object_name of an
+        object.
 
-        Wenn <func> TRUE liefert, wird das Element in das Resultat
-        uebernommen. Fuer <ob> kann man entweder ein Objekt oder den
-        Objektnamen uebergeben.
+        If <ob> is omitted, or neither a string nor an object, it
+        defaults to this_object().
 
-        Wird <ob> nicht angegeben oder weder ein String noch ein Objekt, so
-        wird standardmaessig this_object() verwendet.
+HISTORY
+        In LDMud 3.2.6 renamed from filter_mapping() and generalised
+        by efun filter().
 
-GESCHICHTE
-        In LDMud 3.2.6 umbenannt aus filter_mapping() und verallgemeinert in
-            der Efun filter().
-
-SIEHE AUCH
+SEE ALSO
         filter(E), map(E), map_indices(E), walk_mapping(E), member(E),
         m_contains(E)
diff --git a/doc/efun/filter_objects b/doc/efun/filter_objects
index e895818..79a82f2 100644
--- a/doc/efun/filter_objects
+++ b/doc/efun/filter_objects
@@ -2,11 +2,12 @@
         <object|lwobject> * filter_objects(<object|lwobject> *arr,
                                            string fun, mixed extra, ...)
 
-BESCHREIBUNG
-        Diese Efun ist aehnlich wie filter(), es wird aber
-        arr[n]->fun(extra,...) aufgerufen. Wenn der Aufruf einen Wert != 0
-        liefert, wird das Objekt arr[n] in das Resultat uebernommen.
-        0-Eintraege in <arr> werden ignoriert.
+DESCRIPTION
+        Similar to filter_array() but calls arr[n]->fun(extra, ...).
+        If the call returns != 0, the object arr[n] ist included in
+        the returned array.
+        0-entries in arr are ignored.
 
-SIEHE AUCH
+SEE ALSO
         filter(E), map(E), map_objects(E)
+
diff --git a/doc/efun/find_call_out b/doc/efun/find_call_out
index 6716a04..a89ee29 100644
--- a/doc/efun/find_call_out
+++ b/doc/efun/find_call_out
@@ -1,28 +1,14 @@
 SYNOPSIS
-        int find_call_out(string fun)
-        int find_call_out(closur cl)
+        int find_call_out(string func)
+        int find_call_out(closure func)
 
-BESCHREIBUNG
-        Findet den ersten call_out() auf die Funktion fun im aktuellen Objekt
-        (bzw. auf die Closure cl) der ausgefuehrt werden soll. Zurueck gegeben
-        wird die verbleibende Zeit bis zum Aufruf. Wenn kein call_out()
-        anhaengig ist, wird -1 zurueck gegeben.
+DESCRIPTION
+        Find the first call-out due to be executed for function <func>
+        in the current object resp. for the closure <func>, and return the
+        time left. If no call-out is found return -1.
 
-FEHLER
-        Die Suche nach call_out()s auf Closures funktioniert nur, wenn der
-        genaue Wert der Closure gesucht wird.
+HISTORY
+        Finding a call_out to a closure was introduced in 3.2.1@45.
 
-        Das funktioniert:
-            closure cl = symbol_function("main", obj);
-            call_out(cl, 2);
-            find_call_out(cl);
-
-        Das funktioniert nicht:
-            call_out(symbol_function("main", obj), 2);
-            find_call_out(symbol_function("main", obj));
-
-GESCHICHTE
-        Die Suche nach call_out()s auf Closures wurde in 3.2.1@45 eingefuehrt.
-
-SIEHE AUCH
+SEE ALSO
         call_out(E), remove_call_out(E), call_out_info(E)
diff --git a/doc/efun/find_input_to b/doc/efun/find_input_to
index e499452..f5f4d89 100644
--- a/doc/efun/find_input_to
+++ b/doc/efun/find_input_to
@@ -4,23 +4,22 @@
         int find_input_to(object player, object|lwobject fun)
         int find_input_to(object player, object|lwobject ob, string fun)
 
-BESCHREIBUNG
-        Findet den zuletzt fuer <player> gestarteten input_to(), abhaengig vom
-        Argument <fun>:
-          - <fun> ist ein String: der Funktionsname des input_to() muss passen
-          - <fun> ist ein Objekt: das Objekt, an welches die Funktion des
-            input_to() gebunden ist, muss passen
-          - <fun> ist eine Closure: die input_to() Closure muss passen
-          - <ob> und <fun> sind angegeben: sowohl Objekt als auch
-            Funktionsname muessen passen.
+DESCRIPTION
+        Find the input_to most recently added to the interactive <player>
+        object matching the <fun> argument:
+         - <fun> is a string: the input_to functionname has to match
+         - <fun> is an object: the object the input_to function is bound to
+                               has to match
+         - <fun> is a closure: the input_to closure has to match.
+         - <ob> and <fun> are given: both the object and the functionname have
+                               to match
 
-        Die Funktion liefert -1, wenn kein input_to() gefunden wurde, sonst
-        die Position im input_to() Stack (wobei 0 den als letztes
-        hinzugefuegten input_to() bezeichnet).
+        Return -1 if not found, or the position in the input_to stack (0
+        being _least_ recently added input_to).
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
+HISTORY
+        Introduced in LDMud 3.2.9.
 
-SIEHE AUCH
+SEE ALSO
         input_to(E), input_to_info(E), remove_input_to(E),
         query_input_pending(E)
diff --git a/doc/efun/find_object b/doc/efun/find_object
index 58e611a..3b6e708 100644
--- a/doc/efun/find_object
+++ b/doc/efun/find_object
@@ -1,23 +1,23 @@
 SYNOPSIS
         object find_object(string str)
 
-BESCHREIBUNG
-        Liefert das Objekt mit dem Namen <str>. Wenn das Objekt nicht
-        geladen ist, wird es nicht gefunden.
+DESCRIPTION
+        Find an object with the object_name str. If the object isn't loaded,
+        it will not be found.
 
-BEISPIELE
+EXAMPLES
         object obj;
         obj = find_object("std/thing");
         obj = find_object("std/thing.c");
         obj = find_object("/std/thing");
         obj = find_object("/std/thing.c");
 
-        Alle vier Zeilen sind gleichwertig.
+        All four statements are equal.
 
         obj = find_object("/std/thing#42");
 
-        Liefert den Clone, dessen object_name "std/thing#42" ist, wenn er
-        existiert.
+        returns the clone whose object_name is "std/thing#42", if
+        it exists.
 
-SIEHE AUCH
+SEE ALSO
         object_name(E), to_object(E)
diff --git a/doc/efun/first_inventory b/doc/efun/first_inventory
index d571d8c..612b3c8 100644
--- a/doc/efun/first_inventory
+++ b/doc/efun/first_inventory
@@ -3,45 +3,42 @@
         object first_inventory(string ob)
         object first_inventory(object ob)
 
-BESCHREIBUNG
-        Liefert das erste Objekt im Inventory von <obj>, wobei <obj> entweder
-        ein Objekt oder der Name eines Objekts ist. Wenn <obj> nicht angegeben
-        wird, wird standardmaessig this_object() verwendet.
+DESCRIPTION
+        Get the first object in the inventory of ob, where ob is
+        either an object or the file name of an object. If ob is not
+        given, the current object is assumed.
 
-BEISPIELE
-        Diese Efun verwendet man am haeufigsten im folgenden Kontext:
+EXAMPLES
+        This efun is mostly used in the following context:
 
-            for(obj=first_inventory(container);obj;obj=next_inventory(obj))
-            {
-                <irgendwelcher Code>
-            }
+        for(ob=first_inventory(container);ob;ob=next_inventory(ob)) {
+           <some actions>
+        }
 
-        Wer solche Aufrufe haeufig verwendet, findet es moeglicherweise
-        sinnvoll, ein Praeprozessor-Makro zu verwenden:
+        If you use such calls frequently then it would be very useful
+        to use a preprocessor macro:
 
-            #define FORALL(x, y) for(x=first_inventory(y);x;
-                x=next_inventory(x))
+        #define FORALL(x, y) for(x=first_inventory(y);x;x=next_inventory(x))
 
-        Damit vereinfacht sich das obige Beispiel zu:
+        So the above example could be written like this:
 
-            FORALL(obj, container)
-            {
-                <irgendwelcher Code>
-            }
+        FORALL(ob, container) {
+           <some actions>
+        }
 
-        ACHTUNG: Wenn das Objekt <obj> innerhalb von <irgendwelcher Code>
-        bewegt wird, liefert next_inventory() ein Objekt aus dem neuen
-        Inventory von <obj>. Auch sollte next_inventory() nicht fuer
-        zerstoerte Objekte <obj> aufgerufen werden. Fuer den Fall, dass
-        <obj> bewegt und/oder zerstoert wird, ist folgende Loesung
-        vorzuziehen:
+        Warning: If the object ob is moved inside <some actions>, then
+        next_inventory() will return an object from the new inventory
+        of ob. You also shouldn't call next_inventory() on destructed
+        objects. So in case of move and/or destruction the following
+        is a better solution:
 
-            for(obj=first_inventory(container);obj;)
-            {
-                next=next_inventory(obj);
-                <irgendwelcher Code mit Moves oder Removes>
-                obj=next;
-            }
+        for(ob=first_inventory(container);ob;) {
+           next=next_inventory(ob);
+           <some actions and moves and/or removes>
+           ob=next;
+        }
 
-SIEHE AUCH
-        next_inventory(E), all_inventory(E), environment(E), deep_inventory(E)
+
+SEE ALSO
+        next_inventory(E), all_inventory(E), environment(E),
+        deep_inventory(E)
diff --git a/doc/efun/floatp b/doc/efun/floatp
index 43fe9ba..2bcd396 100644
--- a/doc/efun/floatp
+++ b/doc/efun/floatp
@@ -1,10 +1,10 @@
 SYNOPSIS
-        int floatp(mixed arg)
+        int floatp(mixed)
 
-BESCHREIBUNG
-        Liefert 1, wenn das Argument eine Fliesskommazahl (float) ist,
-        ansonsten 0.
+DESCRIPTION
+        Returns 1 if the arg is a floating point number, 0 else.
 
-SIEHE AUCH
-        intp(E), mappingp(E), stringp(E), bytesp(E), closurep(E),
-        objectp(E), referencep(E), pointerp(E), symbolp(E), clonep(E)
+SEE ALSO
+        bytesp(E), clonep(E), closurep(E), coroutinep(E), intp(E),
+        lpctypep(E), lwobjectp(E), mappingp(E), objectp(E), pointerp(E),
+        referencep(E), stringp(E), structp(E), symbolp(E)
diff --git a/doc/efun/floor b/doc/efun/floor
index 9599a16..375f81c 100644
--- a/doc/efun/floor
+++ b/doc/efun/floor
@@ -1,19 +1,19 @@
 SYNOPSIS
         float floor(float arg)
 
-BESCHREIBUNG
-        Rundet das Argument <arg> ab auf die naechste ganze Zahl und gibt
-        diesen Wert zurueck. Wenn <arg> ein Integer ist, wird das Resultat
-        trotzdem als Float zurueckgegeben.
+DESCRIPTION
+        Round the <arg>ument downwards the nearest whole number, returning
+        that value. If the <arg>ument value is an integer, the result will
+        be that value, converted to float.
 
-BEISPIELE
-        floor(4.5)  --> liefert 4.0
-        floor(-4.5) --> liefert -5.0
-        floor(5)    --> liefert 5.0
+EXAMPLES
+        floor(4.5)  - returns  4.0
+        floor(-4.5) - returns -5.0
+        floor(5)    - returns  5.0
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.7.
-        LDMud 3.2.9 erlaubt auch Integer als Argumente.
+HISTORY
+        Introduced in LDMud 3.2.7.
+        LDMud 3.2.9 added integers as argument values.
 
-SIEHE AUCH
+SEE ALSO
         abs(E), ceil(E)
diff --git a/doc/efun/funcall b/doc/efun/funcall
index e507ad6..25900ab 100644
--- a/doc/efun/funcall
+++ b/doc/efun/funcall
@@ -1,15 +1,37 @@
 SYNOPSIS
-        mixed funcall(closure cl, mixed arg, ...)
+        mixed funcall(closure cl, mixed arg ...)
 
-BESCHREIBUNG
-        Wertet die Closure <cl> aus. Die Argumente <args> werden als Argumente
-        an die Closure uebergeben. Wenn <cl> keine Closure ist, wird <cl>
-        zurueck gegeben.
+DESCRIPTION
+        Evaluates the closure. The extra args will be passed as args
+        to the closure. If cl is not a closure, it will simply be
+        returned.
 
-GESCHICHTE
-        Eingefuehrt in 3.2@70.
-        Das Zurueckgeben von <cl>, wenn es sich nicht um eine Closure handelt,
-            auch wenn Argumente angegeben wurden, wurde in 3.2.1 eingefuehrt.
+EXAMPLES
+        mixed eval(object ob, string func, mixed *args)
+        {
+            return funcall(#'call_other, ob, func, args);
+        }
 
-SIEHE AUCH
+        This will result in calling
+
+          ob->func(args).
+
+        In combination with the '...' operator, the functionality
+        of apply() can be implemented:
+
+        mixed eval(object ob, string func, mixed *args)
+        {
+            return funcall(#'call_other, ob, func, args...);
+        }
+
+        will result in calling
+
+          ob->func(args[0],args[1],...,args[sizeof(args)-1]).
+
+HISTORY
+        Introduced in 3.2@70.
+        Returning a non-closure as it is even when args are given was
+        introduced with 3.2.1.
+
+SEE ALSO
         apply(E), quote(E)
diff --git a/doc/efun/function_exists b/doc/efun/function_exists
index 2c7f03a..516d69b 100644
--- a/doc/efun/function_exists
+++ b/doc/efun/function_exists
@@ -6,55 +6,54 @@
         mixed function_exists(string str, object|lwobject ob)
         mixed function_exists(string str, object|lwobject ob, int flags)
 
-BESCHREIBUNG
-        Sucht eine Funktion <str> im aktuellen Objekt bzw. im Objekt <ob>. Je
-        nach den angegeben <flags> werden folgende Informationen angezeigt:
+DESCRIPTION
+        Look up a function <str> in the current object, respectively
+        in the object <ob>. Depending on the value of <flags>, one
+        of the following informations is returned:
 
-        FEXISTS_PROGNAME (0, default):
-        Liefert den Namen des Programms, in dem die Funktion definiert ist.
-        Das kann entweder der Objektname object_name(ob) sein, oder der
-        Name eines geerbten Programms. Wenn der Driver nicht im Compat-Modus
-        laeuft, beginnt der Name immer mit einem '/'.
+        <flags> == FEXISTS_PROGNAME (0, default):
+          Return the name of the program the function is defined in.
+          This can be either object_name(ob), or the name of an inherited
+          program. If !compat mode, the returned name always begins
+          with a '/'.
 
-        FEXISTS_FILENAME (1):
-        Liefert den Namen der Datei, in der die Funktion definiert ist. Das
-        kann auch ein Inlcude-File sein. Wenn der Driver nicht im Compat-
-        Modus laeuft, beginnt der Name mit einem '/'.
+        <flags> == FEXISTS_FILENAME (1):
+          Return the name of the file the function is defined in (this
+          may be an include file). If !compat mode, the returned name
+          always begins with a '/'.
 
-        FEXISTS_LINENO (2):
-        Liefert die Zeilennummer im Quellcode, in der die Funktion definiert
-        wird.
+        <flags> == FEXISTS_LINENO (2):
+          Return the line number within the source file.
 
-        FEXISTS_ALL (3):
-          Liefert ein Array mit der gesamten Information der anderen Flags,
-          sowie zusaetzlichen Informationen ueber die Funktion:
+        <flags> == FEXISTS_ALL (3):
+          Return an array with all the above information, plus information
+          about the function type/flags/number of arguments.
           
-            string [FEXISTS_PROGNAME]: der Programmname
-            string [FEXISTS_FILENAME]: der Dateiname
-            int    [FEXISTS_LINENO]:   die Zeilennummer
-            int    [FEXISTS_NUMARG]:   die Anzahl der Funktionsargumente
-            int    [FEXISTS_TYPE]:     der Ergebnistyp der Funktion
-            int    [FEXISTS_FLAGS]:    die Funktionsflags
+          The returned array contains this information:
+            string [FEXISTS_PROGNAME]: the program name
+            string [FEXISTS_FILENAME]: the filename
+            int    [FEXISTS_LINENO]:   the linenumber
+            int    [FEXISTS_NUMARG]:   the number of arguments to the function
+            int    [FEXISTS_TYPE]:     the return type of the function
+            int    [FEXISTS_FLAGS]:    the function flags
 
-        <flags> kann mit einem binaren Oder mit NAME_HIDDEN ergaenzt
-        werden, um Informationen ueber als static und protected deklarierte
-        Funktionen in anderen Objekten zu erhalten. Es ist nicht moeglich,
-        Informationen ueber als private deklarierte Funktionen zu erhalten.
+        The <flags> value can be or-ed to NAME_HIDDEN to return
+        information about static and protected functions in other objects.
+        It is not possible to return information about private functions.
 
-        Wenn die gesuchte Funktion nicht gefunden werden kann (weil sie
-        nicht existiert oder fuer den Aufrufer nicht sichtbar ist), dann
-        wird als Rueckgabewert 0 geliefert.
+        If the function cannot be found (because it doesn't exist or
+        it is not visible to the caller), the result is 0.
 
 
-BEISPIELE
-        function_exists("create");
+EXAMPLES
+        function_exists("create")
         function_exists("create", that_object, NAME_HIDDEN|FEXISTS_ALL);
 
-GESCHICHTE
-        LDMud 3.2.10 erweiterte die Menge der zurueck gelieferten Werte und
-            fuehrte das <flags> Argument ein.
-        LDMud 3.2.12/3.3.713 fuegte die zusaetzliche Funktionsinformation zum
-            FEXISTS_ALL Ergebnis hinzu.
+HISTORY
+        LDMud 3.2.10 broadened the range of returned values and introduced
+          the <flags> argument.
+        LDMud 3.2.12/3.3.713 added the function type/flags/number of arguments
+          to the result of FEXISTS_ALL.
 
-SIEHE AUCH
+SEE ALSO
         call_other(E), call_resolved(E), functionlist(E), variable_exists(E)
diff --git a/doc/efun/functionlist b/doc/efun/functionlist
index 2845648..7ac8e34 100644
--- a/doc/efun/functionlist
+++ b/doc/efun/functionlist
@@ -1,56 +1,55 @@
-GESCHUETZT
 SYNOPSIS
         #include <functionlist.h>
         #include <lpctypes.h>
 
         mixed * functionlist(object|lwobject|string ob, int flags)
 
-BESCHREIBUNG
-        Liefert ein Array mit Informationen zu den Lfuns von <ob>. Fuer jede
-        Funktion werden 1 bis 4 Werte (abhaengig von <flags>) in das Ergebnis
-        eingetragen, und zwar in folgender Reihenfolge:
-          - der Name der Funktion
-          - die Flags der Funktion (vergleiche weiter unten)
-          - den Rueckgabetyp (aufgelistet in <lpctypes.h>)
-          - die Anzahl Argumente, die die Funktion akzeptiert.
+DESCRIPTION
+        Returns an array with information about <ob>s lfunctions. For every
+        function, 1 to 4 values (depending on <flags>) are stored in
+        the result array conveying in this order:
+          - the name of the function
+          - the function flags (see below)
+          - the return type (listed in <lpctypes.h>)
+          - the number of accepted argumens
 
-        <ob> kann als normales oder leichtgewichtiges Objekt oder als
-        Objektname uebergeben werden. Im zweiten Fall versucht die Efun
-        nicht, das Objekt vorher zu laden.
+        <ob> may be given as regular or lightweight object or as a filename.
+        In the latter case, the efun does not try to load the object before
+        proceeding.
 
-        <flags> bestimmt sowohl, welche Informationen im Ergebnis gesammelt
-        werden, als auch, fuer welche Funktionen die Pruefung durchgefuehrt
-        wird. Der Wert von <flags> wird durch binaere Veroderung folgender
-        Konstanten aus <functionlist.h> festgelegt:
+        <flags> determines both which information is returned for every
+        function, and which functions should be considered at all.
+        Its value is created by bin-or'ing together following flags from
+        <functionlist.h>:
 
-        Festlegen der gesammelten Information:
-            RETURN_FUNCTION_NAME        liefert den Funktionsnamen
-            RETURN_FUNCTION_FLAGS       liefert die Flags der Funktion
-            RETURN_FUNCTION_TYPE        liefert den Rueckgabetyp der Funktion
-            RETURN_FUNCTION_NUMARG      liefert die Anzahl moeglicher
-                                        Argumente.
+          Control of returned information:
+            RETURN_FUNCTION_NAME    include the function name
+            RETURN_FUNCTION_FLAGS   include the function flags
+            RETURN_FUNCTION_TYPE    include the return type as an integer
+            RETURN_FUNCTION_LPCTYPE include the return type as lpctype value
+            RETURN_FUNCTION_NUMARG  include the number of arguments.
 
-            RETURN_FUNCTION_ARGTYPE     ist definiert, aber nicht
-                                        implementiert.
+            The name RETURN_FUNCTION_ARGTYPE is defined but not implemented.
 
-        Festlegen der geprueften Funktionen:
-            NAME_INHERITED      geerbte Funktionen nicht beachten
-            TYPE_MOD_STATIC     static deklarierte Funktion nicht beachten
-            TYPE_MOD_PRIVATE    private deklarierte Funktionen nicht beachten
-            TYPE_MOD_PROTECTED  protected deklarierte Funktionen nicht
-                                beachten
-            NAME_HIDDEN         nur beachten, wenn sichtbar durch Vererbung
+          Control of listed functions:
+            NAME_INHERITED      don't list if defined by inheritance
+            TYPE_MOD_STATIC     don't list if static function
+            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
 
-        <flags> besteht aus der binaeren Veroderung der oben genannten Flags,
-        zusammen mit den folgenden:
-            TYPE_MOD_VARARGS    die Funktion ist varargs deklariert
-            NAME_UNDEFINED      die Funktion ist noch nicht definiert, aber
-                                referenziert
-            NAME_CROSS_DEFINED  die Funktion ist definiert, um in einem
-                                anderen Programm verwendet zu werden
-            TYPE_MOD_NOMASK     die Funktion ist nomask deklariert
-            TYPE_MOD_PUBLIC     die Funktion ist public deklariert
+        The 'flags' information consists of the bin-or of the list control
+        flags given above, plus the following:
 
-SIEHE AUCH
+            TYPE_MOD_VARARGS    function takes varargs
+            NAME_UNDEFINED      function not defined yet, but referenced.
+            NAME_CROSS_DEFINED  function is defined to be in a different program
+            TYPE_MOD_NO_MASK    function is nomask
+            TYPE_MOD_PUBLIC     function is public
+
+HISTORY
+        LDMud 3.6.7 introduced RETURN_FUNCTION_LPCTYPE.
+
+SEE ALSO
         inherit_list(E), function_exists(E), variable_list(E),
         call_resolved(E)
diff --git a/doc/efun/garbage_collection b/doc/efun/garbage_collection
index 86a87c4..4caa2df 100644
--- a/doc/efun/garbage_collection
+++ b/doc/efun/garbage_collection
@@ -1,29 +1,55 @@
-GESCHUETZT
 SYNOPSIS
         void garbage_collection()
         void garbage_collection(string filename)
+        void garbage_collection(string filename, int flag)
 
-BESCHREIBUNG
-        Befiehlt dem Treiber, nach Ende der aktuellen Ausfuehrung eine
-        Garbage Collection zu beginnen. Je nachdem, welcher Memory Allocator
-        verwendet wird, ist die Garbage Collection mehr oder weniger
-        gruendlich.
+DESCRIPTION
+        Tell the parser to initiate a garbage collection after the
+        current execution ended. Depending on the type of memory
+        allocator used, this GC is more less thorough.
 
-        Wird der smalloc Memory Allocator verwendet, erzeugt GC einen Output
-        in einem Logfile. Der Standardname fuer das Logfile wird beim
-        Programmstart festgelegt, kann aber zur Laufzeit veraendert werden,
-        wenn das Argument <filename> angegeben ist. Der Log-Output wird in
-        diesem Fall an das bezeichnete Logfile angefuegt.
+        If the 'smalloc' memory allocator is used, the GC produces
+        output to a log file. The default name of the log file is
+        specified at program start, but can be modified at runtime:
 
-        Fuer andere Memory Allocators erzeugt garbage_collection() keinen
-        Output. Ein allfaelliges Argument <filename> wird ignoriert.
+            With the <filename> argument a log file for the GC output
+            different from the default log file can be specified.
 
-        Diese efun verursacht den Aufruf von privilege_violation().
+            If <flag> is not given or 0, the output from the next
+            and only the next GC will go into the log file. If the file
+            already exists, the new output will be appended.
 
-GESCHICHTE
-        LDMud 3.2.9 fuehrte das Argument <filename> ein.
-        LDMud 3.3.209 fuehrte das Argument <flag> ein.
-        LDMud 3.5.0 machte die efun privilegiert.
+            If <flag> is 1, the <filename> will be used as the new
+            default log file for all following GCs. If the file already
+            exists, it will be overwritten from the start.
 
-SIEHE AUCH
+        If a different memory allocator is used, the GC does not produce
+        output and the <filename> and <flag> arguments are ignored.
+
+        Calling this efun causes a privilege_violation.
+
+EXAMPLES
+        garbage_collection()
+         [ GC occurs -> logs into default file ]
+
+        garbage_collection("/GCLOG")
+         [ GC occurs -> logs into "/GCLOG" ]
+
+        garbage_collection("/GCLOG", 1)
+         [ GC occurs -> logs into "/GCLOG", sets default log to "/GCLOG" ]
+
+        garbage_collection("/GCLOG")
+        garbage_collection("/GCLOG2")
+         [ GC occurs -> logs into "/GCLOG" ]
+
+        garbage_collection("/GCLOG", 1)
+        garbage_collection("/GCLOG2")
+         [ GC occurs -> logs into "/GCLOG2", sets default log to "/GCLOG" ]
+
+HISTORY
+        LDMud 3.2.9 added the <filename> argument.
+        LDMud 3.3.209 added the <flag> argument.
+        LDMUd 3.5.0 made the efun privileged.
+
+SEE ALSO
         rusage(E), valid_write(M), privilege_violation(M)
diff --git a/doc/efun/get_dir b/doc/efun/get_dir
index d0bdf5a..d298e3e 100644
--- a/doc/efun/get_dir
+++ b/doc/efun/get_dir
@@ -4,124 +4,114 @@
         mixed * get_dir(string str)
         mixed * get_dir(string str, int mask)
 
-BESCHREIBUNG
-        Benoetigt einen Pfad als erstes Argument und liefert ein Feld
-        (Array) mit Dateinamen bzw. Eigenschaften der gefundenen Dateien im
-        angegebenen Verzeichnis.
+DESCRIPTION
+        This function takes a path as argument and returns an array of file
+        names and attributes in that directory.
 
-        Liefert 0 zurueck, wenn es das Verzeichnis, in dem gesucht werden
-        soll, nicht gibt.
+        Returns 0 if the directory to search in does not exist.
 
-        Der Dateinamen-Teil des Pfades darf "*" und "?" als Platzhalter
-        enthalten: jeder "*" steht fuer eine beliebige Anzahl Zeichen (oder
-        sich selber), "?" fuer ein beliebiges Zeichen. Entsprechend liefert
-        get_dir("/pfad/*") ein alphabetisch sortiertes Feld aller Dateien
-        im Verzeichnis "/pfad" oder ({ "/pfad/*" }), wenn es diese Datei
-        geben sollte.
+        The filename part of the path may contain '*' or '?' as wildcards:
+        every '*' matches an arbitrary amount of characters (or just itself),
+        a '?' matches any character. Thus get_dir("/path/*") would return an
+        alphabetically sorted array of all files in directory "/path", or
+        just ({ "/path/*" }) if this file happens to exist.
 
-        Gibt man den Pfad eines Verzeichnisses mit abschliessendem "/" oder
-        "/." an (z. B. get_dir("/pfad/.")), so erhaelt man den Inhalt des
-        Verzeichnisses. Um Informationen ueber das Verzeichnis selber zu
-        erhalten, muss man den Pfad des Verzeichnisses angeben.
+        To query the content of a directory, use the directory name with a
+        trailing '/' or '/.', for example get_dir("/path/."). Use the
+        directory name as it is to get information about the directory itself.
 
-        Das optionale zweite Argument ist eine Bitmaske, mit der man
-        angeben kann, welche Informationen man ueber die angegebenen
-        Dateien erhalten moechte.
+        The optional second argument mask can be used to get
+        information about the specified files.
 
-        GETDIR_EMPTY    (0x00)  get_dir() liefert ein leeres Feld (nicht
-                                wirklich sinnvoll)
-        GETDIR_NAMES    (0x01)  liefert die alphabetisch sortierten
-                                Dateinamen.
-        GETDIR_SIZES    (0x02)  liefert die unsortierten Dateigroessen
-                                (file_size()), Verzeichnisse haben die
-                                Dateigroesse FSIZE_DIR (-2).
-        GETDIR_DATES    (0x04)  liefert die unsortierten Zeiten der jeweils
-                                letzten Aenderung in Sekunden seit dem
-                                01.01.1970.
-        GETDIR_ACCESS   (0x40)  liefert die unsortierten Zeiten des jeweils
-                                letzten Zugriffes in Sekunden seit dem
-                                01.01.1970.
-        GETDIR_MODES    (0x80)  liefert die Filemode-Maske
+        GETDIR_EMPTY    (0x00)  get_dir returns an empty array (not very
+                                useful).
+        GETDIR_NAMES    (0x01)  put the alphabetically sorted file names into
+                                the returned array.
+        GETDIR_SIZES    (0x02)  put the file sizes unsorted into the returned
+                                array. directories have size FSIZE_DIR (-2).
+        GETDIR_DATES    (0x04)  put the file modification dates (in seconds
+                                since 01/01/1970) unsorted into the
+                                returned array.
+        GETDIR_ACCESS   (0x40)  put the file access dates unsorted into
+                                the returned array.
+        GETDIR_MODES    (0x80)  put the unix file modes unsorted into
+                                the returned array.
 
-        GETDIR_ALL      (0xDF)  Liefert all Werte zurueck.
+        GETDIR_ALL      (0xDF)  Return all.
 
-        GETDIR_PATH     (0x10)  Dateinamen werden als volle Pfade geliefert.
-                                (ein ev. fehlendes GETDIR_NAMES wird als
-                                vorhanden angenommen).
-        GETDIR_UNSORTED (0x20)  Das Ergebnis wird nicht sortiert.
+        GETDIR_PATH     (0x10)  if this mask bit is set, the filenames with
+                                the full path will be returned
+                                (GETDIR_NAMES is implied).
+        GETDIR_UNSORTED (0x20)  if this mask bit is set, the result of will
+                                _not_ be sorted.
 
-        Wichtig: Man muss GETDIR_NAMES|GETDIR_UNSORTED verwenden, wenn man
-        die Eintraege in der selben Reihenfolge wie bei GETDIR_SIZES und
-        GETDIR_DATES haben moechte.
+        Note: You should use GETDIR_NAMES|GETDIR_UNSORTED to get the entries
+        in the same order as with GETDIR_SIZES and GETDIR_DATES.
 
-        Die Eintraege in der Bitmaske koennen miteinander kombiniert
-        werden.
+        The values of mask can be added together.
 
-ANMERKUNGEN
-        Der als Argument angegebene Pfad wird vor Benutzung von valid_read()
-        im Master der Mudlib verarbeitet. Hierbei kann die Mudlib eine
-        Normalisierung vornehmen (z.B. fuehrende und endstaendige "/"
-        entfernen). Dann fuehrt dann u.U. zu erwarteten Resultaten (z.B. dass
-        get_dir("/dir/", ...) nicht den Inhalt von /dir/ zurueckgibt).
-        Compat mode: GETDIR_PATH liefert die Pfade ohne fuehrenden /.
+NOTES
+        The path argument to this efun is processed by valid_read() in the
+        mudlib master before being used. The mudlib may normalize this path
+        (e.g. strip leading or trailing "/") and this may lead to expected
+        results (e.g. get_dir("/dir/", ...) not returning the contents
+        of /dir/).
+        COMPAT mode: GETDIR_PATH will return the paths without leading /.
 
-BEISPIELE
-        Funktion                         Rueckgabewert
+EXAMPLES
+        function                         returns
         -------------------------------------------------------------------
-        get_dir("/obj/.")                Alle Dateien, die im Verzeichnis
-                                         /obj enthalten sind.
-        get_dir("/obj/")                 Wie get_dir("/obj/").
+        get_dir("/obj/.")                all files contained in directory /obj.
+        get_dir("/obj/")                 the same as get_dir("/obj/")
 
-        get_dir("/obj/schwert.c")        ({ "schwert.c" }), sofern
-                                         /obj/schwert.c existiert (als
-                                         Datei oder Verzeichnis), ansonsten
-                                         ({}), sofern /obj ein Verzeichnis
-                                         ist, ansonsten 0.
+        get_dir("/obj/sword.c")          ({ "sword.c" }) if /obj/sword.c
+                                         exists (it may be a file or a
+                                         directory), otherwise ({ }) if
+                                         /obj is a directory,
+                                         otherwise 0.
 
-        get_dir("/obj/*")                ({ "*" }), sofern * existiert.
-                                         Ansonsten und normalerweise ein
-                                         alphabetisch sortiertes Feld mit
-                                         den Namen aller Dateien und
-                                         Verzeichnisse in /obj, sofern /obj
-                                         ein Verzeichnis ist, ansonsten 0.
+        get_dir("/obj/*")                ({ "*" }) if * exists.
+                                         otherwise and normally an
+                                         alphabetically sorted array with all
+                                         names of files and directories in
+                                         /obj if /obj is a directory,
+                                         otherwise 0.
 
-        get_dir("/obj/schwert.c", GETDIR_SIZES)
-                                         ({ <Groesse von /obj/schwert.c> }),
-                                         sofern /obj/schwert.c existiert.
-        get_dir("/obj/.", GETDIR_NAMES)  Wie get_dir("/obj/.").
-        get_dir("/obj/.", GETDIR_SIZES)  Ein unsortiertes Feld mit den
-                                         Groessen der Dateien in /obj.
-        get_dir("/obj/.", GETDIR_NAMES|GETDIR_SIZES|GETDIR_DATES)
-            oder kuerzer
-        get_dir("/obj/.", GETDIR_ALL)    Ein eindimensionales und nach
-                                         Namen sortiertes Feld, das fuer
-                                         jede Datei in /obj den Namen, die
-                                         Groesse und den Zeitpunkt der
-                                         letzten Aenderung enthaelt, z.B.
+        get_dir("/obj/sword.c", GETDIR_SIZES)  ({ <size of /obj/sword.c> })
+                                         if that file exists.
+        get_dir("/obj/.", GETDIR_NAMES)  the same as get_dir("/obj/.").
+        get_dir("/obj/.", GETDIR_SIZES)  an array with the sizes of the files
+                                         in /obj, not sorted by names.
+        get_dir("/obj/.", GETDIR_NAMES|GETDIR_SIZES|GETDIR_DATES) or shorter
+        get_dir("/obj/.", GETDIR_ALL)    an one-dimensional array that
+                                         contains for each file in /obj its
+                                         name, its size and its modification
+                                         date, sorted by names, for example
                                            ({
-                                              "axt.c"    ,  927, 994539583,
-                                              "schwert.c", 1283, 998153903,
+                                              "axe.c"  ,  927, 994539583,
+                                              "sword.c", 1283, 998153903,
                                            }).
 
-        get_dir("/obj/schwert.c", GETDIR_NAMES|GETDIR_PATH)
-                                         ({ "/obj/sword.c" }), sofern
-                                         vorhanden.
-        get_dir("/obj/schwert.c", GETDIR_PATH)  Kurzform dafuer.
+        get_dir("/obj/sword.c", GETDIR_NAMES|GETDIR_PATH)
+                                         ({ "/obj/sword.c" }) if applicable.
+        get_dir("/obj/sword.c", GETDIR_PATH)  Short form of the same query.
+
 
         transpose_array(({ get_dir(str, GETDIR_NAMES|GETDIR_UNSORTED)
                          , get_dir(str, GETDIR_SIZES)
                          , get_dir(str, GETDIR_DATES) }));
-        Liefert ein unsortiertes Feld mit Feldern, von denen ein jedes
-        Name, Groesse und Zeit einer Datei enthaelt, z. B.
+        This returns an array of arrays, with filename, size and
+        filetime as elements, not sorted by names, for example
           ({
-             ({ "schwert.c", 1283, 998153903 }),
-             ({ "axt.c"    ,  927, 994539583 }),
+             ({ "sword.c", 1283, 998153903 }),
+             ({ "axe.c"  ,  927, 994539583 }),
           }).
 
-GESCHICHTE
-        LDMud 3.2.9: GETDIR_PATH eingefuehrt.
-        LDMud 3.2.11: GETDIR_ACCESS und GETDIR_MODES eingefuehrt.
 
-SIEHE AUCH
+HISTORY
+        LDMud 3.2.9 added GETDIR_PATH.
+        LDMud 3.2.11/3.3.648 added GETDIR_ACCESS and GETDIR_MODES.
+
+SEE ALSO
         mkdir(E), rmdir(E), file_size(E), write_file(E), write_bytes(E),
         read_file(E), read_bytes(E)
diff --git a/doc/efun/get_error_file b/doc/efun/get_error_file
index d97a1a5..d01a69d 100644
--- a/doc/efun/get_error_file
+++ b/doc/efun/get_error_file
@@ -1,21 +1,21 @@
 SYNOPSIS
         mixed * get_error_file(string name, int set_forget_flag)
 
-BESCHREIBUNG
-        Liefert Informationen ueber den letzten Fehler, der fuer <name>
-        aufgetreten ist, wobei <name> ein gueltiger Eintrag in der Wizlist
-        sein muss.
+DESCRIPTION
+        Return information about the last error which occurred for
+        <name> (where <name> is a valid name from the wiz list).
 
-        Das Resultat ist ein Array aus vier Elementen: der Dateiname des
-        Programms, in dem der Fehler aufgetreten ist, die Zeilennummer in der
-        Datei, die Fehlermeldung (Laufzeitfehler beginnen gewoehnlich mit
-        einem *) und ein numerisches Flag (das 'forget flag'), wenn der
-        Fehler bereits angeschaut wurde.
+        Result is an array of four elements: the filename of the
+        program where the error occurred, the linenumber in the
+        program, the error message (runtime error messages usually
+        start with a '*'), and a numerical flag (the 'forget flag') if
+        the error information has been queried already.
 
-        Wenn es keinen Fehler fuer <name> gibt, wird 0 zurueckgegeben.
+        If there is no error stored for the given <name>, 0 is
+        returned.
 
-        Wenn <set_forget_flag> ungleich 0 ist, wird das 'forget flag' gesetzt,
-        nachdem die Fehlermeldung ausgegeben wurde.
+        If <set_forget_flag> is non-zero, the 'forget' flag is set
+        for the error message after it has been returned.
 
-SIEHE AUCH
+SEE ALSO
         ed(E), valid_read(M)
diff --git a/doc/efun/get_eval_cost b/doc/efun/get_eval_cost
index ac3ab9d..62f95b7 100644
--- a/doc/efun/get_eval_cost
+++ b/doc/efun/get_eval_cost
@@ -1,16 +1,15 @@
 SYNOPSIS
         int get_eval_cost()
 
-BESCHREIBUNG
-        Liefert die noch verbleibenden Eval Kosten, die das momentane
-        Kommando noch verbrauchen darf.
+DESCRIPTION
+        Returns the remaining evaluation cost the current
+        execution (the current command) may use up.
 
-        Das Resultat beginnt bei einer hohen, vom Treiber festgelegten Zahl
-        und nimmt fuer jede ausgefuehrte Anweisung ab.
+        It starts at a driver given high value and
+        is reduced with each executed statement.
 
-GESCHICHTE
-        Der Anfangswert, also die vom Treiber zur Verfuegung gestellten Evals,
-            sind seit 3.2.6 in LDMud als Makro verfuegbar.
+HISTORY
+        The initial value was made available as macro in LDMud 3.2.6.
 
-SIEHE AUCH
+SEE ALSO
         rusage(E), command(E), query_limits(E)
diff --git a/doc/efun/get_extra_wizinfo b/doc/efun/get_extra_wizinfo
index fd77b86..1f55b0a 100644
--- a/doc/efun/get_extra_wizinfo
+++ b/doc/efun/get_extra_wizinfo
@@ -1,16 +1,21 @@
-GESCHUETZT
 SYNOPSIS
-        mixed get_extra_wizinfo(object|lwobject|string|int wiz)
+        mixed get_extra_wizinfo(object   wiz)
+        mixed get_extra_wizinfo(lwobject wiz)
+        mixed get_extra_wizinfo(string   wiz)
+        mixed get_extra_wizinfo(int      wiz)
 
-BESCHREIBUNG
-        Liefert die <extra> Information, die in der Wizlist fuer den
-        angegebenen Gott <wiz> angegeben wurde.
+DESCRIPTION
+        Returns the 'extra' information that was set for the given
+        wizard <wiz> in the wizlist.
 
-        Ist <wiz> ein normales oder leichtgewichtiges Objekt, so wird
-        der Eintrag des Erzeugers (UID) verwendet.
-        Ist <wiz> ein String (ein Erzeuger oder eine UID), so bezeichnet er
-        den Namen des Eintrags in der Wizlist, der gelesen werden soll.
-        Ist <wiz> 0, wird der Standardeintrag aus der Wizlist genommen.
+        If <wiz> is a regular or lightweight object, the entry of its
+        creator (uid) is used.
+        If <wiz> is a string (a creator aka uid), it names the entry
+        to use.
+        If <wiz> is the number 0, the data is get from the default wizlist
+        entry.
 
-SIEHE AUCH
+        The function causes a privilege violation.
+
+SEE ALSO
         wizlist_info(E), set_extra_wizinfo(E)
diff --git a/doc/efun/get_type_info b/doc/efun/get_type_info
index 09e1e4e..a0de5ad 100644
--- a/doc/efun/get_type_info
+++ b/doc/efun/get_type_info
@@ -1,57 +1,62 @@
 SYNOPSIS
+        mixed get_type_info(mixed arg)
         mixed get_type_info(mixed arg, int flag)
 
-BESCHREIBUNG
-        Liefert Informationen uber den Typ von <arg>, wie von <flag>
-        angegeben.
+DESCRIPTION
+        Returns info about the type of arg, as controlled by the flag.
 
-        Wenn <flag> keine Zahl ist, liefert get_type_info() ein Array, dessen
-        erstes Element ein Integer ist, der den Datentyp bezeichnet, wie in
-        <lpctypes.h> definiert. Der zweite Eintrag kann zusaetzliche
-        Informationen zu <arg> enthalten.
+        If the optional argument <flag> is not given, an array is
+        returned whose first element is an integer denoting the data
+        type, as defined in <lpctypes.h>. The second entry can contain
+        additional information about arg.
 
-        Ist <flag> 0, wird nur das erste Element (d.h. der Datentyp) geliefert.
-        Ist <flag> 1, wird nur das zweite Element geliefert.
+        If <flag> flag is the number 0, only the first element of that array
+        (i.e. the data type) is returned (as int). If <flag> is 1, the
+        second element is returned.
 
-        Wenn <arg> eine Closure enthaelt, so kann get_type_info() das Objekt
-        der Closure liefern, wenn fuer <flag> 2 gesetzt ist. (Fuer 'alien
-        lfun closures' ist das das Objekt, in dem die Closure definiert ist,
-        nicht das Objekt, an das die Closure gebunden ist.)
+        If <arg> is a closure or coroutine, the <flag> setting 2 lets the
+        efun return the object of the closure resp. coroutine (which for
+        'lfun closures' is the object the lfun is defined in, which is not
+        necessarily the object the closure is bound to).
 
-        Wenn <arg> eine LFun/Context-Closure enthaelt, so kann get_type_info()
-        den Namen des definierenden Programmes liefern, wenn fuer <flag> 3
-        gesetzt ist. Fur andere Closures wird 0 zurueckgegeben.
+        If <arg> is a struct, the <flag> setting 2 lets the efun
+        return the base name of the struct.
 
-        Wenn <arg> eine LFun/Context-Closure enthaelt, so kann get_type_info()
-        den Namen der Funktion liefern, wenn fuer <flag> 4
-        gesetzt ist. Fur andere Closures wird 0 zurueckgegeben.
+        If <arg> is a lfun, context closure or coroutine, the <flag>
+        setting 3 lets the efun return the name of the program the closure
+        resp. coroutine was defined in. For other closures, <flag>
+        setting 3 returns 0.
 
-        Fuer jeden anderen Wert fuer <flag> liefert die Funktion -1.
+        If <arg> is a lfun, context closure or coroutine, the <flag>
+        setting 4 lets the efun return the name of the function.
+        For other closures, <flag> setting 4 returns 0.
 
-        Die zusaetzlichen Informationen (also der zweite Eintrag des Arrays)
-        beinhalten:
-          - fuer Mappings deren Breite, also die Anzahl Datenwerte pro Key.
-          - fuer Symbole und gequotete Arrays die Anzahl Quotes.
-          - fuer Closures den (internen) Typ der Closure.
-          - fuer gemeinsam verwendete Strings 0, ungleich 0 fuer andere Strings
-          - fuer structs der eindeutige Identifizierungsstring
-          - -1 fuer alle anderen Datentypen
+        For every other <flag> setting, -1 is returned.
 
-FEHLER
-        Diese Funktion unterliegt haeufigen Veraenderungen im Zug der
-        Treiberentwicklung.
+        The secondary information is:
+          - for mappings the width, ie the number of data items per key.
+          - for symbols and quoted arrays the number of quotes.
+          - for closures, the (internal) closure type, as defined in
+            <lpctypes.h>.
+          - for strings 0 for shared strings, and non-0 for others.
+          - for structs the unique identifier string.
+          - for Python objects the name of the type.
+          - -1 for all other datatypes.
 
-GESCHICHTE
-        Eingefuehrt in 3.2@127.
-        Flagwert 2 eingefuehrt in 3.2.1@84.
-        Zusatzinformationen zu Strings eingefuehrt in 3.2.7.
-        Bis und mit 3.2.7 lieferte get_type_info(closure, 2) keine Objekte
-            von Lamda Closures und gebundenen Lambda Closures.
-        Bis und mit 3.2.7 lieferte get_type_info(closure, 2) keine Objekte von
-            Efun-, Simul-Efun- oder Operator-Closures.
-        LDMud 3.3.276 fuegte die zusaetzliche Information fuer structs hinzu.
-        LDMud 3.3.548 fuegte Flagwert '3' hinzu.
-        LDMud 3.3.708 fuegte Flagwert '4' hinzu.
+BUGS
+        This function seems to be due to frequent changes as the
+        driver develops resp. is debugged.
 
-SIEHE AUCH
-        debug_info(E), typeof(E), to_object(E)
+HISTORY
+        Introduced in 3.2@127
+        Flag setting 2 was introduced in 3.2.1@84.
+        Secondary string information was introduced in 3.2.7.
+        Up to 3.2.7 inclusive, get_type_info(closure,2) did not return
+          the object from a lambda closure or bound-lambda closure.
+        In the 3.2 branch, the 'flag' argument could be of any type.
+        LDMud 3.3.276 added the secondary information for structs.
+        LDMud 3.3.548 added flag setting '3' for lfun/context closures.
+        LDMud 3.3.708 added flag setting '4' for lfun/context closures.
+
+SEE ALSO
+        debug_info(E), typeof(E), to_object(E), check_type(E)
diff --git a/doc/efun/geteuid b/doc/efun/geteuid
index d107e85..93c0bde 100644
--- a/doc/efun/geteuid
+++ b/doc/efun/geteuid
@@ -1,17 +1,15 @@
 SYNOPSIS
         string geteuid(object|lwobject ob)
 
-BESCHREIBUNG
-        Liefert die effektive User-ID des Objekts <obj> (normalerweise ein
-        Gott oder eine Domain). Objekte, die durch <obj> geclonet werden,
-        erhalten diese User-ID. Die effektive User-ID wird auch fuer
-        Zugriffschecks verwendet. Wenn <obj> nicht angegeben wird, wird
-        standardmaessig this_object() verwendet.
+DESCRIPTION
+        Get the effective user-id of the object (mostly a wizard or
+        domain name). Standard objects cloned by this object will get
+        that userid. The effective userid is also used for checking access
+        permissions. If ob is omitted, is this_object() as default.
 
-GESCHICHTE
-        Seit 3.2.1@47 war diese Efun nur verfuegbar, wenn EUIDs verwendet
-            wurden.
-        Seit 3.2.7 ist diese Efun immer verfuegbar.
+HISTORY
+        Since 3.2.1@47, this efun is availabe only when using euids.
+        Since 3.2.7, this efun is always available.
 
-SIEHE AUCH
+SEE ALSO
         getuid(E), configure_object(E)
diff --git a/doc/efun/getuid b/doc/efun/getuid
index c417586..7512d0b 100644
--- a/doc/efun/getuid
+++ b/doc/efun/getuid
@@ -1,16 +1,15 @@
 SYNOPSIS
         string getuid(object|lwobject ob)
 
-BESCHREIBUNG
-        User-IDs werden im COMPAT-Modus nicht verwendet.
-        Die Funktion liefert die UID des Objekts, also den Namen des Gottes
-        oder der Domain oder Gruppe, die fuer das Objekt verantwortlich ist.
-        Der Name entspricht dem Namen, der in der Wizlist verwendet wird.
-        Wird <ob> nicht angegeben, wird standardmaessig this_object()
-        genommen.
+DESCRIPTION
+        User-ids are not used in compat mode.
+        Get user-id of the object, i.e. the name of the wizard or
+        domain that is responsible for the object. This name is also
+        the name used in the wizlist. If no arg is given, use
+        this_object() as default.
 
-GESCHICHTE
-        Seit 3.2.1@47 ist diese Efun ein Alias fuer creator().
+HISTORY
+        Since 3.2.1@47, this creator() is an alias for this efun.
 
-SIEHE AUCH
+SEE ALSO
         geteuid(E), configure_object(E), creator(E)
diff --git a/doc/efun/gmtime b/doc/efun/gmtime
index ff0303f..10ae708 100644
--- a/doc/efun/gmtime
+++ b/doc/efun/gmtime
@@ -4,35 +4,35 @@
         int * gmtime(int clock)
         int * gmtime(int *uclock)
 
-BESCHREIBUNG
-        Interpretiert <clock> als Anzahl Sekunden seit dem 01. Januar 1970,
-        00:00:00 Uhr und gibt die Zeit in UTC in einer schoenen Struktur
-        aus. Wird <clock> nicht angegeben, wird stattdessen time() verwendet.
+DESCRIPTION
+        Interpret the argument clock as number of seconds since Jan,
+        1st, 1970, 0:00, and return the time in UTC in a nice structure.
+        if <clock> is not specified, time() is used as default.
 
-        Alternativ kann auch ein Array mit zwei Elementen angegeben werden,
-        wie es von uclock() geliefert wird: das erste Element wird
-        wie <clock> interpretiert, das zweite Element bezeichnet die
-        Mikrosekunden in der aktuellen Sekunde. Dieses zweite Element wird
-        ignoriert.
+        Alternatively, accept an array of two ints: the first is <clock>
+        value as in the first form, the second int is the number of
+        microseconds elapsed in the current second, which is ignored.
 
-        Das Resultat von gmtime() ist ein Array, das folgende Werte beinhaltet:
-            int TM_SEC   (0) : Sekunden (0..59)
-            int TM_MIN   (1) : Minuten (0..59)
-            int TM_HOUR  (2) : Stunden (0..23)
-            int TM_MDAY  (3) : Tag im Monat (1..31)
-            int TM_MON   (4) : Monat im Jahr (0..11)
-            int TM_YEAR  (5) : Jahr (z.B.  2001)
-            int TM_WDAY  (6) : Wochentag (Sunday = 0)
-            int TM_YDAY  (7) : Tag im Jahr (0..365)
-            int TM_ISDST (8) : TRUE: Daylight saving time
+        The result is an array of integers:
 
-BEISPIELE
-        printf("Heute ist %s\n", ({ "Sonntag", "Montag", "Dienstag",
-            "Mittwoch",        "Donnerstag", "Freitag", "Samstag"})
-            [gmtime()[TM_WDAY]]);
+          int TM_SEC   (0) : Seconds (0..59)
+          int TM_MIN   (1) : Minutes (0..59)
+          int TM_HOUR  (2) : Hours (0..23)
+          int TM_MDAY  (3) : Day of the month (1..31)
+          int TM_MON   (4) : Month of the year (0..11)
+          int TM_YEAR  (5) : Year (e.g.  2001)
+          int TM_WDAY  (6) : Day of the week (Sunday = 0)
+          int TM_YDAY  (7) : Day of the year (0..365)
+          int TM_ISDST (8) : TRUE: Daylight saving time
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
 
-SIEHE AUCH
+EXAMPLES
+        printf("Today is %s\n",
+               ({ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
+                  "Friday", "Saturday" })[gmtime()[TM_WDAY]]);
+
+HISTORY
+        Introduced in LDMud 3.2.9.
+
+SEE ALSO
         ctime(E), localtime(E), time(E), utime(E)
diff --git a/doc/efun/hash b/doc/efun/hash
index 72b432a..f913736 100644
--- a/doc/efun/hash
+++ b/doc/efun/hash
@@ -5,15 +5,14 @@
         string hash(int method, bytes  arg [, int iterations ] )
         string hash(int method, int *  arg [, int iterations ] )
 
-BESCHREIBUNG
-        Berechne den Hash <method> vom Argument <arg>. Der Hash wird
-        mit <iterations> Wiederholungen berechnet, wird der Wert weggelassen,
-        wird eine Wiederholung verwendet. Falls ein String als <arg>
-        uebergeben wurde, so wird dieser in eine UTF-8-Bytefolge konvertiert
-        und davon der Hash berechnet.
+DESCRIPTION
+        Calculate the hash from <arg> as determined by <method>. The hash is
+        calculated with <iterations> iterations, default is 1 iteration.
+        If <arg> is a string, it will be converted to a UTF-8 byte sequence
+        of which then the hash will be created.
 
-        <method> ist eine der TLS_HASH_-Konstanten in tls.h; nicht jede
-        beschriebene Methode ist in einem gegebenen Driver vorhanden:
+        <method> is one of the TLS_HASH_ constants defined in tls.h; not
+        all recognized methods may be supported for a given driven:
 
           TLS_HASH_SHA1      (1)
           TLS_HASH_SHA224    (2)
@@ -23,21 +22,21 @@
           TLS_HASH_MD5       (6)
           TLS_HASH_RIPEMD160 (7)
 
-        Wenn der Driver ohne OpenSSL- oder GCrypt-Unterstuetzung compiliert
-        wurde, sind nur TLS_HASH_SHA1 und TLS_HASH_MD5 verfuegbar.
+        If the driver is compiled without OpenSSL or GCrypt support
+        only TLS_HASH_SHA1 and TLS_HASH_MD5 are available.
 
-        Jede Iteration kostet 10 Evalution-Ticks.
+        The efun costs 10 ticks per iteration.
 
 
-BEISPIELE
+EXAMPLES
         string s;
 
         s = hash(TLS_HASH_SHA1, "Hello", 2);
         s = hash(TLS_HASH_SHA1, ({ 'H', 'e', 'l', 'l', 'o' }) )
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.3.714.
-        LDMud 3.3.719 fuehrte die iterationsbasierten Evaluationskosten ein.
+HISTORY
+        Introduced in LDMud 3.3.714.
+        LDMud 3.3.719 added the iteration-based evaluation cost.
 
-SIEHE AUCH
+SEE ALSO
         crypt(E), md5(E), md5_crypt(E), sha1(E), hmac(E)
diff --git a/doc/efun/heart_beat_info b/doc/efun/heart_beat_info
index a640b2c..fb6ca89 100644
--- a/doc/efun/heart_beat_info
+++ b/doc/efun/heart_beat_info
@@ -1,9 +1,9 @@
 SYNOPSIS
         object * heart_beat_info()
 
-BESCHREIBUNG
-        Resultat ist ein Array mit allen Objekten, die einen aktiven
-        heart_beat() haben.
+DESCRIPTION
+        This function returns an array of all objects having their heart
+        beat turned on.
 
-SIEHE AUCH
+SEE ALSO
         set_heart_beat(E), heart_beat(A), call_out_info(E)
diff --git a/doc/efun/hmac b/doc/efun/hmac
index 1c712fa..7df00a5 100644
--- a/doc/efun/hmac
+++ b/doc/efun/hmac
@@ -8,13 +8,14 @@
         string hmac(int method, bytes  key, bytes  arg )
         string hmac(int method, bytes  key, int *  arg )
 
-BESCHREIBUNG
-        Berechnet den Hashed Message Authenication Code fuer <arg>
-        nach Methode <method> und fuer das Password <key>. Strings
-        werden zuvor in eine UTF-8-Bytefolge konvertiert.
+DESCRIPTION
+        Calculate the Hashed Message Authenication Code for <arg> based
+        on the digest <method> and the password <key>. Return the HMAC.
+        Any strings given as <key> or <arg> are converted to a UTF-8
+        byte sequence before being used.
 
-        <method> ist eine der TLS_HASH_-Konstanten in tls.h; nicht jede
-        beschriebene Methode ist in einem gegebenen Driver vorhanden:
+        <method> is one of the TLS_HASH_ constants defined in tls.h; not
+        all recognized methods may be supported for a given driven:
 
           TLS_HASH_SHA1      (1)
           TLS_HASH_SHA224    (2)
@@ -24,18 +25,18 @@
           TLS_HASH_MD5       (6)
           TLS_HASH_RIPEMD160 (7)
 
-        Wenn der Driver ohne OpenSSL- oder GCrypt-Unterstuetzung compiliert
-        wurde, erzeugt diese Funktion einen Fehler.
+        If the driver is compiled without OpenSSL or GCrypt support
+        an error is thrown.
 
 
-BEISPIELE
+EXAMPLES
         string s;
 
         s = hmac(TLS_HASH_SHA1, "secret", "Hello");
         s = hmac(TLS_HASH_SHA1, "secret", ({ 'H', 'e', 'l', 'l', 'o' }) )
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.3.714
+HISTORY
+        Introduced in LDMud 3.3.714.
 
-SIEHE AUCH
+SEE ALSO
         crypt(E), md5(E), md5_crypt(E), sha1(E), hmac(E)
diff --git a/doc/efun/idna_stringprep b/doc/efun/idna_stringprep
index 5ec1a44..70ddfbd 100644
--- a/doc/efun/idna_stringprep
+++ b/doc/efun/idna_stringprep
@@ -4,19 +4,19 @@
 
         string idna_stringprep(string str, int profile, int flags)
 
-BESCHREIBUNG
-        Prepariere den UTF-8-String <str> passend zum Profil <profile>
-        (siehe auch libidn stringprep(3)).
+DESCRIPTION
+        Prepare the UTF-8 string <str> according to the stringprep
+        <profile> (see also libidn stringprep(3)).
 
-        <profile> und <flags> sind definiert in <idn.h>.
+        <profile> and <flags> are one of the values defined in <idn.h>.
 
-        Sollte ein Fehler auftreten, wird eine Exception geworfen.
+        If an error occurs, an exception is thrown.
 
-        Diese Efun is nur auf Systemen mit einer installierten libidn 
-        verfuegbar -- in diesem Fall ist das Makro __IDNA__ definiert.
+        The efun is available only if the system supports libidn - in
+        that case __IDNA__ is defined.
 
-GESCHICHTE
+HISTORY
         Introduced in LDMud 3.3.713.
 
-SIEHE AUCH
+SEE ALSO
         idna_to_ascii(E), idna_to_unicode(E)
diff --git a/doc/efun/idna_to_ascii b/doc/efun/idna_to_ascii
index 3d6236e..e0c05e4 100644
--- a/doc/efun/idna_to_ascii
+++ b/doc/efun/idna_to_ascii
@@ -4,17 +4,16 @@
 
         string idna_to_ascii(string name)
 
-BESCHREIBUNG
-        Wandelt den String <name> von UTF-8 to IDNA Darstellung
-        (8z punycode).
+DESCRIPTION
+        Convert string <name> from UTF-8 to idna representation (8z punycode).
 
-        Sollte ein Fehler auftreten, wird eine Exception geworfen.
+        If an error occurs, an exception is thrown.
 
-        Diese Efun is nur auf Systemen mit installierter libidn
-        verfuegbar - in diesem Fall ist das Makro __IDNA__ definiert.
+        The efun is available only if the system supports libidn - in
+        that case __IDNA__ is defined.
 
-GESCHICHTE
+HISTORY
         Introduced in LDMud 3.3.713.
 
-SIEHE AUCH
-        idna_to_unicode(E), idna_stringprep(E)
+SEE ALSO
+        idna_to_ascii(E), idna_stringprep(E)
diff --git a/doc/efun/idna_to_unicode b/doc/efun/idna_to_unicode
index 23f6f9c..2e3a9db 100644
--- a/doc/efun/idna_to_unicode
+++ b/doc/efun/idna_to_unicode
@@ -4,17 +4,17 @@
 
         string idna_to_unicode(string name)
 
-BESCHREIBUNG
-        Wandle den String <name> von IDNA Darstellung (8z punycode)
-        nach UTF-8.
+DESCRIPTION
+        Convert string <name> from idna representation (8z punycode)
+        to UTF-8.
 
-        Sollte ein Fehler auftreten, wird eine Exception geworfen.
+        If an error occurs, an exception is thrown.
 
-        Diese Efun is nur auf Systemen mit installierter libidn
-        verfuegbar - in diesem Fall ist das Makro __IDNA__ definiert.
+        The efun is available only if the system supports libidn - in
+        that case __IDNA__ is defined.
 
-GESCHICHTE
+HISTORY
         Introduced in LDMud 3.3.713.
 
-SIEHE AUCH
+SEE ALSO
         idna_to_ascii(E), idna_stringprep(E)
diff --git a/doc/efun/implode b/doc/efun/implode
index 6d11762..7f0b3b5 100644
--- a/doc/efun/implode
+++ b/doc/efun/implode
@@ -1,27 +1,25 @@
 SYNOPSIS
-        string implode(mixed *arr, string del)
-        bytes  implode(mixed *arr, bytes  del)
+        string implode(string *arr, string del)
+        bytes implode(bytes *arr, bytes del)
 
-BESCHREIBUNG
-	Setzt alle Zeichenketten (Strings) aus dem Feld (Array) arr zu
-        einer Zeichenkette zusammen und fuegt dabei die Zeichenkette del
-        zwischen je zwei Elementen ein. Elemente aus dem Feld arr, welche
-        keine Zeichenketten sind, werden ignoriert. Mit Bytefolgen wird
-        analog verfahren.
+DESCRIPTION
+        Concatenate all strings found in array arr, with the string
+        del between each element. Only strings are used from the array.
+        Works similar with arrays of byte sequences.
 
-BEISPIELE
-	Funktion                                        Rueckgabewert
+EXAMPLES
+        function                                        returns
         -------------------------------------------------------------------
-	implode(({ "foo", "bar", "" }), "*")            "foo*bar*"
-	implode(({ "a", 2, this_object(), "c" }), "b")  "abc"
+        implode(({ "foo", "bar", "" }), "*")            "foo*bar*"
+        implode(({ "a", 2, this_object(), "c" }), "b")  "abc"
 
-	Kann zusammen mit explode() als Funktion zum Ersetzen von
-        Zeichenketten verwendet werden:
+        Together with explode() this can be used as a search and replace
+        function of strings:
         implode(explode("a short text", " "), "_")      "a_short_text"
 
-	Heutzutage kann man stattdessen auch
-	    regreplace("a short text", " ", "_", 1)
-	verwenden.
+        But nowadays you can also use
+            regreplace("a short text", " ", "_", 1)
+        instead.
 
-SIEHE AUCH
+SEE ALSO
         explode(E), regreplace(E)
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)
diff --git a/doc/efun/inherit_list b/doc/efun/inherit_list
index 62b12ee..98d1cb4 100644
--- a/doc/efun/inherit_list
+++ b/doc/efun/inherit_list
@@ -5,57 +5,59 @@
         string * inherit_list(object|lwobject ob)
         string * inherit_list(object|lwobject ob, int flags)
 
-BESCHREIBUNG
-        Liefert die Namen von allen Dateien, die von <ob> geerbt werden,
-        inklusive <ob>s eigener Dateiname. Wird <ob> nicht angegeben, wird
-        standarndmaessig das aktuelle Objekt verwendet.
 
-        Der Wert von <flags> bestimmt die Struktur des Rueckgabewertes:
-          - <flag> = INHLIST_FLAT (0, default):
-            inherit_list() liefert ein Array von Dateinamen, beginnend mit dem
-            Namen von <ob> selbst, gefolgt von den Namen aller geerbten
-            Objekten.
-          - <flag> = INHLIST_TREE (1):
-            inherit_list() liefert ein Array von Dateinamen, beginnend mit dem
-            Namen von <ob> selbst. Wenn ein geerbte File selbst keine Files
-            erbt, wird sein Name direkt in das Ergebnis eingetragen. Wenn ein
-            geerbtes File selbst Files erbt, wird ein Untervektor erzeugt, in
-            dem die Inherits eingetragen werden. Der Untervektor hat die
-            gleiche Struktur wie der Haupvektor.
-          - <flag> = INHLIST_TAG_VIRTUAL (2):
-            Alle Namen im Ergebnisvektor haben ein leeres Tag "  " (zwei
-            Leerschlaege) fuer normale Inherits und "v " fuer virtuelle
-            Inherits als Praefix vorangestellt.
+DESCRIPTION
+        Returns the names of all files inherited by <ob>, including
+        <ob>s own filename. If <ob> is omitted, it defaults to the current
+        object. The value of <flags> determines the structure of the output.
 
-        Alle Flags koennen mit einem binaeren Oder | verbunden werden, wobei
-        INHLIST_FLAT und INHLIST_TREE sich gegenseitig ausschliessen.
+        <flag> = INHLIST_FLAT (0, default):
+          The result is an array of filenames, starting the with the filename
+          of <ob> itself, followed by the names of all inherited objects
+          in breadth order.
 
-        Wenn ein Objekt inklusive <ob> einem replace_program() unterworfen
-        war, spiegeln die gelieferten Dateinamen das effektiv aktive Programm
-        wider.
+        <flag> = INHLIST_TREE (1):
+          The result is an array starting the with the filename
+          of <ob> itself, followed by the all directly inherited
+          objects. If one of the inherited objects has no inherits by itself,
+          then its name will be stored directly in the array. If one inherited
+          object has inherits by itself, a subvector will be created and
+          stored in the result vector. The subvector(s) have the same
+          structure as the main result vector.
 
-        Die Inheritpfade, die geliefert werden, beginnen immer mit '/'
-        (absolute Pfade), auch wenn der Treiber im COMPAT Modus laeuft.
+        <flag> = INHLIST_TAG_VIRTUAL (2):
+          All names in the result are prefixed with a tag: "  " (two spaces)
+          for normal inherits, "v " for virtual inherits.
+
+        All flags can be combined with binary-|, just _FLAT and _TREE are
+        mutually exclusive.
+
+        If objects, including <ob>, had been undergone a replace_program(),
+        the returned filenames will reflect the actual active program.
+
+        The returned names always begin with '/' (absolute path), except
+        when the parser runs in COMPAT mode.
 
 
-BEISPIELE
-        Gegeben folgende Vererbungsstruktur:
+EXAMPLES
+        Given this inheritance structure:
 
             / c - d
           a
             \ b
 
-        Wobei d virtuell geerbt wird, ergeben sich folgende Resultate:
+        the efun will give the following results:
 
-            inherit_list(a) -> ({ "a", "c", "b", "d" })
-            inherit_list(c) -> ({ "c", "d" })
-            inherit_list(a, 1) -> ({ "a", ({ "c", "d" }), "b" })
-            inherit_list(a, 3) -> ({ "  a", ({ " c", "v d" }), "  b" })
+          inherit_list(a) -> ({ "a", "c", "b", "d" })
+          inherit_list(c) -> ({ "c", "d" })
+          inherit_list(a, 1) -> ({ "a", ({ "c", "d" }), "b" })
 
-GESCHICHTE
-        Vor 3.2.8, begannen die gelieferten Namen niemals mit einem '/'.
-        LDMud 3.2.9 fuehrte die Baumstruktur (_TREE) und Tags fuer virtuelle
-            Inherits ("v ") ein.
 
-SIEHE AUCH
+HISTORY
+        Before 3.2.8, the returned names never started with a '/'.
+        LDMud 3.2.9/3.3.111 added the tree representation.
+        LDMud 3.2.9/3.3.125 added the tagging of virtual inherits.
+
+
+SEE ALSO
         debug_info(E), include_list(E)
diff --git a/doc/efun/input_to b/doc/efun/input_to
index 87748d5..973d470 100644
--- a/doc/efun/input_to
+++ b/doc/efun/input_to
@@ -5,112 +5,109 @@
         void input_to(string|closure fun, int flag, ...)
         void input_to(string|closure fun, int flag, string|closure prompt, ...)
 
-BESCHREIBUNG
-        Die naechste Zeile, die der Spieler eintippt, wird als Argument an die
-        Funktion <fun> uebergeben. Ausnahme: wenn die naechste Zeile mit einem
-        '!' beginnt, wird sie als Kommando ausgewertet bzw. an das letzte
-        input_to() uebergeben, das das INPUT_IGNORE_BANG Flag gesetzt hat.
-        Die Funktion <fun> kann "static" deklariert sein, nicht aber "private"
-        (sonst wird sie nicht gefunden).
+DESCRIPTION
+        Enable next line of user input to be sent to the function <fun>
+        as an argument. Exception: if the next input
+        line starts with a "!", it will be parsed as a command resp.
+        passed to the most recent input_to() given with the
+        INPUT_IGNORE_BANG flag.
+        The function <fun> may be static, but must not be private (or
+        it won't be found).
 
-        Der Aufruf von <fun> erfolgt nicht sofort, sondern erst, wenn der
-        Spieler die Entertaste drueckt.
+        Note that fun is not called immediately but after pressing the
+        RETURN key.
 
-        Wenn input_to() mehr als einmal pro Funktion aufgerufen wird,
-        wird normalerweise nur das erste input_to() beruecksichtigt.
-        Diese Verhalten kann durch die Angabe von INPUT_APPEND
-        modifiziert werden: in diesem Fall wird das input_to() an die
-        Liste der bereits anhaengigen input_tos angehaengt (siehe
-        BEISPIELE).
+        Usually, if input_to() is called more than once in the same execution,
+        only the first call has any effect. This behaviour can be
+        modified by specifying the INPUT_APPEND flag which will append
+        the given input_to to the already existing input_tos (see
+        EXAMPLES).
 
-        Wird andererseits waehrend einem laufenden input_to() (mittels "!" am
-        Zeilenanfang) eine neue Funktion aufgerufen, die wiederum ein
-        input_to() enthaelt, wird das urspruengliche input_to() so lange
-        unterbrochen, bis das neue input_to() abgearbeitet wurde,
-        anschliessend wird es wieder aktiv.
+        Also, if a command given during an input_to() (using the "!"
+        escape) issues its own input_to(), the previous input_to() is
+        suspended until the new input_to() has been handled, then the
+        previous one becomes active again.
 
-        Das optionale <flag> kann ein binaeres Oder (|) der folgenden
-        Werte sein:
+        The optional argument <flag> may be a binary-OR ('|') of the
+        following option values:
 
-        INPUT_NOECHO (1):
-            Die vom Spieler eingegebene Zeile erzeugt kein Echo und wird auch
-            nicht erkannt, wenn der Spieler beobachtet wird.
+          INPUT_NOECHO  (1):
+              The line given by the player will not be echoed, and is
+              not seen if snooped.
 
-            Dieser Modus kann nur geaendert werden, wenn telnet enabled ist.
+              A change of this mode not possible with telnet disabled.
 
-        INPUT_CHARMODE (2):
-            Die Verbindung zum User wechselt von Zeilen- auf Zeichenmodus. So
-            wird nur ein einzelnes Zeichen (!) vom Spieler empfangen.
+          INPUT_CHARMODE  (2):
+              The connection is switched from line- into charmode to
+              retrieve a single character(!) from the player.
 
-            Ist telnet disabled, wird lediglich die Interpretation der
-            einkommenden Daten durch den Driver umgeschaltet - das
-            Clientprogramm des Spieler verbleibt im gerade aktiven Modus.
+              Is telnet disabled, then only the handling of the
+              incoming data by the driver is changed - the client
+              program of the player will remain in its current mode.
 
-            Nachdem die Funktion <fun> ausgefuehrt wurde, wechselt die
-            Verbindung zurueck in Zeilenmodus, ausser ein nachfolgendes
-            input_to( , 2) wurde gestartet.
+              After execution of <fun>, the connection is switched
+              back into linemode unless a subsequent input_to( , 2)
+              has been issued.
 
-            Zeilenumbrueche werden je nach Client unterschiedlich empfangen,
-            entweder als "", als "\r" gefolgt von "" oder als "\r" (letzteres
-            kommt vor allem bei Windows Clients vor).
+              Lineends are received exactly as the client sent them:
+              "\n", "\r" followed by "\n", or just "\r".
 
-            Das Frontend des Spielers kann dauernd im Zeilenmodus bleiben.
-            Auch wenn input_to() nur ein einzelnes Zeichen fordert, muss der
-            Spieler unter Umstaenden das Zeichen und einen Zeilenumbruch
-            druecken (und senden). Normalerweise erhaelt <fun> dann den
-            gesamten Input auf einmal.
+              Note that the players frontend is free to stay in
+              linemode all the time: even if you request a single
+              character, the player might be forced to type (and send)
+              that character plus the return key. Usually your function
+              will then receive the complete input line (including the
+              newline character sequence!) in one call.
 
-            Will man laenger im Zeichenmodus bleiben, kann der Overhead
-            reduziert werden, indem set_combine_charset() verwendet wird. So
-            koennen Zeichensequenzen als ein String anstelle von
-            Zeichen-fuer-Zeichen empfangen werden. In einem screenorientierten
-            Editor gilt dies fuer die meisten druckbaren Zeichen.
+              If you plan to stay in charmode a longer time , you can
+              reduce the call overhead by using set_combine_charset()
+              to retrieve sequences of certain characters as one string
+              instead of one-by-one. In a screen-oriented editor for
+              example this would be most of the printable characters.
 
-        INPUT_PROMPT (4):
-            Das Argument nach dem <flag> wird als Prompt fuer die Eingabe
-            verwendet. Wenn dieses Argument nicht angegeben (und damit kein
-            Propmt definiert) ist, wird kein Prompt ausgegeben.
+          INPUT_PROMPT (4):
+              The argument following the <flag> argument is used as
+              prompt for the input. If this flag is not given, and thus
+              no prompt specified, nothing will be printed.
 
-        INPUT_NO_TELNET (8):
-            Modifiziert das INPUT_CHARMODE Argument: der Driver aendert
-            seine Behandlung von eingehenden Daten entsprechend dem _CHARMODE
-            Argument, sendet aber keine Telnetkommandos zur Anpassung
-            des Verhaltens des Clientprogrammes.
+          INPUT_NO_TELNET (8):
+              Modifies the INPUT_CHARMODE flag: the driver will switch
+              it's internal handling of incoming data, but not send out
+              any telnet commands to switch the client's behaviour.
 
-        INPUT_APPEND (16):
-            Das input_to() wird an die Liste der bereits anhaengigen
-            input_tos angehaengt.
+          INPUT_APPEND (16):
+              Append the input_to to the list of currently pending input_tos
+              (if any).
 
-        INPUT_IGNORE_BANG (128):
-            Eingaben, die mit ! beginnen, werden NICHT als Kommandos geparst,
-            sondern auch als Argument an die Funkion <fun> uebergeben. Die
-            Verwendung dieses Flags ist eingeschraenkt.
+          INPUT_IGNORE_BANG  (128):
+              Input lines starting with '!' (or whatever the input
+              escape character was configured to be) will _not_ be parsed as
+              commands, but are given to the function as well. Usage
+              of this option is privileged.
 
-        Alle nachfolgenden Argumente werden als zweites bzw. drittes usw.
-        Argument an <fun> uebergeben.
+        The optional trailing args will be passed as second and
+        subsequent args to the function fun.
 
-
-BEISPIELE
+EXAMPLES
         void func() {
-            ...
-            input_to("enter_name", INPUT_PROMPT, "Wie lautet dein Name?:");
-            /* Frueher erledigte man dies mit:
-             *   write("Wie lautet dein Name?:");
-             *   input_to("enter_name");
-             */
-             ...
-         }
-
-        void enter_name(string str) {
-            write("Heisst du wirklich '"+str+"'?? *kicher*\n");
-            ...
+           ...
+           input_to("enter_name", INPUT_PROMPT, "Please enter your name:");
+           /* The traditional way of doing this was:
+            *   write("Please enter your name:");
+            *   input_to("enter_name");
+            */
+           ...
+        }
+        enter_name(string str) {
+           write("Is '"+str+"' really your name?? *giggle*\n");
+           ...
         }
 
-        Bei der input_to() Anweisung fuehrt der Driver die Funktion
-        func() aus, erwartet aber gleichzeitig Input vom Spieler. Wenn
-        dieser etwas eingegeben UND DIE ENTERTASTE GEDRUECKT HAT, arbeitet
-        der Driver die Funktion enter_name() mit dem eingegebenen String
-        als Argument ab.
+        When reaching the input_to() statement the driver
+        continues the function func() but also asks the user for
+        input. If you entered whatever is asked and press RETURN the
+        driver will invoke the enter_name() function with the
+        string you entered as argument to it.
 
 
         void func() {
@@ -120,26 +117,53 @@
           ...
         }
 
-        Diese Sequenze erzeugt zwei input_tos: Eingaben gehen zuerst
-        an enter_firstname(); und wenn diese Funktion fertig ist
-        (einschliesslich etwaiger eigener non-INPUT_APPEND input_tos), geht
-        die naechste Eingabe an enter_lastname().
+        This sequence will queue two input_tos: the input first goes
+        to enter_firstname(); and when this function is done
+        (including any non-INPUT_APPEND input_to()s on its own), the next
+        input will go to enter_lastname().
 
-GESCHICHTE
-        Die Bedeutung von <flag> wurde in 3.2.1@93 erweitert.
-        Die Limitierung fuer das "stapeln" von input_to()s aus !-Kommandos
-            wurde in LDMud 3.2.8 implementiert.
-        Seit LDMud 3.2.8 kann <fun> in Form einer Closure angegeben werden.
-        LDMud 3.2.9 fuehrte das Flag INPUT_PROMPT samt zugehoerigem Argument
-            ein.
-        LDMud 3.2.11/3.3.593 fuehrte das INPUT_NO_TELNET Flag ein.
-        LDMud 3.2.11/3.3.637 fuehrte das INPUT_APPEND Flag ein.
 
-FEHLER
-        Im Zeichenmodus sollten Zeilenumbrueche eigentlich als "\n" zurueck
-        gegeben werden. Dies allerdings kann existierenden Code zerstoeren.
+        Note that the list of input_to-s is treated as a flat list:
 
-SIEHE AUCH
-        call_other(E), sscanf(E), privilege_violation(M),
-        set_combine_charset(E), query_input_pending(E), find_input_to(E),
-        input_to_info(E), remove_input_to(E), enable_telnet(E)
+        void func() {
+          ..
+          input_to("func1");
+          input_to("func2", INPUT_APPEND);
+        }
+
+        void func1() {
+          ..
+          input_to("func3", INPUT_APPEND);
+        }
+
+        void func2() { ... }
+        void func3() { ... }
+
+        This code will result in the functions being called in the order
+        func(), func1(), func2(), func3(); and not func(), func1(), func3(),
+        func2().
+          
+
+BUGS
+        In charmode, it is not possible to receive the NUL character
+        and pass it to the mudlib: internally the NUL character has
+        magical properties.
+
+HISTORY
+        The meaning of the flag parameter was extended in 3.2.1@93.
+        The limited "stacking" of input_to()s issued from !-commands
+        was implemented in LDMud 3.2.8.
+        Since LDMud 3.2.8 the function can be given as a closure.
+        LDMud 3.2.9/3.3.125 introduced the INPUT_PROMPT flag and argument.
+        LDMud 3.2.11/3.3.593 added the INPUT_NO_TELNET flag.
+        LDMud 3.2.11/3.3.637 added the INPUT_APPEND flag.
+        LDMud 3.3 changed the handling of newline sequences in charmode
+          to verbatim passing. Earlier drivers passed an empty string
+          instead.
+        LDMud 3.3 allowed the driver to be configured to use a different
+          input escape character.
+
+SEE ALSO
+        privilege_violation(M), set_combine_charset(E),
+        query_input_pending(E), find_input_to(E), input_to_info(E),
+        remove_input_to(E), enable_telnet(E)
diff --git a/doc/efun/input_to_info b/doc/efun/input_to_info
index 7a8cb28..4586326 100644
--- a/doc/efun/input_to_info
+++ b/doc/efun/input_to_info
@@ -1,21 +1,19 @@
 SYNOPSIS
         mixed * input_to_info(object player)
 
-BESCHREIBUNG
-        Liefert ein Array aller fuer <player> anhaengigen input_to()s.
-        Der erste Eintrag im Array ist der aelteste anhaengige input_to()
-        (derjenige, welcher als erstes gestartet wurde), der letzte
-        Eintrag ist der neuste input_to().
+DESCRIPTION
+        Construct an array of all input_to's pending for this interactive
+        <player>.  The first entry in the array is the least recently added
+        input_to, the last element the most recently added one.
 
-        Jeder Eintrag im Array ist wiederum ein Array von 2 oder mehr
-        Eintraegen, das folgende Elemente enthaelt:
-            0:   Das Objekt (nur, wenn die Funktion ein string ist)
-            1:   Die Funktion (String oder Closure)
-            2ff: Die Argumente
+        Every item in the array is itself an array of 2 or more entries:
+          0:   The object (only if the function is a string).
+          1:   The function (string or closure).
+          2..: The argument(s).
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
+HISTORY
+        Introduced in LDMud 3.2.9.
 
-SIEHE AUCH
+SEE ALSO
         input_to(E), find_input_to(E), remove_input_to(E),
         query_input_pending(E)
diff --git a/doc/efun/interactive b/doc/efun/interactive
index f3c19f1..0734970 100644
--- a/doc/efun/interactive
+++ b/doc/efun/interactive
@@ -1,11 +1,12 @@
 SYNOPSIS
         int interactive()
-        int interactive(object obj)
+        int interactive(object ob)
 
-BESCHREIBUNG
-        Liefert 1 zurueck, wenn <obj> ein interaktiver User (ein Spieler)
-        ist, sonst 0. Wird <obj> weggelassen, so wird this_object() verwendet.
+DESCRIPTION
+        Return non-zero if ob is an interactive user. If ob is omitted,
+        this_object() will be used. The return value is 1 if the
+        object is interactive, else 0.
 
-SIEHE AUCH
-        query_once_interactive(E), query_ip_number(E), query_ip_name(E),
-        query_idle(E)
+SEE ALSO
+        query_once_interactive(E), query_ip_number(E),
+        query_ip_name(E), query_idle(E)
diff --git a/doc/efun/interactive_info b/doc/efun/interactive_info
index f7c2877..2ac77b7 100644
--- a/doc/efun/interactive_info
+++ b/doc/efun/interactive_info
@@ -75,6 +75,17 @@
           The number of seconds that the interactive object <ob> has been
           idle.
 
+        <what> == II_NOECHO:
+          The current no-echo mode of <ob>:
+            0: Normal echo mode
+            1: no-echo mode was requested (INPUT_NOECHO input is pending)
+            2: no-echo mode was acknowledged by the client (this does not
+               happen, if the mudlib handles this with the H_NOECHO hook).
+
+        <what> == II_CHARMODE:
+          Whether charmode is active for <ob>.
+          The values are similar to II_NOECHO.
+
 
 
         Output Handling:
diff --git a/doc/efun/intp b/doc/efun/intp
index 49de69f..5c14516 100644
--- a/doc/efun/intp
+++ b/doc/efun/intp
@@ -1,9 +1,10 @@
 SYNOPSIS
         int intp(mixed arg)
 
-BESCHREIBUNG
-        Liefert 1, wenn das Argument eine Ganzzahl (Integer) ist, sonst 0.
+DESCRIPTION
+        Return 1 if arg is an integer number.
 
-SIEHE AUCH
-        closurep(E), floatp(E), mappingp(E), objectp(E), pointerp(E),
-        referencep(E), stringp(E), bytesp(E), symbolp(E), clonep(E)
+SEE ALSO
+        bytesp(E), clonep(E), closurep(E), coroutinep(E), floatp(E),
+        lpctypep(E), lwobjectp(E), mappingp(E), objectp(E), pointerp(E),
+        referencep(E), stringp(E), structp(E), symbolp(E)
diff --git a/doc/efun/invert_bits b/doc/efun/invert_bits
index 0836df7..cf69e02 100644
--- a/doc/efun/invert_bits
+++ b/doc/efun/invert_bits
@@ -1,17 +1,21 @@
 SYNOPSIS
         string invert_bits(string str)
 
-BESCHREIBUNG
-        Invertiert den Status aller Bits im Bitstring <str> und liefert den
-        neuen String zurueck. Dabei bleibt die Laenge von <str>, also die
-        gesamte Anzahl Bits, die gleiche.
+DESCRIPTION
+        Invert the status of all bits in bitstring <str> and return the
+        new string.
 
-BEISPIELE
+        Note that the total number of bits (ie the string length) stays
+        the same.
+
+EXAMPLES
         string s;
-        s = set_bit("", 3); s = set_bit(s, 4); s = set_bit(s, 15);
-        --> s ist nun  "8 ("
-        invert_bits(s) --> liefert "G_W"
 
-SIEHE AUCH
+        s = set_bit("", 3); s = set_bit(s, 4); s = set_bit(s, 15);
+          --> s is now  "8 ("
+
+        invert_bits(s) --> returns "G_W"
+
+SEE ALSO
         set_bit(E), clear_bit(E), test_bit(E), last_bit(E), and_bits(E),
         or_bits(E), xor_bits(E), count_bits(E), copy_bits(E)
diff --git a/doc/efun/lambda b/doc/efun/lambda
index 14a709f..913115a 100644
--- a/doc/efun/lambda
+++ b/doc/efun/lambda
@@ -1,17 +1,19 @@
 SYNOPSIS
         closure lambda(mixed *arr, mixed)
 
-BESCHREIBUNG
-        Erzeugt eine Lambda Closure, entsprechend den Lamda Closures in LISP.
-        Die Closure ist an das Objekt gebunden, das sie erzeugt hat, und kann
-        deshalb Verweise auf globale Variablen enthalten.
+DESCRIPTION
+        Constructs a lambda closure, like lambda function in LISP.
+        The closure is bound to the creating object, and thus can contain
+        references to global variables.
 
-        Das erste Argument ist ein Array, das die Argumente (Symbole)
-        beschreibt, die der Closure bei ihrer Auswertung durch funcall()
-        oder apply() uebergeben werden.
+        The first argument is an array describing the arguments
+        (symbols) passed to the closure upon evaluation by funcall()
+        or apply().
 
-GESCHICHTE
-        Eingefuehrt in 3.2@70.
+HISTORY
+        Introduced in 3.2@70.
 
-SIEHE AUCH
-        closures(LPC), unbound_lambda(E), apply(E), funcall(E), bind_lambda(E)
+SEE ALSO
+        closures(LPC), unbound_lambda(E), apply(E), funcall(E),
+        bind_lambda(E)
+
diff --git a/doc/efun/last_bit b/doc/efun/last_bit
index f0467c0..3936170 100644
--- a/doc/efun/last_bit
+++ b/doc/efun/last_bit
@@ -1,19 +1,21 @@
 SYNOPSIS
         int last_bit(string str)
 
-BESCHREIBUNG
-        Liefert die Nummer des letzten gesetzten Bits im Bitstring <str>.
+DESCRIPTION
+        Return the number of the last set bit in bitstring <str>.
 
-        Jedes Zeichen enthaelt 6 Bits. Also kann in jedem Zeichen ein Wert von
-        0 bis 63 gespeichert werden (2^6=64). Das erste Zeichen ist der
-        Leerschlag " " mit dem Wert 0. Das erste Zeichen im String ist jenes
-        mit den niedrigsten Bits (0-5).
+        Each character contains 6 bits. So you can store a value
+        between 0 and 63 in one character (2^6=64). Starting character
+        is the blank " " which has the value 0. The first character in
+        the string is the one with the lowest bits (0-5).
 
-BEISPIELE
+EXAMPLES
         string s;
-        s = set_bit("", 4); s = set_bit(s, 2);
-        last_bit(s) --> liefert 4
 
-SIEHE AUCH
+        s = set_bit("", 4); s = set_bit(s, 2);
+
+        last_bit(s) --> returns 4
+
+SEE ALSO
         set_bit(E), clear_bit(E), next_bit(E), test_bit(E), count_bits(E),
         and_bits(E), or_bits(E), xor_bits(E), invert_bits(E), copy_bits(E)
diff --git a/doc/efun/last_instructions b/doc/efun/last_instructions
index 2b4b2bc..13a776a 100644
--- a/doc/efun/last_instructions
+++ b/doc/efun/last_instructions
@@ -1,28 +1,30 @@
-GESCHUETZT
 SYNOPSIS
-        string * last_instructions(int lenght, int verbose)
+        string * last_instructions(int length, int verbose)
 
-BESCHREIBUNG
-        Liefert ein Array mit der "Laenge" der zuletzt ausgefuehrten
-        Anweisungen. Wenn <verbose> ungleich 0 ist (standardmaessig so),
-        werden auch Infos zur Zeilennummer angezeigt. Jeder String hat
-        folgende Form:
+DESCRIPTION
+        Returns an array showing the 'length' last executed
+        instructions in disassembled form. If 'verbose' is non-zero
+        (the default), line number information are also included.
+        Each string is built as this:
 
-            Opcode-Adresse: Opcode Operand Mnemonic (Stapeltiefe) Zeilennummer
+          Opcode-Address: Opcode Operand Mnemonic (Stackdepth) Linenumber
 
-        Die Information zur Stapeltiefe besteht aus zwei Zahlen <rel>:<abs>,
-        wobei <rel> der relative Stapelverbrauch der Funktion ist, <abs> der
-        absolute Stapelverbrauch.
+        The Stackdepth information consists of two numbers <rel>:<abs>:
+        <rel> is the relative stack usage in this function, <abs> is the
+        absolute stack usage.
 
-        Die Information zur Zeilennummer wird angefuegt, wenn das Flag gesetzt
-        ist und eine neue Zeile im Quellcode erreicht wird. Ebenso erzeugen
-        Aufrufe zwischen Objekten einen Eintrag im Resultatarray (allerdings
-        nur, wenn das verbose-Flag gesetzt ist). Dieser Eintrag hat die Form:
+        The linenumber information is appended if requested and a new
+        source line is reached. Also, calls between objects produce a
 
-            Objektname Programmname Zeilennummer.
+          Objectname Programname Linenumber
 
-        Es gibt ein vorkonfiguriertes oberes Limit, wie viele Instruktionen
-        zurueckverfolgt werden koennen.
+        entry in the resulting array (in verbose mode only).
 
-SIEHE AUCH
+        There is a preconfigured upper limit for the backtrace.
+
+HISTORY
+        Introduced in 3.2.1@34.
+        The absolute stack depth information was added in LDMud 3.2.8.
+
+SEE ALSO
         debug_message(E)
diff --git a/doc/efun/limited b/doc/efun/limited
index 1155af1..69ce32a 100644
--- a/doc/efun/limited
+++ b/doc/efun/limited
@@ -1,4 +1,3 @@
-VORLAEUFIG, GESCHUETZT
 SYNOPSIS
         #include <rtlimits.h>
 
@@ -7,50 +6,49 @@
         mixed limited(closure fun, int *limits)
         mixed limited(closure fun, int *limits, mixed *args)
 
-BESCHREIBUNG
-        limited() ruft die Funktion <fun> mit den bezeichneten Argumenten
-        <args> auf und fuehrt sie mit den gegebenen Laufzeitlimitierungen aus.
+DESCRIPTION
+        Call the function <fun> with any given <args> as parameters,
+        and execute it with the given runtime limits.
 
-        Beim Ende der Funktion <fun> werden die momentan aktiven
-        Laufzeitlimitierungen wiederhergestellt. limited() liefert den
-        Rueckgabewert der Closure <fun> zurueck.
+        After the function exits, the currently active limits are restored.
+        Result of the efun is the result of the closure call.
 
-        Die Laufzeitlimitierungen koennen in zwei Formen angegeben werden: 
-        *  als Array (wie es von query_limits() geliefert wird) oder 
-        *  als Liste von Werten mit Tags.
-        Wird limited() ohne Angabe von Limits aufgerufen, gelten die
-        Laufzeitlimiten als 'unlimitiert'.
+        The runtime limits can be given in two ways: as an array (like the
+        one returned from query_limits(), or as a list of tagged values.  If
+        the efun is used without any limit specification, all limits are
+        supposed to be 'unlimited'.
 
-        Die Limitierung kennt drei spezielle Werte aus <rtlimits.h>:
-            LIMIT_UNLIMITED:    es gibt kein Limit
-            LIMIT_KEEP:         das zuletzt gesetzte Limit wird beibehalten
-            LIMIT_DEFAULT:      die 'globalen' Limitierungen werden verwendet
+        The limit settings recognize three special values:
+            LIMIT_UNLIMITED: the limit is deactivated
+            LIMIT_KEEP:      the former setting is kept
+            LIMIT_DEFAULT:   the 'global' default setting is used.
 
-        Fuer LIMIT_COST haben folgende Spezialwerte eine Bedeutung:
-            LIMIT_UNLIMITED: die Ausfuehrung kosten lediglich einen Tick
-            LIMIT_KEEP:      LIMIT_COST wird auf 0 gesetzt
-            LIMIT_DEFAULT:   LIMIT_COST wird auf -100 gesetzt
+        For LIMIT_COST, the special values have these meaning:
+            LIMIT_UNLIMITED: at maximum 1 tick is accounted
+            LIMIT_KEEP:      LIMIT_COST is set to 0
+            LIMIT_DEFAULT:   LIMIT_COST is set to -100
 
-        limited() erzeugt eine Schutzverletzung ("limited", current_object,
+        The efun causes a privilege violation ("limited", current_object,
         fun, limits-array).
 
 
-BEISPIELE
+EXAMPLES
         limited(#'function)
-        --> fuehrt die Funktion ohne Limits aus.
+          --> executes function with no limits at all
 
         limited(#'function, ({ 200000 }), "foo")
-        --> fuehrt die Funktion mit einem Eval-Kosten-Limit von 200000 Ticks
-            aus. Die Funktion wird als 'function("foo")' aufgerufen.
+          --> executes function with an eval_cost limit of 200000, and
+              calls function as <function>("foo").
 
         limited(lambda(0, ({#'function, "foo"})), LIMIT_EVAL, 200000)
-        --> fuehrt die Funktion mit einem Eval-Kosten-Limit von 200000 Ticks
-            aus. Die Funktion wird als 'function("foo")' aufgerufen.
+          --> executes function with an eval_cost limit of 200000, and
+              calls function as <function>("foo").
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.7.
-        LDMud 3.3.563 fuehrte LIMIT_COST ein.
-        LDMud 3.5.0 fuehrte LIMIT_MEMORY ein.
+HISTORY
+        Introduced in LDMud 3.2.7.
+        LDMud 3.3.563 introduced LIMIT_COST.
+        LDMud 3.3.677 introduced LIMIT_MAPPING_KEYS, LIMIT_MAPPING_SIZE.
+        LDMud 3.5.0 introduced LIMIT_MEMORY.
 
-SIEHE AUCH
+SEE ALSO
         query_limits(E), set_limits(E)
diff --git a/doc/efun/living b/doc/efun/living
index 7434104..7f0c19a 100644
--- a/doc/efun/living
+++ b/doc/efun/living
@@ -1,13 +1,13 @@
 SYNOPSIS
         int living(object ob)
 
-BESCHREIBUNG
-        Liefert 1 zurueck, wenn <ob> ein lebendiges Objekt ("living") ist.
-        <ob> ist living, wenn enable_commands() aus <obj> heraus aufgerufen
-        wurde.  <ob> kann auch 0 sein.
+DESCRIPTION
+        Return true if ob is a living object (that is,
+        enable_commands() has been called from inside the ob).
+        ob may be 0.
 
-BEISPIELE
-        living(this_player());  -> Dies liefert (hoffentlich) 1 zuerueck.
+EXAMPLES
+        living(this_player())
 
-SIEHE AUCH
+SEE ALSO
         enable_commands(E)
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)
diff --git a/doc/efun/load_object b/doc/efun/load_object
index b2c2b21..f37fa18 100644
--- a/doc/efun/load_object
+++ b/doc/efun/load_object
@@ -1,23 +1,24 @@
 SYNOPSIS
-        object load_object(string file)
+        object load_object(string name)
 
-BESCHREIBUNG
-        Laedt und liefert das Objekt aus der Datei <file>. Wenn das Objekt
-        bereits existiert, wird es nur zurueckgeliefert.
+DESCRIPTION
+        Load the object from the file <name> (which can not be empty) and
+        return it. If the object already exists, just return it.
 
-        Diese Efun laedt nur Blueprints. Fuer Clone muss clone_object()
-        verwendet werden.
+        This efun can be used only to load blueprints - for clones, use
+        the efun clone_object().
 
-        Werden strikte EUIDs verlangt, muss das ladende Objekt eine EUID != 0
-        haben.
+        If strict euids are enforced, the cloning object must have
+        a non-zero euid.
 
-BEISPIELE
-        // Erneuere das Standard Player-Objekt
+EXAMPLES
+        // Update and reload the standard player object
         destruct(find_object("/std/player"));
         load_object("/std/player");
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6.
+HISTORY
+        Introduced in LDMud 3.2.6.
+        LDMud 3.3.716/3.4.3 requires that the <name> is not empty.
 
-SIEHE AUCH
+SEE ALSO
         clone_object(E)
diff --git a/doc/efun/localtime b/doc/efun/localtime
index cebc838..6c8128f 100644
--- a/doc/efun/localtime
+++ b/doc/efun/localtime
@@ -4,36 +4,35 @@
         int * localtime(int clock)
         int * localtime(int *uclock)
 
-BESCHREIBUNG
-        Interpretiert das Argument <clock> als Anzahl Sekunden seit dem
-        01. Januar 1970, 00:00:00, und gibt die Zeit in Lokalzeit in einer
-        sauberen Struktur zurueck. Wird <clock> nicht angegeben, wird
-        standardmaessig time() verwendet.
+DESCRIPTION
+        Interpret the argument clock as number of seconds since Jan,
+        1st, 1970, 0:00, and return the time in local time in a nice structure.
+        if <clock> is not specified, time() is used as default.
 
-        Alternativ kann auch ein Array von zwei Zahlen als Argument angegeben
-        werden. Das erste Element wird interpretiert wie <clock>, das zweite
-        Argument enthaelt die vergangenen Mikrosekunden in dieser Sekunde und
-        wird ignoriert.
+        Alternatively, accept an array of two ints: the first is <clock>
+        value as in the first form, the second int is the number of
+        microseconds elapsed in the current second, which is ignored.
 
-        Das Resultat ist ein Array mit folgenden Elementen:
+        The result is an array of integers:
 
-            int TM_SEC    (0):  Sekunde in der Minute (0..59)
-            int TM_MIN    (1):  Minute in der Stunde (0..59)
-            int TM_HOUR   (2):  Stunde des Tages (0..23)
-            int TM_MDAY   (3):  Tag im Monat (1..31)
-            int TM_MON    (4):  Monat des Jahres (0..11)
-            int TM_YEAR   (5):  Jahr (z.B. 2001)
-            int TM_WDAY   (6):  Wochentag (0..6, Sonntag = 0)
-            int TM_YDAY   (7):  Tag im Jahr (0..365)
-            inz TM_ISDST  (8):  TRUE: Daylight Saving Time
+          int TM_SEC   (0) : Seconds (0..59)
+          int TM_MIN   (1) : Minutes (0..59)
+          int TM_HOUR  (2) : Hours (0..23)
+          int TM_MDAY  (3) : Day of the month (1..31)
+          int TM_MON   (4) : Month of the year (0..11)
+          int TM_YEAR  (5) : Year (e.g.  2001)
+          int TM_WDAY  (6) : Day of the week (Sunday = 0)
+          int TM_YDAY  (7) : Day of the year (0..365)
+          int TM_ISDST (8) : TRUE: Daylight saving time
 
-BEISPIELE
-        printf("Heute ist %s\n", ({ "Sonntag", "Montag", "Dienstag",
-            "Mittwoch", "Donnerstag", "Freitag", "Samstag"})
-            [localtime()[TM_WDAY]]);
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
+EXAMPLES
+        printf("Today is %s\n",
+               ({ "Sunday", "Monday", "Tuesday", "Wednesday",
+                  "Thursday", "Friday", "Saturday" })[localtime()[TM_WDAY]]);
 
-SIEHE AUCH
+HISTORY
+        Introduced in LDMud 3.2.9.
+
+SEE ALSO
         ctime(E), gmtime(E), time(E), utime(E)
diff --git a/doc/efun/log b/doc/efun/log
index fc8c7eb..d6ee8a6 100644
--- a/doc/efun/log
+++ b/doc/efun/log
@@ -1,11 +1,11 @@
 SYNOPSIS
         float log(int|float arg)
 
-BESCHREIBUNG
-        Liefert den natuerlichen Logarithmus von <arg>.
+DESCRIPTION
+        Returns the natural logarithm of its argument.
 
-GESCHICHTE
-        LDMud 3.2.9 fuehrte Integers als Argumente ein.
+HISTORY
+        LDMud 3.2.9 added integers as arguments.
 
-SIEHE AUCH
+SEE ALSO
         exp(E), pow(E)
diff --git a/doc/efun/lower_case b/doc/efun/lower_case
index 1dcde99..8dfe460 100644
--- a/doc/efun/lower_case
+++ b/doc/efun/lower_case
@@ -1,12 +1,12 @@
 SYNOPSIS
         string lower_case(string str)
 
-BESCHREIBUNG
-        Konvertiert alle Zeichen in <str> in Kleinbuchstaben und liefert den
-        neuen String.
+DESCRIPTION
+        Convert all characters in str to lower case, and return the
+        new string.
 
-BEISPIELE
-        lower_case("Hallo WeLT!") -> "hallo welt!"
+EXAMPLES
+        lower_case("Heya!") -> "heya!"
 
-SIEHE AUCH
+SEE ALSO
         capitalize(E), upper_case(E)
diff --git a/doc/efun/lpctypep b/doc/efun/lpctypep
new file mode 100644
index 0000000..2f52135
--- /dev/null
+++ b/doc/efun/lpctypep
@@ -0,0 +1,13 @@
+SYNOPSIS
+        int lpctypep(mixed arg)
+
+DESCRIPTION
+        Returns 1 if the argument is an LPC type.
+
+HISTORY
+        Introduced in LDMud 3.6.7.
+
+SEE ALSO
+        bytesp(E), clonep(E), closurep(E), coroutinep(E), floatp(E), intp(E),
+        lwobjectp(E), mappingp(E), objectp(E), pointerp(E), referencep(E),
+        stringp(E), structp(E), symbolp(E)
diff --git a/doc/efun/lwobjectp b/doc/efun/lwobjectp
index f6b4b33..a2f4260 100644
--- a/doc/efun/lwobjectp
+++ b/doc/efun/lwobjectp
@@ -5,6 +5,6 @@
         Return 1 if arg is a lightweight object.
 
 SEE ALSO
-        bytesp(E), clonep(E), closurep(E), floatp(E), intp(E), mappingp(E),
-        objectp(E), pointerp(E), referencep(E), stringp(E), structp(E),
-        symbolp(E)
+        bytesp(E), clonep(E), closurep(E), coroutinep(E), floatp(E), intp(E),
+        lpctypep(E), mappingp(E), objectp(E), pointerp(E), referencep(E),
+        stringp(E), structp(E), symbolp(E)
diff --git a/doc/efun/m_add b/doc/efun/m_add
index e7e34d1..60a4362 100644
--- a/doc/efun/m_add
+++ b/doc/efun/m_add
@@ -1,22 +1,21 @@
 SYNOPSIS
-        mapping m_add(mapping map, mixed key, [mixed data, ...])
+        mapping m_add(mapping map, mixed key, [mixed data...])
 
-BESCHREIBUNG
-        Fuegt einen neuen Eintrag mit Index <key> zum Mapping <map> hinzu
-        oder ersetzt diesen. Das veraenderte Mapping wird auch als Ergebnis
-        zurueckgeliefert.
+DESCRIPTION
+        Add (or replace) an entry with index <key> in mapping <map>.
+        The modified mapping is also returned as result.
 
-        Die zugehoerigen Werte fuer diesen Eintrag werden aus den weiteren
-        Parametern entnommen. Fehlende Parameter werden als 0 interpretiert,
-        ueberzaehlige Parameter werden ignoriert.
+        The values for the entry are taken from the <data> arguments.
+        Unassigned entry values default to 0, extraneous <data> arguments
+        are ignored.
 
-        Der Unterschied zwischen m_add() und dem '+='-Operator besteht darin,
-        dass fuer letzterem gegebenenfalls erst ein temporaeres Mapping,
-        welches die hinzuzufuegenden Eintraege enthaelt, erstellt werden
-        muesste, wogegen m_add() ohne ein solches auskommt.
+        The difference between m_add() and the operator += is that for
+        the latter you might need to create a temporary mapping that
+        contains the entries to add, which m_add() doesn't.
 
-BEISPIELE
+EXAMPLES
         mapping m;
+
         m = ([ "foo" ]);
         m_add(m, "bar", 1) --> ([ "foo", "bar" ])
 
@@ -25,13 +24,12 @@
 
         m = ([ "foo":1;2 ]);
         m_add(m, "bar", 1) --> ([ "foo":1;2, "bar":1;0 ])
+        m_add(m, "baz", ({ 4, 5 })... )
+          --> ([ "foo":1;2, "bar":1;0, "baz":4;5 ])
 
-        apply(#'m_add, m, "baz", ({ 4, 5 }))
-        --> ([ "foo":1;2, "bar":1;0, "baz":4;5 ])
+HISTORY
+        Introduced in LDMud 3.2.9.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
-
-SIEHE AUCH
+SEE ALSO
         mappingp(E), mkmapping(E), m_delete(E), m_entry(E), m_indices(E),
         m_values(E), sizeof(E), widthof(E)
diff --git a/doc/efun/m_allocate b/doc/efun/m_allocate
index 255f3b9..7c75530 100644
--- a/doc/efun/m_allocate
+++ b/doc/efun/m_allocate
@@ -2,45 +2,45 @@
         mapping m_allocate(int size)
         mapping m_allocate(int size, int width)
 
-BESCHREIBUNG
-        Die Funktion reserviert Speicher fuer ein Mapping. <size> ist die
-        Anzahl Eintraege (d.h. die Anzahl Keys), <width> ist die Anzahl
-        Dateneintraege pro Key. Wird <width> nicht angegeben, werden Keys
-        mit einem Datenelement erzeugt.
+DESCRIPTION
+        Reserve memory for a mapping.
 
-        Die Funktion ist nur sinnvoll, wenn man ein Mapping erzeugt, dessen
-        ungefaehre Groesse von vornherein bekannt ist, um so den Overhead
-        von wiederholten Speicherallokation zu minimieren. Wenn nicht alle
-        allozierten Datenelemente mit Daten bestueckt werden, werden die
-        Ueberbleibsel einige Zeit spaeter bei Gelegenheit wieder freigegeben
-        (s. Bemerkungen).
-        m_allocate() ist auch nuetzlich, wenn ein Mapping bestimmter Breite
-        erzeugt werden soll, ohne bereits die Daten zu den Keys bereit zu
-        stellen.
+        <size> is the number of entries (i.e. keys) to reserve, <width> is
+        the number of data items per entry. If the optional width is
+        omitted, 1 is used as default.
 
-        Wenn bloss ein leeres Mapping bestimmter Breite erzeugt werden soll,
-        so kann folgende Notation verwendet werden:
+        This is useful only when you are going to construct a mapping
+        whose approximate size you know beforehand, to save overhead on
+        repeated memory allocations. If you don't fill in data for all the
+        allocated elements, any leftovers will be eventually freed some time
+        later (see remark below).
+        It is also useful if you want the mapping to have a certain width
+        even if you don't provide all the data items for the keys yet.
 
-        ([ ]) : erzeugt ein leeres Mapping mit Breite 1.
-        ([:<width>]) : erzeugt ein leeres Mapping der Breite <width>,
-            wobei <width> eine beliebige Anweisung sein kann, die eine
-            Integerzahl zurueck liefert. Tatsaechlich wird diese Notation
-            als 'm_allocate(0, <width>)' kompiliert.
+        If the goal is just to create an empty mapping with a certain
+        width, the following notations can be used:
 
-BEISPIELE
-        m_allocate(3,7) -> erzeugt ein Mapping mit 7 Werten pro Key und Platz
-           fuer 3 Eintraege.
-       ([:2*3]) -> entspricht m_allocate(0,6).
+        ([ ]) : creates an empty mapping of width 1.
 
-BEMERKUNGEN
-        Ungenutzer Speicher des allozierten Mappins wird waehrend des sog.
-        Kompaktierens des Mappings freigegeben. Dies passiert waehrend eines
-        "data cleanups" oder einer "garbage collection". Die Zeit zwischen
-        "data cleanups" ist mit configure_driver() konfigurierbar.
+        ([:width ]) : creates an empty mapping the given <width>, where
+            <width> can be any expression yielding an integer result. In
+            fact this notation is compiled as 'm_allocate(0, width)' .
 
-GESCHICHTE
-        Umbenannt von allocate_mapping() in LDMud 3.2.6.
-        Die ([:<width>]) Notation wurde in 3.2.9 eingefuehrt.
+EXAMPLES
+        m_allocate(3, 7) -> mapping with 7 values per key, and with space
+        for 3 entries.
 
-SIEHE AUCH
+        ([:2*3 ]) -> same as m_allocate(0, 6)
+
+REMARKS
+        Unused memory in the allocated mapping will be freed during the
+        so-called compacting of the mapping. This is done during the
+        data-cleanup or the garbage collection. The time between
+        data-cleanups is configurable by configure_driver().
+
+HISTORY
+        Renamed from 'allocate_mapping' in LDMud 3.2.6.
+        The ([:width ]) notation was introduced in LDMud 3.2.9 / 3.3.208.
+
+SEE ALSO
         mappings(LPC), walk_mapping(E), get_type_info(E), m_reallocate(E)
diff --git a/doc/efun/m_contains b/doc/efun/m_contains
index d0b1e54..5b87acd 100644
--- a/doc/efun/m_contains
+++ b/doc/efun/m_contains
@@ -1,18 +1,16 @@
 SYNOPSIS
-        int m_contains(mixed &data1, ... , &dataN, mapping map, mixed key)
+        int m_contains(mixed &data1, ..., &dataN, map, key)
 
-BESCHREIBUNG
-        Wenn <map> den Key <key> enthaelt, werden die entsprechenden Werte
-        den Datenargumenten von <key> zugeordnet, welche per Referenz
-        uebergeben werden muessen. m_contains liefert in diesem Fall 1 zurueck.
-        Wenn <key> nicht in <map> enthalten ist, liefert die Funktion 0
-        zurueck und die Datenargumente bleiben unveraendert.
+DESCRIPTION
+        If the mapping contains the key map, the corresponding values
+        are assigned to the data arguments, which must be passed by
+        reference, and 1 is returned. If key is not in map, 0 is
+        returned and the data args are left unchanged.
+        It is possible to use this function for a 0-value mapping, in
+        which case it has the same effect as member(E).
 
-        Man kann diese Funktion auch fuer 0-Wert Mappings verwenden, wobei
-        sie den gleichen Effekt wie member(E) hat.
+HISTORY
+        Renamed from 'mapping_contains()' in LDMud 3.2.6.
 
-GESCHICHTE
-        Umbenannt von 'mapping_contains' in LDMud 3.2.6.
-
-SIEHE AUCH
+SEE ALSO
         m_entry(E), mappings(LPC), member(E)
diff --git a/doc/efun/m_delete b/doc/efun/m_delete
index bb9d453..37a3a47 100644
--- a/doc/efun/m_delete
+++ b/doc/efun/m_delete
@@ -1,11 +1,12 @@
 SYNOPSIS
         mapping m_delete(mapping map, mixed key)
 
-BESCHREIBUNG
-        Loescht den Eintrag mit dem Index <key> aus dem Mapping <map> und
-        liefert das veraenderte Mapping zurueck. Wenn <map> keinen Eintag
-        mit dem Index <key> enthaelt, wird nichts veraendert.
+DESCRIPTION
+        Remove the entry with index 'key' from mapping 'map'. The
+        changed mapping 'map' is also returned as result.
+        If the mapping does not have an entry with index 'key',
+        nothing is changed.
 
-SIEHE AUCH
+SEE ALSO
         mappingp(E), mkmapping(E), m_add(E), m_indices(E), m_values(E),
         sizeof(E), widthof(E)
diff --git a/doc/efun/m_entry b/doc/efun/m_entry
index 955dedf..17def93 100644
--- a/doc/efun/m_entry
+++ b/doc/efun/m_entry
@@ -1,24 +1,23 @@
 SYNOPSIS
         mixed * m_entry(mapping map, mixed key)
 
-BESCHREIBUNG
-        Durchsucht das Mapping <map> nach dem Eintrag mit Index <key> und
-        liefert alle Werte von <key> in einem Array zurueck.
+DESCRIPTION
+        Query the mapping <map> for the entry for <key> and return all
+        its values in one array.
 
-        Wenn <map> keinen Eintrag mit Index <key> enthaelt, liefert
-        m_entry() 0.
+        If <map> does not contain <key>, 0 is returned.
 
-BEISPIELE
-        mapping m = ([1:"bla";-1, 2:"fasel";-2 ])
+        Note: the efun m_add() can be used to add all values for an entry
+        at once.
+
+EXAMPLES
+        mapping m = ([ 1:"foo";-1, 2:"bar";-2 ]);
+
         m_entry(m, 0) -> 0
-        m_entry(m, 1) -> ({"bla", -1})
+        m_entry(m, 1) -> ({ "foo", -1 })
 
-ANMERKUNGEN
-        Mit der Efun m_add() koennen alle Werte eines Eintrages auf einmal
-        addiert werden.
+HISTORY
+        Introduced in LDMud 3.2.10.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.10.
-
-SIEHE AUCH
+SEE ALSO
         m_add(E), m_contains(E), mappings(LPC), member(E)
diff --git a/doc/efun/m_indices b/doc/efun/m_indices
index b80f32c..7df25b2 100644
--- a/doc/efun/m_indices
+++ b/doc/efun/m_indices
@@ -1,9 +1,9 @@
 SYNOPSIS
         mixed * m_indices(mapping map)
 
-BESCHREIBUNG
-        Liefert ein Array mit den Indizes von <map>.
+DESCRIPTION
+        Returns an array containing the indices of mapping 'map'.
 
-SIEHE AUCH
-        mappingp(E), mkmapping(E), m_add(E), m_values(E), m_delete(E),
+SEE ALSO
+        mappingp(E), mkmapping(E), m_values(E), m_add(E), m_delete(E),
         sizeof(E), widthof(E), unmkmapping(E)
diff --git a/doc/efun/m_reallocate b/doc/efun/m_reallocate
index 550e12b..c129e3f 100644
--- a/doc/efun/m_reallocate
+++ b/doc/efun/m_reallocate
@@ -1,23 +1,22 @@
 SYNOPSIS
         mapping m_reallocate(mapping m, int width)
 
-BESCHREIBUNG
-        Erzeugt ein neues Mapping mit <width> Werten pro Key und fuellt das
-        Mapping mit den Werten aus <m>. Wenn <m> weniger als <width> Werte
-        pro Key hat, werden im neuen Mapping die restlichen Werte auf 0
-        gesetzt. Wenn <m> mehr als <width> Werte pro Key hat, werden die
-        ueberzaehligen Werte ignoriert.
+DESCRIPTION
+        Create a new mapping with <width> values per key and fill it
+        with the values from mapping <m>. If <m> has less than <width>
+        values per key, the extra values in the result are set to 0.
+        If <m> has more values per key, the extra values are ignored.
 
-        Das urspruengliche Mapping <m> wird nicht veraendert.
+        The mapping <m> is not changed.
 
-BEISPIELE
+EXAMPLES
         mapping m = ([ "foo":1;2;3, "bar":4;5;6 ])
 
-        m_reallocate(m, 1) --> liefert ([ "foo":1,       "bar:4 ])
-        m_reallocate(m, 4) --> liefert ([ "foo":1;2;3;0, "bar:4;5;6;0 ])
+        m_reallocate(m, 1) --> returns ([ "foo":1,       "bar:4 ])
+        m_reallocate(m, 4) --> returns ([ "foo":1;2;3;0, "bar:4;5;6;0 ])
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6, auf Vorschlag von Tubmud.
+HISTORY
+        Introduced in LDMud 3.2.6, suggested by Tubmud.
 
-SIEHE AUCH
+SEE ALSO
         m_allocate(E), m_values(E), widthof(E)
diff --git a/doc/efun/m_values b/doc/efun/m_values
index 153aef1..2d20f86 100644
--- a/doc/efun/m_values
+++ b/doc/efun/m_values
@@ -2,23 +2,23 @@
         mixed * m_values(mapping map)
         mixed * m_values(mapping map, int index)
 
-BESCHREIBUNG
-        Liefert ein Array mit den Werten des Mappings <map>. Wenn <index>
-        angegeben ist, liefert m_values() die Werte der entsprechenden Spalte,
-        sonst die Werte der ersten Spalte.
+DESCRIPTION
+        Returns an array with the values of mapping 'map'.
+        If <index> is given as a number between 0 and the width of
+        the mapping, the values from the given column are returned,
+        else the values of the first column.
 
-BEISPIELE
-        mapping m = ([ "bla":1;2;3 , "fasel":4;5;6 , "schnack":7;8;9 ]);
-        m_values(m)    -> liefert ({ 1 , 4 , 7 }) (u.U. permutiert)
-        m_values(m, 0) -> liefert ({ 1 , 4 , 7 }) (ditto)
-        m_values(m, 1) -> liefert ({ 2 , 5 , 8 }) (ditto)
+EXAMPLES
+        mapping m = ([ "foo":1;2;3, "bar":4;5;6, "baz":7;8;9 ])
+        m_values(m)     --> returns ({ 1, 4, 7 }) or some permutation thereof
+        m_values(m, 0)  --> returns ({ 1, 4, 7 }) (ditto)
+        m_values(m, 1)  --> returns ({ 2, 8, 9 }) (ditto)
 
-        Die genaue Reihenfolge der Werte im Ergebnisarray ist nicht
-        vorhersagbar, und kann sich mit jeder Aenderung am Mapping aendern.
-        Garantiert ist lediglich, dass die Ergebnisse von m_indices() und
-        m_values(), wenn sie zur selben Zeit bestimmt werden, dieselbe
-        Reihenfolge aufweisen.
+        Note that exact order of the values in the resulting arrays is not
+        specified, and may vary after any change to the mapping. The only
+        guarantee given is that if m_indices() and m_values() are taken at the
+        same time, the order of both results is identical.
 
-SIEHE AUCH
-        mappingp(E), mkmapping(E), m_add(E), m_indices(E), m_delete(E),
-        sizeof(E), widthof(E), unmkmapping(E)
+SEE ALSO
+        mappingp(E), mkmapping(E), m_indices(E), m_add(E), m_delete(E),
+        sizeof(E), widthof(E), unmkmapping(E).
diff --git a/doc/efun/make_shared_string b/doc/efun/make_shared_string
index b39c6f6..5236737 100644
--- a/doc/efun/make_shared_string
+++ b/doc/efun/make_shared_string
@@ -1,25 +1,19 @@
-VERALTET
+DEPRECATED
 SYNOPSIS
         string make_shared_string(string str)
         bytes make_shared_string(bytes str)
 
-BESCHREIBUNG
-        Fuegt <str> in die Tabelle der gemeinsam verwendeten String des Spiels
-        ein.
+DESCRIPTION
+        Puts <str> in the table of shared strings of the game.
 
-        Wenn ein String von mehreren Variablen / Objekten verwendet wird,
-        spart dies Speicher. Keys von Alists und Mappings sind immer gemeinsam
-        verwendete Strings.
+        If the string is used by several variables/objects this
+        saves memory. Keys of alists and mappings are always shared
+        strings.
 
-        In LDMud 3.3 ist diese Funktion nicht laenger nuetzlich: Strings
-        werden sowieso so weit wie moeglich gemeinsam verwendet, und der
-        Driver wandelt untablierte Strings nach einiger Zeit automatisch in
-        tablierte Strings um um
+        In LDMud 3.3, this function is no longer necessary: strings
+        are shared as much as possible anyway, and the driver automatically
+        converts untabled strings into tabled strings after some time.
 
-FEHLER
-        Ein besseres Stringhandling im Driver sollte diese Efun ueberfluessig
-        machen.
-
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6, auf Vorschlag von Tubmud.
-        Veraltet seit LDMud 3.3.
+HISTORY
+        Introduced in LDMud 3.2.6; following a suggestion from Tubmud.
+        Deprecated in LDMud 3.3.531.
diff --git a/doc/efun/map b/doc/efun/map
index 808f065..5c6c47d 100644
--- a/doc/efun/map
+++ b/doc/efun/map
@@ -7,87 +7,92 @@
         mixed * map(struct arg, closure cl, mixed extra...)
         mixed * map(struct arg, mapping m [, int idx])
 
-        mapping map(mapping arg, string func, string|object ob, mixed extra...)
+        mapping map(mapping arg, string func, string|object ob
+                                            , mixed extra...)
         mapping map(mapping arg, closure cl, mixed extra...)
 
         string map(string arg, string func, string|object ob, mixed extra...)
         string map(string arg, closure cl, mixed extra...)
         string map(string arg, mapping m [, int idx])
 
-BESCHREIBUNG
-        Ruft die Funktion <ob>-><func>() bzw. die Closure <cl> fuer jedes
-        Element des Strings, Arrays, Mappings oder der Struktur <arg> auf
-        und liefert ein Resultat, das aus den verschiedenen Rueckgabewerten
-        erstellt wurde.
+DESCRIPTION
+        Call the function <ob>-><func>() resp. the closure <cl> for every
+        element of the string, array, struct or mapping <arg>, and return a
+        result made up from the returned values.
 
-        Wurde <ob> nicht angegeben, oder ist es weder ein String noch ein
-        Objekt, wird stattdessen this_object() verwendet.
+        If <ob> is omitted, or neither a string nor an object, it
+        defaults to this_object().
 
-        Ist <arg> ein Array, ein String oder eine Struktur, wird die Funktion
-        mit jedem Element des Arrays als erstem Parameter aufgerufen, gefolgt
-        von den <extra> Argumenten. Das Resultat der Efun ist ein Array, das
-        die Rueckgabewerte der Funktionsaufrufe enthaelt. Man koennte die
-        Operation map() deshalb umschreiben als:
+        If <arg> is an string, array or struct, the function will be called
+        with each of the array/struct elements as first parameter, followed
+        by the <extra> arguments. The result of the efun is an array/struct
+        with all the results returned from the function calls. Thus the
+        operation could be described as:
 
-            foreach(index) result[index] = ob->func(arg[index], extra...)
+          foreach(index) result[index] = ob->func(arg[index], extra...)
 
-        Ist <arg> ein Array, ein String oder eine Struktur, und wurde statt
-        einer Funktion ein Mapping angegeben, so liefert map() ein Array mit
-        den Werten, die im Mapping an Stelle der urspruenglichen Werte stehen,
-        bzw. mit den Originalwerten, wenn fuer sie kein Mappingeintrag
-        existiert. Ist <idx> angegeben, so wird die entsprechende Spalte des
-        Mappings verwendet. Mit anderen Worten:
+        If <arg> is an string/array/struct, and a mapping is specified
+        instead of a function, the result is an array/struct with the
+        values found in the mapping for the original values, resp. with the
+        original values for which no mapping entry exists. If a column index
+        <idx> is given, that column of the mapping is used. In other words:
 
-            foreach(index)
-                if (arg[index] ist ein Key in <arg>)
-                    result[index] = map[arg[index]] oder map[arg[index]]
-                else
-                    result[index] = arg[index]
+          foreach(index)
+             if (arg[index] exists as key in map)
+                 result[index] = map[arg[index]] or map[arg[index], idx]
+             else
+                 result[index] = arg[index]
 
-        Ist <arg> ein Mapping, wird die Funktion fuer jeden Key des Mappings
-        als erstem Parameter und den Datenwerten (sofern vorhanden) als
-        zusaetzliche Argumente aufgerufen, gefolgt von den <extra> Argumenten.
-        Die <extra> Argumente duerfen keine geschuetzten Referenzen enthalten
-        (wie z.B. &(i[0])). Das Ergebnis der Efun ist ein Mapping, das die
-        Resultate der Funktionsaufrufe als Zuordnung zum jeweiligen Key
-        enthaelt.
+        If <arg> is a string, the only allowed replacement values are
+        numbers, of which only the lower 8 bit will be considered.
 
-        Abhaengig von der Breite des Mappings <arg>, kann die Operation
-        umschrieben werden als:
 
-            foreach (key in arg)
-                switch (widthof(arg))
-                case 0:
-                    result[key] = ob->func(key, 0, extra...)
-                case 1:
-                    result[key] = ob->func(key, arg[key], extra...)
-                else  :
-                    result[key] = ob->func( key
-                                        , ({ arg[key,0] ...arg[key,width-1] })
-                                        , extra...)
+        If <arg> is a mapping, the function will be called with
+        each of the mapping keys as first, and (if existing) the
+        associated values as second parameter, followed by the <extra>
+        arguments (these must not be protected references like &(i[0]). The
+        result of the efun is a mapping of all results of the function calls,
+        stored under their corresponding key.
 
-        Der Vorteil dieses Ansatzes ist, dass beide Arten von mehrdimensionalen
-        Mappings (Mappings mit mehreren Werten pro Key und Mappings von Arrays)
-        gleich behandelt werden koennen.
+        Depending on the width of the mapping <arg>, the operation can
+        be described as:
 
-BEISPIELE
+          foreach (key in arg)
+            switch (widthof(arg))
+            case 0:
+              result[key] = ob->func(key, 0, extra...)
+            case 1:
+              result[key] = ob->func(key, arg[key], extra...)
+            else  :
+              result[key] = ob->func( key
+                                    , ({ arg[key,0] ...arg[key,width-1] })
+                                    , extra...)
+
+        The advantage of this approach is that the two types of
+        multi-dimensional mappings (mappings with multiple values
+        per key, and mappings of arrays) can be treated in the same way.
+
+        Note however that the resulting mapping always has one value
+        per key.
+
+        Historical Note: map() used with arrays behaves like map_array(),
+        but used with mappings generalises map_indices()!
+
+
+EXAMPLES
         arr = ({ 1, 2, 3, 4 });
         m = ([ 1:-1, 3:-3 ]);
 
-        map(arr, #'%, 2)  --> liefert ({ 1, 0, 1, 0 })
-        map(arr, m)       --> liefert ([ -1, 2, -3, 4 })
+        map(arr, #'%, 2)  --> returns ({ 1, 0, 1, 0 })
+        map(arr, m)       --> returns ({ -1, 2, -3, 4 })
 
-ANMERKUNGEN
-        map() auf Arrays angewandt verhaelt sich wie map_array(), auf Mappings
-        angewandt hingegen verhaelt es sich wie eine Verallgemeinerung von
-        map_indices().
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6, loest map_array() ab.
-        LDMud 3.2.8 fuehrt neu die Moeglichkeit ein, ein Array durch ein
-        Mapping zu mappen.
-        LDMud 3.3.439 fuehrt map() fuer Strings ein.
-        LDMud 3.3.719 fuehrt den <idx>-Parameter fuer mappen mit Mappings ein.
+HISTORY
+        Introduced in LDMud 3.2.6, obsoletes map_array().
+        LDMud 3.2.8 added the feature of mapping an array through a mapping.
+        LDMud 3.3.439 added mapping of strings.
+        LDMud 3.3.719 added the <idx> parameter for mapping through mappings.
 
-SIEHE AUCH
+SEE ALSO
         filter(E), filter_indices(E), map_indices(E), map_objects(E)
+
diff --git a/doc/efun/map_indices b/doc/efun/map_indices
index 7aacc04..fe96419 100644
--- a/doc/efun/map_indices
+++ b/doc/efun/map_indices
@@ -1,33 +1,31 @@
-VERALTET
 SYNOPSIS
-        mapping map_indices(mapping m, string fun, string|object ob,
-                                                     mixed extra, ...)
-        mapping map_indices(mapping m, closure cl, mixed extra, ...)
+        mapping map_indices(mapping m, string func, string|object ob, ...)
+        mapping map_indices(mapping m, closure cl, ...)
 
-BESCHREIBUNG
-        Fuer jedes Element des Mappings wird ob->func() bzw. die Closure <cl>
-        aufgerufen. Dabei wird zuerst der Key des Mappings, dann das
-        Datenelement und schliesslich die <extra> Argumente uebergeben.
-        Die <extra> Argumente duerfen keine geschuetzten Referenzen wie z.B.
-        &(i[0]) enthaelten. Der Dateneintrag im Mapping wird durch den
-        Rueckgabewert der Funktion ersetzt. <ob> kann auch der Dateiname
-        eines Objektes sein.
+DESCRIPTION
+        ob->func() is called resp. cl applied to every element in the mapping,
+        with the key of the element as first argument, and then the extra args
+        that were given to map_indices (these args must not be protected
+        references like &(i[0])).  The data item in the mapping is replaced by
+        the return value of the function. ob can also be a file_name of an
+        object.
 
-        Wird <ob> nicht angegeben oder weder ein String noch ein Objekt,
-        wird standardmaessig this_object() verwendet.
+        If <ob> is omitted, or neither a string nor an object, it
+        defaults to this_object().
 
-        Verfuegt das Mapping ueber mehr als ein Datenelement pro Key, so
-        wird nur das erste Element beachtet, alle andern Datenelemente
-        werden ignoriert. Das Verhalten von map_indices() unterscheidet sich
-        also vom Verhalten von map_array().
+        Note that if mapping m has more than one value per key, these
+        are ignored: the resulting mapping always has one value per key.
 
-BEISPIELE
+        Also note that the behaviour of this function is different from
+        map(<array>).
+
+EXAMPLES
         m = mkmapping(users());
-        m = map_indices(m, #'envrionment);
+        m = map_indices(m, #'environment);
 
-GESCHICHTE
-        In LDMud 3.2.6 umbenannt von map_mapping() und durch map() ergaenzt.
+HISTORY
+        In LDMud 3.2.6 renamed from map_mapping() and complemented by map().
 
-SIEHE AUCH
+SEE ALSO
         map(E), filter(E), filter_indices(E), walk_mapping(E), member(E),
         m_contains(E)
diff --git a/doc/efun/map_objects b/doc/efun/map_objects
index 75952c1..fc3149c 100644
--- a/doc/efun/map_objects
+++ b/doc/efun/map_objects
@@ -3,15 +3,14 @@
         mixed * map_objects(lwobject *arr, string fun, mixed extra, ...)
         mixed * map_objects(string   *arr, string fun, mixed extra, ...)
 
-BESCHREIBUNG
-        map_objects() verhaelt sich aehnlich wie map(), ruft jedoch
-        arr[n]->fun(extra, ...) auf. Der Rueckgabewert ersetzt das Objekt bzw.
-        den Objektnamen in <arr>.
+DESCRIPTION
+        Similar to map(), but calls arr[n]->fun(extra,...). The returned value
+        replaces the object/string in returned array.
+        <arr> may contain a mixture of regular and lightweight objects and
+        object names as well.
 
-        <arr> kann auch eine Mischung aus normalen und leichtgewichtigen
-        Objekten und Objektnamen enthalten. Es ist eine beliebige Anzahl
-        <extra> Argumente erlaubt, welche alle an die Funktion <fun>
-        uebergeben werden. 0-Eintraege in <arr> werden ignoriert.
+        Any number of extra arguments is allowed, which are all
+        passed. 0-entries in arr are ignored.
 
-SIEHE AUCH
+SEE ALSO
         map(E), filter(E), filter_objects(E)
diff --git a/doc/efun/mappingp b/doc/efun/mappingp
index 5ab4ed2..2442038 100644
--- a/doc/efun/mappingp
+++ b/doc/efun/mappingp
@@ -1,10 +1,12 @@
 SYNOPSIS
         int mappingp(mixed arg)
 
-BESCHREIBUNG
-        Liefert 1, wenn das Argument ein Mapping ist, ansonsten 0.
+DESCRIPTION
+        Returns 1 if the argument is a mapping, or 0 if it is not.
 
-SIEHE AUCH
-        intp(E), stringp(E), bytesp(E), objectp(E), pointerp(E),
-        mkmapping(E), m_indices(E), m_values(E), m_delete(E),
-        sizeof(E), widthof(E).
+SEE ALSO
+        mkmapping(E), m_indices(E), m_values(E), m_add(E), m_delete(E),
+        sizeof(E), widthof(E), bytesp(E), clonep(E), closurep(E),
+        coroutinep(E), floatp(E), intp(E), lpctypep(E), lwobjectp(E),
+        objectp(E), pointerp(E), referencep(E), stringp(E), structp(E),
+        symbolp(E)
diff --git a/doc/efun/master b/doc/efun/master
index aa14001..afd3db9 100644
--- a/doc/efun/master
+++ b/doc/efun/master
@@ -2,16 +2,15 @@
         object master()
         object master(int dont_load)
 
-BESCHREIBUNG
-        Die Funktion liefert das Masterobjekt.
+DESCRIPTION
+        Returns the master object.
+        
+        If <dont_load> is false, the function first makes sure that
+        the master object exists.
+        If <dont_load> is true, the function just returns the current
+        master object, or 0 if the current master has been destructed.
 
-        Wenn <dont_load> nicht wahr ist, stellt master() zuerst sicher, dass
-        das Masterobjekt auf existiert. Wenn <dont_load> wahr ist, liefert
-        master() nur das Masterobjekt oder 0, falls das aktuelle Masterobjekt
-        zerstoert wurde.
-
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.10.
-
-SIEHE AUCH
+HISTORY
+        Introduced in LDMud 3.2.10.
+SEE ALSO
         master(M)
diff --git a/doc/efun/match_command b/doc/efun/match_command
index cd495d7..2e3cac3 100644
--- a/doc/efun/match_command
+++ b/doc/efun/match_command
@@ -1,7 +1,7 @@
 SYNOPSIS
-        #include <sys/commands.h>
+        #include <commands.h>
 
-        mixed * match_command (string command, object origin)
+        mixed * match_command(string command, object origin)
 
 DESCRIPTION
         Take the command <command>, parse it, and return an array of all
diff --git a/doc/efun/max b/doc/efun/max
index bd4f870..c91d73e 100644
--- a/doc/efun/max
+++ b/doc/efun/max
@@ -1,23 +1,23 @@
 SYNOPSIS
         string|bytes max(string|bytes arg, ...)
-        string|bytes max(string|bytes *arg)
+        string|bytes max(string|bytes *arg_array)
 
         int|float    max(int|float arg, ...)
-        int|float    max(int|float *arg)
+        int|float    max(int|float *arg_array)
 
-BESCHREIBUNG
-        Die Funktion liefert den groessten Wert aller <arg> und liefert ihn
-        zurueck. Wird max() nur mit einem Array aufgerufen wird (das nicht
-        leer sein darf), liefert die Funktion das groesste Element aus <arg>.
+DESCRIPTION
+        Determaxe the maximum value of the <arg>uments and return it.
+        If max() is called with an array (which must not be empty) as only
+        argument, it returns the maximum value of the array contents.
 
-BEISPIELE
-        max(1)                     - liefert 1
-        max(1, 1.1)                - liefert 1.1
-        max("foo", "bar")          - liefert "foo"
-        max( ({ "foo", "bar" }) )  - liefert "foo"
+EXAMPLES
+        max(1)                     - returns 1
+        max(1, 1.1)                - returns 1.1
+        max("foo", "bar")          - returns "foo"
+        max( ({ "foo", "bar" }) )  - returns "foo"
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
+HISTORY
+        Introduced in LDMud 3.2.9.
 
-SIEHE AUCH
+SEE ALSO
         min(E)
diff --git a/doc/efun/md5 b/doc/efun/md5
index a559767..745bf87 100644
--- a/doc/efun/md5
+++ b/doc/efun/md5
@@ -1,38 +1,35 @@
-VERALTET
+OBSOLETE
 SYNOPSIS
         string md5(string arg [, int iterations])
-        string md5(bytes  arg [, int iterations])
+        string md5(bytes arg [, int iterations])
         string md5(int *  arg [, int iterations])
 
-BESCHREIBUNG
-        Berechnet den MD5-Hashwert von <arg>.
-        Das Argument kann ein String, eine Bytefolge oder ein Array von
-        Zahlen sein (die als Folge von Bytes betrachtet wird, wobei
-        immer nur die untersten 8 Bits Verwendung finden). Falls ein String
-        uebergeben wurde, so wird dieser in eine UTF-8-Bytefolge konvertiert
-        und davon der Hash berechnet.
+DESCRIPTION
+        Create and return a MD5 message digest from <arg>.
+        <arg> may be a string, a byte sequence, or an array of numbers
+        (each considered to be a byte, ignoring all but the lowest 8 bits).
+        A string is converted to a UTF-8 byte sequence of which then the
+        digest will be created.
 
-        Das Ergebnis wird als 32-stelliger Hexadezimalwert geliefert.
+        If <iterations> is given as a number greater than 0, it is
+        the number of iterations used in the digest calculation. If omitted,
+        the driver executes just one iteration.
 
-        Ist das <iterations> Argument eine Zahl groesser 0, berechnet der
-        Driver den Digest mit diese Anzahl an Wiederholungen. Fehlt die
-        Angabe, fuehrt der Driver die Digest-Berechnung einmal aus.
-        
-        Jede Iteration kostet 5 Evalution-Ticks.
+        The efun costs 5 ticks per iteration.
 
-BEISPIELE
+EXAMPLES
         string s;
 
-        s = md5("Hallo");
+        s = md5("Hello");
         s = md5( ({ 'H', 'e', 'l', 'l', 'o' }) )
         s = md5( ({ 'H', 'e', 'l', 'l', 'o' }), 2 )
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
-        LDMud 3.2.12 fuehrte Zaehlenarrays als Argument ein, also auch
-          die Anzahl der Wiederholungen.
-        LDMud 3.3.717 fuehrte die Iterations-basierte Evaluationskosten ein.
-        Seit LDMud 3.3.719 abgeloest durch hash().
+HISTORY
+        Introduced in LDMud 3.2.9.
+        LDMud 3.2.12 added number arrays as argument, and the number of
+        interations.
+        LDMud 3.3.717 added the iteration-based evaluation cost.
+        Since LDMud 3.3.719 obsoleted by hash().
 
-SIEHE AUCH
+SEE ALSO
         crypt(E), md5_crypt(E), sha1(E), hash(E), hmac(E)
diff --git a/doc/efun/md5_crypt b/doc/efun/md5_crypt
index 2dffbdc..422058c 100644
--- a/doc/efun/md5_crypt
+++ b/doc/efun/md5_crypt
@@ -1,22 +1,24 @@
 SYNOPSIS
         string md5_crypt(string str, int seed)
         string md5_crypt(string str, string seed)
-        string md5_crypt(bytes  str, int seed)
-        string md5_crypt(bytes  str, string seed)
+        string md5_crypt(bytes str, int seed)
+        string md5_crypt(bytes str, string seed)
 
-BESCHREIBUNG
-        Verschluesselt den String <str> mit dem Schluessel <seed>.
-        <seed> kann entweder ein Integer sein oder zwei Zeichen aus
-        dem String <seed>.  Wenn <seed> 0 ist, wird ein zufaelliger
-        Schluessel erzeugt.
+DESCRIPTION
+        Crypt the string <str> the first two characters
+        from the string <seed> as a seed. If <seed> is an integer, then
+        a random seed is used.
 
-        Das Resultat enthaelt den Schluessel als die ersten beiden Zeichen.
+        The result has the first two characters as the seed.
 
-        Die Efun verwendet den MD5-Algorithmus, und das Resultat ist
-        kompatible mit der Passwordverschluesselung des Apache Webservers.
+        The efun uses the MD5 algorithm for encryption, and the result
+        is compatible with the Apache password encryption.
 
-        Fuer Passwortabfragen, die ohne Echo eingegeben werden koennen sollen,
-        bietet input_to() ein spezielles Flag.
+        If you want to let enter password information without echo,
+        input_to() can be used with special argument.
 
-SIEHE AUCH
-        crypt(E), md5(E), sha1(E), input_to(E)
+HISTORY
+        Introduced in LDMud 3.3
+
+SEE ALSO
+        crypt(E), input_to(E), md5(E), md5_crypt(E), hash(E), hmac(E)
diff --git a/doc/efun/member b/doc/efun/member
index 2ef5b42..918efc3 100644
--- a/doc/efun/member
+++ b/doc/efun/member
@@ -2,22 +2,20 @@
         int member(mixed *array, mixed elem [, int start])
         int member(string s, int elem [, int start])
         int member(bytes s, int elem [, int start])
-        int member(mapping map, mixed key)
+        int member(mapping m, mixed key)
 
-BESCHREIBUNG
-        Fuer Arrays, String und Bytefolgen liefert member() den Index
-        des ersten Auftretens von <elem> in <arg>. Ist <elem> nicht
-        in <arg> enthalten, wird -1 zurueck gegeben.
+DESCRIPTION
+        For arrays, strings and byte sequences, returns the index of the
+        first occurance of second arg in the first arg, or -1 if none found.
+        If <start> is given and non-negative, the search starts at
+        that position. A start position beyond the end of the string
+        or array will cause the efun to return -1.
 
-        Ist <start> als Zahl >= 0 gegeben, beginnt die Suche ab der
-        angegebenen Position. Eine Startposition groesser als die
-        Laenge des Strings/Arrays liefert stets das Resultat -1.
+        For mappings it checks, if key is present in mapping m and
+        returns 1 if so, 0 if key is not in m.
 
-        Fuer Mapping prueft member(), ob <key> in <map> enthalten ist und
-        liefert 1 zurueck falls ja, 0 sonst.
+HISTORY
+        LDMud 3.3.556 added the <start> parameter.
 
-GESCHICHTE
-        LDMud 3.3.556 fuegte den <start>-Parameter hinzu.
-
-SIEHE AUCH
+SEE ALSO
         rmember(E), mappings(LPC)
diff --git a/doc/efun/min b/doc/efun/min
index 3ec81a7..36922dd 100644
--- a/doc/efun/min
+++ b/doc/efun/min
@@ -1,22 +1,23 @@
 SYNOPSIS
-        string|bytes min(string|bytes arg, ... )
+        string|bytes min(string|bytes arg, ...)
         string|bytes min(string|bytes *arg_array)
+
         int|float    min(int|float arg, ...)
         int|float    min(int|float *arg_array)
 
-BESCHREIBUNG
-        Liefert das kleinste der Argumente <arg>. Wenn min() fuer ein
-        einzelnes (nicht leeres) Array aufgerufen wird, liefert min() das
-        kleinste Element im Array.
+DESCRIPTION
+        Determine the minimum value of the <arg>uments and return it.
+        If min() is called with an array (which must not be empty) as only
+        argument, it returns the minimum value of the array contents.
 
-BEISPIELE
-        min(1)                      -> liefert 1
-        min(1, -1.1)                -> liefert -1.1
-        min("bla", "fasel")         -> liefert "bla"
-        min( ({ "bla", "fasel" }) ) -> liefert "bla"
+EXAMPLES
+        min(1)                     - returns 1
+        min(1, -1.1)               - returns -1.1
+        min("foo", "bar")          - returns "bar"
+        min( ({ "foo", "bar" }) )  - returns "bar"
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
+HISTORY
+        Introduced in LDMud 3.2.9.
 
-SIEHE AUCH
+SEE ALSO
         max(E)
diff --git a/doc/efun/mkdir b/doc/efun/mkdir
index 1562498..386e49a 100644
--- a/doc/efun/mkdir
+++ b/doc/efun/mkdir
@@ -1,9 +1,9 @@
 SYNOPSIS
         int mkdir(string path)
 
-BESCHREIBUNG
-        Erstellt ein Verzeichnis <path> und liefert 1, wenn das Verzeichnis
-        erstellt werden konnte, sonst 0.
+DESCRIPTION
+        Make a directory named path. Return 1 for success and 0 for
+        failure.
 
-SIEHE AUCH
+SEE ALSO
         rmdir(E), rm(E), get_dir(E), file_size(E)
diff --git a/doc/efun/mkmapping b/doc/efun/mkmapping
index 477d471..5423f1c 100644
--- a/doc/efun/mkmapping
+++ b/doc/efun/mkmapping
@@ -1,30 +1,29 @@
 SYNOPSIS
-        mapping mkmapping(mixed *arr1, mixed *arr2, mixed *arr3, ...)
+        mapping mkmapping(mixed *arr1, mixed *arr2,...)
         mapping mkmapping(struct st)
 
-BESCHREIBUNG
-        Liefert ein Mapping mit Keys aus <arr1> und Datenelementen aus
-        <arr2>, <arr3>.... Dem Key <arr1[0]> werden die Datenelemente
-        <arr2[0]>, <arr3[0]>... zugeordnet. Wenn die Datenarrays
-        ungleich gross sind, enthaelt das Mapping nur so viele Eintraege
-        wie im kleinsten Datenarray enthalten sind.
+DESCRIPTION
+        The first form returns a mapping with indices from 'arr1' and
+        values from 'arr2'... . arr1[0] will index arr2...[0], arr1[1]
+        will index arr2...[1], etc. If the arrays are of unequal size,
+        the mapping will only contain as much elements as are in the
+        smallest array.
 
-        Die zweite Form konvertiert die angegebene struct <st> in ein Mapping.
-        Hierbei werden die Namen des jeweiligen Elementes in der struct als
-        Schluessel verwendet.
+        The second form converts the given struct <st> into a mapping
+        using the struct member names as index values.
 
-BEISPIELE
+EXAMPLES
         mkmapping( ({ 1, 2 }), ({ 10, 11 }), ({ 20, 21, 22}))
-          liefert ([ 1:10;20, 2:11;21 ])
+          returns ([ 1:10;20, 2:11;21 ])
 
         struct s { int a; int *b; int c; };
         mkmapping( (<s> a: 1, b: ({ 2, 3 }), c: 3 )
-          liefert ([ "a":1, "b":({2,3}), "c":3 ])
+          returns ([ "a":1, "b":({2,3}), "c":3 ])
 
-GESCHICHTE
-        LDMud 3.3.433 ermoeglichte die Konversion von structs.
+HISTORY
+        LDMud 3.3.433 added the conversion from structs.
 
-SIEHE AUCH
+SEE ALSO
         mappings(LPC), mappingp(E), m_indices(E), m_values(E),
         m_add(E), m_delete(E), sizeof(E), widthof(E), unmkmapping(E),
         to_struct(E)
diff --git a/doc/efun/mktime b/doc/efun/mktime
index 03f7913..c7e7682 100644
--- a/doc/efun/mktime
+++ b/doc/efun/mktime
@@ -3,41 +3,40 @@
 
         int mktime(int *ts)
 
-BESCHREIBUNG
-        Ist das Argument <ts> ein Array mit 9 Elementen (int) entsprechend
-        des Rueckgabewertes von localtime(), so liefert die Funktion
-        die Anzahl Sekunden seit dem 01. Januar 1970, 00:00:00 zurueck.
-        Hierbei wird immer die aktuelle Zeitzone des Hostrechners zugrunde
-        gelegt.
-        Dies ist von Nutzen, wenn man ein Datum/Uhrzeit hat, diese aber als
-        Ganzzahl-Wert speichern will oder eine Zeitdifferenz zwischen zwei
-        Daten ausrechnen will.
+DESCRIPTION
+        If the argument <ts> is an array with 9 elements (int) according to
+        the result of localtime(), this function returns the number of seconds
+        passed since the epoch (00:00:00 UTC, January 1, 1970).
+        mktime() interprets the input data according to the current timezone
+        setting of the host system.
+        This can be used to store a date or time as an integer value or to
+        compute differences betweens two different dates or times.
 
-        Das Array muss dabei so aufgebaut sein:
-            int TM_SEC    (0):  Sekunde in der Minute (0..59)
-            int TM_MIN    (1):  Minute in der Stunde (0..59)
-            int TM_HOUR   (2):  Stunde des Tages (0..23)
-            int TM_MDAY   (3):  Tag im Monat (1..31)
-            int TM_MON    (4):  Monat des Jahres (0..11)
-            int TM_YEAR   (5):  Jahr (z.B. 2001)
-            int TM_WDAY   (6):  Wochentag (0..6, Sonntag = 0)
-            int TM_YDAY   (7):  Tag im Jahr (0..365)
-            inz TM_ISDST  (8):  Sommerzeit, Daylight Saving Time (1,0,-1)
+        The array <ts> has to have the following structure:
+            int TM_SEC    (0):  seconds (0..59)
+            int TM_MIN    (1):  minutes (0..59)
+            int TM_HOUR   (2):  hours (0..23)
+            int TM_MDAY   (3):  day of month (1..31)
+            int TM_MON    (4):  day of year (0..11)
+            int TM_YEAR   (5):  year (e.g. 2001)
+            int TM_WDAY   (6):  day of week (0..6, sunday = 0)
+            int TM_YDAY   (7):  day of year (0..365)
+            inz TM_ISDST  (8):  Daylight Saving Time (1,0,-1)
 
-        TM_YDAY und TM_WDAY werden ignoriert und koennen beliebige Zahlen
-        enthalten.
-        TM_ISDST kann 1 (Sommerzeit), 0 (keine Sommerzeit) oder -1 sein. Bei
-        -1 wird versucht, zu erraten, ob Sommerzeit fuer die angegebene Zeit
-        aktiv sein sollte.
+        TM_YDAY and TM_WDAY are ignored and can contain arbitrary 
+        integer values.
+        TM_ISDST can be 1 (daylight saving time in effect), 0 (DST not in
+        effect) or -1. A value of -1 causes the mktime() function to attempt
+        to divine whether daylight saving time is in effect for the specified
+        time.
 
-BEISPIELE
-        Man hat ein Datum/Uhrzeit (z.B. Benutzereingabe), welches als
-        Unix-Zeitstempel gespeichert werden soll:
-        // "Mit, 24. Okt 2007, 10:48:00" entspricht folgendem Zeitstempel:
-        int unixzeit = mktime(({0, 48, 09, 24, 09, 2007, 0, 01, 0}));
+EXAMPLES
+        A date and time (user input) shall be stored as unix timestamp:
+        // "Wed Oct 24 10:48:00 2007" corresponds to the returned time stamp:
+        int unixtime = mktime( ({0, 48, 09, 24, 09, 2007, 0, 01, 0}) );
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.3.718.
+HISTORY
+        Introduced in LDMud 3.3.718.
 
-SIEHE AUCH
+SEE ALSO
         ctime(E), gmtime(E), localtime(E), time(E), utime(E)
diff --git a/doc/efun/move_object b/doc/efun/move_object
index f8d4572..615f903 100644
--- a/doc/efun/move_object
+++ b/doc/efun/move_object
@@ -1,18 +1,18 @@
-GESCHUETZT
 SYNOPSIS
         void move_object(mixed item, mixed dest)
 
-BESCHREIBUNG
-        <item> wird in die neue Umgebung <dest> bewegt. <item> und <dest>
-        koennen ein object_name() oder ein Objekt sein.
+DESCRIPTION
+        The item, which can be an object_name or an object, is moved into
+        it's new environment dest, which can also be an object_name or an
+        object.
 
-        Seit 3.2.1 ist die Funktionalitaet von move_object() direkt in der
-        Mudlib enthalten und verwendet dort die M_MOVE_OBJECT0/1 Treiber Hooks.
-        move_object() kann so auch eine simul-efun sein.
+        Since 3.2.1, the innards of move_object() are implemented in
+        the mudlib, using the M_MOVE_OBJECT0/1 driver hooks, and move_object()
+        might as well be an simul-efun.
 
-        In der traditionellen Implemenierung war <item> im COMPAT-Modus auf
-        das aufrufende Objekt beschraenkt.
+        The traditional implementation restricted for !compat mode
+        the <item> to the calling object only.
 
-SIEHE AUCH
+SEE ALSO
         remove(A), init(A), transfer(E), native(C), hooks(C),
         set_environment(E)
diff --git a/doc/efun/negate b/doc/efun/negate
index a496966..413ce81 100644
--- a/doc/efun/negate
+++ b/doc/efun/negate
@@ -1,6 +1,6 @@
 SYNOPSIS
-        int   negate(int arg)
-        float negate(float arg)
+        int negate(int)
+        float negate(float)
 
-BESCHREIBUNG
-        Liefert den negativen Wert von <arg>.
+DESCRIPTION
+        Unary minus. Returns the negative argument.
diff --git a/doc/efun/net_connect b/doc/efun/net_connect
index 41c9dd9..b358718 100644
--- a/doc/efun/net_connect
+++ b/doc/efun/net_connect
@@ -2,42 +2,49 @@
         #include <comm.h>
         int net_connect(string host, int port)
 
-BESCHREIBUNG
-        Oeffne eine nicht-blockierende TCP Netzverbindung zu
-        <host>:<port> .  Bei Erfolg wird die Verbindung zum
-        aufrufenden Objekt gebunden und die lfun logon() wird in dem
-        Objekt aufgerufen.
+DESCRIPTION
+        Open a non-blocking TCP network connection to <host> and
+        <port>.  On success, the connection is bound to the current
+        object and the lfun logon() is called in the object.
 
-        Resultat ist einer der folgenden Werte:
-          NC_SUCCESS        net_connect() erfolgreich
-          NC_EUNKNOWNHOST   Host-Adresse nicht ermittelbar
-          NC_ENOSOCKET      Fehler beim Erstellen des Sockets
-          NC_ENOBIND        Fehler beim Binden des Sockets
-          NC_ENOCONNECT     Fehler beim Verbindgen des Sockets
-        (Details ueber die letzten drei Fehler lassen sich im Fehlerlog des
-         Drivers ermitteln.)
-          NC_ECONNREFUSED   Ziel ignoriert Verbindungsversuch
-          NC_EMCONN         zuviele unerledigte Verbindungen im Aufbau
-                            (voruebergehender Fehler, spaeter probieren)
-          NC_ENORESSOURCES  ungenuegende Ressourcen fuer Verbindungs-
-                            versuch (spaeter nochmal versuchen)
+        Returns one of the following values:
+          NC_SUCCESS        Success
+          NC_EUNKNOWNHOST   the host address could not be resolved
+          NC_ENOSOCKET      error during socket creation
+          NC_ENOBIND        socket could not be bound
+          NC_ENOCONNECT     socket could not be connected
+        (Details of the last three errors can be found in the driver's error
+         log.)
+          NC_ECONNREFUSED   remote host not listening/refusing
+          NC_EMCONN         too many pending connections (transient, try
+                            again later)
+          NC_ENORESSOURCES  insufficient system ressources (transient, try
+                            again later)
 
-        Ist der Driver fuer IPv6 konfiguriert, wird <host> erst als
-        IPv6-Name interpretiert, und wenn das fehlschlaegt, als
-        IPv4-Name.
+        If the driver is configured to support IPv6, <host> is first
+        interpreted as IPv6 hostname. If that fails, <host> is then
+        interpretd as IPv4 hostname.
 
-        Wenn die Verbindung nicht sofort erzeugt werden kann, gibt die
-        Funktion 'Erfolg' zurueck, und der Driver vollendet die
-        Funktion im Hintergrund. Sollte die Verbindungsaufbau im
-        Hintergrund fehlschlagen, wird logon(-1) im aktuellen Objekt
-        aufgerufen.
+        If the connection can't be established immediately, the efun
+        returns 'success' and the driver will check in the background
+        for the progress of the connection. When it is established,
+        logon() will be called in the object. If the connection fails,
+        logon(-1) will be called in the object.
 
-        Die Funktion erzeugt eine privilege violation ("net_connect",
-        host, port).
+        The efun raises a privilege violation ("net_connect", host, port).
 
-        WARNUNG: Ist <host> ein Name und keine IP, fuehrt die Funktion
-        einen DNS-Aufruf durch, der den Driver fuer einige Zeit
-        blockieren kann.
+BUGS
+        A non-blocking connect() doesn't imply a non-blocking
+        forward name resolution. If you provide a hostname instead
+        of an IP address to connect to, the driver will block until
+        the name is resolved. This may be an issue, depending on how
+        fast your nameserver replies. Non-blocking forward DNS
+        resolution can currently only be achieved using ERQ_LOOKUP.
 
-SIEHE AUCH
+HISTORY
+        First version 1992 by Snake and LynX for Nemesis.
+        Improved 1993 by Junky.
+        Added to LDMud 3.2.10.
+
+SEE ALSO
         logon(A)
diff --git a/doc/efun/next_bit b/doc/efun/next_bit
index b96f539..56805aa 100644
--- a/doc/efun/next_bit
+++ b/doc/efun/next_bit
@@ -1,22 +1,21 @@
 SYNOPSIS
-        int next_bit(string str, int start)
-        int next_bit(string str, int start, int find_cleared)
+        int next_bit (string str, int start)
+        int next_bit (string str, int start, int find_cleared)
 
-BESCHREIBUNG
-        Liefert den Zahlenwert des naechsten Bits im Bitstring <bit> nach
-        der Position <start>. Gewoehnlich ist dies das naechste gesetzte
-        Bit, aber wenn <find_cleared> angegeben und nicht 0 ist, wird
-        die Postion des naechsten geloeschten Bits zurueck gegeben.
+DESCRIPTION
+        Return the number of the next bit in bitstring <str> after position
+        <start>. Usually this is the next set bit, but if <find_cleared>
+        is given and not 0, the position of the next cleared bit is returned.
 
-        Dabei ist das Finden von geloeschten Bits nach dem letzten gesetzten
-        Bit auf die tatsaechliche Laenge von <str> beschraenkt.
+        Note that finding cleared bits after the last set bit is limited to
+        the actual length of <str>.
 
-        Jedes Zeichen enthaelt 6 Bits. In jedem Zeichen kann deshalb eine
-        Zahl von 0 bis 63 gespeichert werde (2^6=64). Das erste Zeichen
-        ist der Leerschlag " " mit dem Wert 0. Das erste Zeichen im String
-        ist jenes mit den niedrigsten Bits (0-5).
+        Each character contains 6 bits. So you can store a value
+        between 0 and 63 in one character (2^6=64). Starting character
+        is the blank " " which has the value 0. The first character in
+        the string is the one with the lowest bits (0-5).
 
-BEISPIELE
+EXAMPLES
         string s;
         int p;
 
@@ -25,8 +24,8 @@
         for (p = -1; -1 != (p = next_bit(s, p); )
             write(p+"\n");
 
-        --> das gibt 2 und 4 aus.
+        --> will write 2 and 4
 
-SIEHE AUCH
+SEE ALSO
         set_bit(E), clear_bit(E), test_bit(E), last_bit(E), count_bits(E),
         and_bits(E), or_bits(E), xor_bits(E), invert_bits(E), copy_bits(E)
diff --git a/doc/efun/next_inventory b/doc/efun/next_inventory
index 7062ba1..5dc7733 100644
--- a/doc/efun/next_inventory
+++ b/doc/efun/next_inventory
@@ -2,13 +2,13 @@
         object next_inventory()
         object next_inventory(object ob)
 
-BESCHREIBUNG
-        Liefert das naechste Objekt aus dem Inventar von <ob>. Wird <ob>
-        nicht angegeben, wird this_object() verwendet.
+DESCRIPTION
+        Get next object in the same inventory as ob. If ob is not
+        given, the current object will be used.
 
-        Diese Efun wird meistens zusammen mit first_inventory() verwendet.
-        Fuer ein Beispiel siehe dort.
+        This efun is mostly used together with the efun
+        first_inventory().
 
-SIEHE AUCH
+SEE ALSO
         first_inventory(E), all_inventory(E), environment(E),
         deep_inventory(E)
diff --git a/doc/efun/notify_fail b/doc/efun/notify_fail
index b161c42..f566460 100644
--- a/doc/efun/notify_fail
+++ b/doc/efun/notify_fail
@@ -2,35 +2,37 @@
         int notify_fail(string str)
         int notify_fail(closure cl)
 
-BESCHREIBUNG
-        Der String <str> wird als Kommando-Fehlermeldung anstelle des default
-        "What?" gespeichert. Das Resultat ist stets 0.
+DESCRIPTION
+        Store str as the error message given instead of the default
+        message ``What ?''. The result is always 0.
 
-        Wird eine Closure als Argument gegeben, wird sie im Fehlerfall
-        (also erst wenn ein Kommando endgueltig fehlgeschlagen hat)
-        ausgefuehrt und hat die Fehlermeldung als Resultat
-        zurueckzugeben. Die Closure erhaelt als Argument den
-        originalen Befehlsgeber; in der Regel dies ist this_player(),
-        was aber vom MODIFY_CMD hook geaendert werden kann.
+        If a closure is given, it is executed to return the error
+        message string, but not before all attempts to execute the
+        commandline failed (read: not at the time of the call to
+        notify_fail()). The closure receives as argument the original
+        commandgiver; usually it is identical to this_player(), unless
+        the modify_cmd hook changed that.
 
-        Wird notify_fail() mehr als einmal fuer ein Kommando
-        aufgerufen, wird lediglich der letzte Aufruf gewertet.
-        notify_fail() erkennt verschachtelte Kommandos (siehe Efun
-        command()), und ein notify_fail() in einem Unterkommando
-        hat keinen Einfluss auf das uebergeordnete Kommando.
+        If notify_fail() is called more than once for this command, only the
+        last call will be used. However, calls to notify_fail() in nested
+        commands have no effect on this command.
 
-BEISPIELE
-        Verwendet man
+        The idea of this function is to give better error messages
+        instead of simply 'What ?'.
 
+        It is also better to use
                 notify_fail(message); return 0;
-
-        anstelle von 
-
+        instead of
                 write(message); return 1;
 
-        erhalten andere Objekte ihre Chance, das Kommando
-        (erfolgreich) auszufuehren.
+        Other objects will get the chance to evaluate the verb.
 
-SIEHE AUCH
+HISTORY
+        Returntype changed in LDMud 3.2.6 from void to int.
+        Since LDMud 3.2.7, notify-fail settings are saved over nested
+        commands, and NPCs can see their notify-fail messages.
+
+
+SEE ALSO
         add_action(E), command(E), query_verb(E), query_command(E),
         query_notify_fail(E), hooks(C)
diff --git a/doc/efun/object_info b/doc/efun/object_info
index 89263f0..12f2df9 100644
--- a/doc/efun/object_info
+++ b/doc/efun/object_info
@@ -1,126 +1,203 @@
-GESCHUETZT
 SYNOPSIS
-        #include <objectinfo.h>
+        #include <object_info.h>
 
-        mixed * object_info(object ob, int what)
-        mixed * object_info(object ob, int what, int index)
+        mixed object_info(object ob, int what)
 
-BESCHREIBUNG
-        Liefert einige interne Informationen ueber das Objekt <ob> in Form
-        eines Arrays. Das Argument <what> gibt an, welche Informationen
-        geliefert werden.
+DESCRIPTION
+        Returns some internal information about object <ob>. The
+        Argument <what> determines which information is returned.
 
-        Das Resultat ist normalerweise ein Array. Wird jedoch <index>
-        spezifiziert, wird nur der Wert geliefert, der im Array an der
-        Position <index> stehen wuerde.
-
-        Die moeglichen Werte fuer <what> und die Indizes des gelieferten
-        Arrays sind in <objectinfo.h> definiert und muessen eingebunden
-        werden. Diese Definitionen koennen sich in zukuenftigen Versionen
-        des Drivers aendern!
-
-        <what> == OINFO_BASIC:
-
-        Dieser Aufruf liefert grundlegende Informationen ueber <ob>:
-        int [OIB_HEART_BEAT]:       1, wenn <ob> einen heart_beat() hat,
-                                    sonst 0.
-        int [OIB_IS_WIZARD]:        1, wenn <ob> ein Gott ist (das
-                                    Wizard Flag gesetzt hat), sonst 0. Der
-                                    Eintrag ist immer 0, wenn set_is_wizard()
-                                    nicht verfuegbar ist.
-        int [OIB_ENABLE_COMMANDS]:  1, wenn <ob> Kommandos geben darf, sonst 0.
-        int [OIB_CLONE]:            1, wenn <ob> ein Clon ist, sonst 0.
-        int [OIB_DESTRUCTED]:       1, wenn <ob> zerstoert wurde, sonst 0.
-        int [OIB_SWAPPED]:          1, wenn <ob> geswapt wurde, sonst 0.
-        int [OIB_ONCE_INTERACTIVE]: 1, wenn <ob> einmal interaktiv war,
-                                    sonst 0.
-        int [OIB_RESET_STATE]:      1, wenn <ob> im gleichen Zustand wie nach
-                                    einem reset() ist, sonst 0.
-        int [OIB_WILL_CLEAN_UP]:    1, wenn <ob> clean_up() aufruft, sonst 0.
-        int [OIB_LAMBDA_REFERENCED]:1, wenn <ob> Lambdas beinhaltet, sonst 0.
-        int [OIB_SHADOW]:           1, wenn <ob> ein Schatten uebergeworfen
-                                    wurde, sonst 0.
-        int [OIB_REPLACED]:         1, wenn das Programm von <ob> ersetzt
-                                    wurde (mit replace_program()), sonst 0.
-        int [OIB_NEXT_RESET]:       Zeit bis zum naechsten Reset.
-        int [OIB_TIME_OF_REF]:      Zeit des letzen Aufrufs von <ob>.
-        int [OIB_REF]:              Anzahl Aufrufe von <ob>.
-        int [OIB_GIGATICKS]:        GIGATICKS und TICKS liefern die summierten
-        int [OIB_TICKS]:            Evalkosten von <ob>.
-        int [OIB_SWAP_NUM]:         Die Swap-Nummer von <ob>s Programm, oder
-                                    -1, wenn <ob> nicht geswapt wurde.
-        int [OIB_PROG_SWAPPED]:     1, wenn <ob>'s Programm geswapt wurde,
-                                    sonst 0.
-        int [OIB_VAR_SWAPPED]:      1, wenn <ob>'s Variablen geswapt wurden,
-                                    sonst 0.
-        int [OIB_NAME]:             der Objektname von <ob>.
-        object [OIB_NEXT_ALL]:      das naechste Objekt in der Objektliste.
-        object [OIB_PREV_ALL]:      das vorherige Objekt in der Objektliste.
-
-        <what> == OINFO_POSITION:
-
-        Dieser Aufruf liefert Informationen ueber die Position von <ob> in der
-        globalen Objektliste:
-
-        object [OIP_NEXT]:          naechstes Objekt in der Objektliste.
-        object [OIP_PREV]:          vorheriges Objekt in der Objektliste.
-        int [OIP_POS]:              die Position von <ob> in der Objektliste,
-                                    beginnend von 0 aufwaerts.
-
-        Dieser Aufruf kann aufwendig an Rechenzeit sein.
-
-        <what> == OINFO_MEMORY:
-
-        Dieser Aufruf liefert Informationen ueber Speichernutzung von <ob>.
-
-        int [OIM_REF]:                Anzahl Referenzierungen von <ob>.
-        string [OIM_NAME]:            Name von <ob>.
-        int [OIM_PROG_SIZE]:          Programmgroesse.
-        int [OIM_NUM_FUNCTIONS]:      Anzahl Funktionen in <ob>.
-        int [OIM_SIZE_FUNCTIONS]:     Speicherbedarf der Funktionen
-        int [OIM_NUM_VARIABLES]:      Anzahl Variablen im Programm.
-        int [OIM_SIZE_VARIABLES]:     Speicherbedarf der Variablen.
-        int [OIM_NUM_STRINGS]:        Anzahl Strings im Programm.
-        int [OIM_SIZE_STRINGS]:       Speicherbedarf der String-Pointer.
-        int [OIM_SIZE_STRINGS_DATA]:  Speicherbedarf der String-Daten,
-                                      korrigiert um das Ausmass des Daten-
-                                      Sharing.
-        int [OIM_SIZE_STRINGS_TOTAL]: unkorrigierter Speicherbedarf der
-                                      String-Daten.
-        int [OIM_NUM_INCLUDES]:       Anzahl Includefiles im Programm.
-        int [OIM_NUM_INHERITED]:      Anzahl inheriter Programme.
-        int [OIM_SIZE_INHERITED]:     Speicherbedarf der Inherits.
-        int [OIM_TOTAL_SIZE]:         Gesamter Speicherbedarf des Programms.
-        int [OIM_DATA_SIZE]:          Gesamte Speicherbedarf der Variablenwerte
-                                      des Objekts <ob>, korrigiert um das
-                                      Ausmass des Daten-Sharings.
-        int [OIM_DATA_SIZE_TOTAL]:    unkorrigierter Gesamter Speicherbedarf
-                                      der Variablenwerte des Objekts.
-        int [OIM_NO_INHERIT]:         1, wenn das Programm nicht inheritet
-                                      werden kann.
-        int [OIM_NO_CLONE]:           1, wenn das Programm / der Blueprint
-                                      nicht geclont werden kann.
-        int [OIM_NO_SHADOW]:          1, wenn dem Objekt kein Shadow
-                                      uebergeworfen werden darf.
-
-        Dieser Aufruf holt das Programm aus dem Swap, falls notwendig.
-        Die OIM_SIZE_xxx-Eintraege zeigen nur den Speicherbedarf der
-        Strukturen / Pointer an, nicht aber den Speicherbedarf von
-        Variablenwerten, Funktionscode oder der Strings selbst.
+        It can be either a configuration option as given to
+        configure_object() or one of the following options:
 
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6.
-        Aenderungen in LDMud 3.2.7:
-          - neues Kriterium OIB_REPLACED.
-          - das Kriterium OIB_IS_WIZARD ist immer 0, wenn set_is_wizard()
-            nicht verfuegbar ist.
-          - das Kriterium OIB_APPROVED wurde entfernt.
-        LDMud 3.2.8 fuehrte neu OIM_DATA_SIZE im Resultat von OINFO_MEMORY ein.
-        LDMud 3.2.9 erweiterte OINFO_MEMORY um den Index Mechanismus,
-            OIM_NUM_INCLUDES, OIM_NO_INHERIT, OIM_NO_SHADOW, OIM_NO_CLONE,
-            OIM_SIZE_STRINGS_DATA, OIM_SIZE_STRINGS_TOTAL, und
-            OIM_DATA_SIZE_TOTAL
 
-SIEHE AUCH
-        debug_info(E)
+        Object Flags:
+
+        <what> == OI_ONCE_INTERACTIVE:
+           1 if <ob> was once (or still is) interactive, 0 else.
+
+        <what> == OI_RESET_STATE:
+           1 if <ob> is (still) reset, 0 else.
+
+        <what> == OI_WILL_CLEAN_UP:
+           1 if <ob>'s clean_up() will be called, 0 else.
+
+        <what> == OI_LAMBDA_REFERENCED:
+           1 if <ob> has lambdas (and there replace_program()
+           is not allowed anymore), 0 else.
+
+        <what> == OI_REPLACED:
+           1 if the program for <ob> was replaced, 0 else.
+
+
+
+        Program Flags:
+
+        <what> == OI_NO_INHERIT:
+           1 if the program can't be inherited.
+
+        <what> == OI_NO_CLONE:
+           1 if the program/blueprint can't be cloned.
+
+        <what> == OI_NO_SHADOW:
+           1 if the program's functions can't be shadowed.
+
+        <what> == OI_SHARE_VARIABLES:
+           1 if clones of this program share their initial
+           variable values with the blueprint.
+
+
+
+        Swapping Information:
+
+        <what> == OI_SWAPPED:
+           1 if <ob> is swapped, 0 else.
+
+        <what> == OI_PROG_SWAPPED:
+           1 if <ob>'s program is swapped, 0 else.
+
+        <what> == OI_VAR_SWAPPED:
+           1 if <ob>'s variables are swapped, 0 else.
+
+        <what> == OI_SWAP_NUM:
+           The swap number for <ob>s program, or -1 if not swapped.
+
+
+
+        Time Information:
+
+        <what> == OI_NEXT_RESET_TIME:
+            Time of the next reset.
+
+        <what> == OI_NEXT_CLEANUP_TIME:
+            Time of the next data cleanup.
+
+        <what> == OI_LAST_REF_TIME:
+            Time of the last call to <ob>.
+
+
+
+        Object List:
+
+        <what> == OI_OBJECT_NEXT:
+           The next object in the global object list.
+
+        <what> == OI_OBJECT_PREV:
+           The previous object in the global object list.
+
+        <what> == OI_OBJECT_POS:
+           The position of <ob> in the global object list,
+           counting from 0 up. This can be expensive to compute.
+
+
+
+        Shadows:
+
+        <what> == OI_SHADOW_NEXT:
+           The next object in the shadow list, i.e. the object
+           that is shadowing <ob>, or 0 if <ob> is not shadowed.
+
+        <what> == OI_SHADOW_PREV:
+           The previous object in the shadow list, i.e. the object
+           that <ob> is currently shadowing, or 0 if <ob> is not a shadow.
+
+        <what> == OI_SHADOW_ALL:
+           Returns an array of all objects that are currently
+           shadowing <ob>, or an empty array if <ob> is not shadowed.
+
+
+
+        Object Statistics:
+
+        <what> == OI_OBJECT_REFS:
+           The number of references to <ob>.
+
+        <what> == OI_TICKS:
+           The accumulated evaluation cost spend in <ob> modulo 1000000000.
+
+        <what> == OI_GIGATICKS:
+           The accumulated evaluation cost spend in <ob> divided by 1000000000.
+
+        <what> == OI_DATA_SIZE:
+           The total size of the values held in the object's variables,
+           scaled down according to the extend of data sharing.
+
+        <what> == OI_DATA_SIZE_TOTAL:
+           The unmodified total size of the values held in the
+           object's variables
+
+
+
+        Program Statistics:
+
+        <what> == OI_PROG_REFS:
+           The number of references to <ob>'s program.
+
+        <what> == OI_NUM_FUNCTIONS:
+           The number of functions in the program.
+
+        <what> == OI_NUM_VARIABLES:
+           The number of variables in the program.
+
+        <what> == OI_NUM_STRINGS:
+           The number of strings in the program.
+
+        <what> == OI_NUM_INHERITED:
+           The number of explicitely inherited programs.
+
+        <what> == OI_NUM_INCLUDED:
+           The number of included files in the program.
+
+        <what> == OI_SIZE_FUNCTIONS:
+           The size needed for the function structures.
+           Note that this does not include size of the function code.
+
+        <what> == OI_SIZE_VARIABLES:
+           The size needed for the variable structures.
+           Note that this does not include size of the variable data,
+           See OI_DATA_SIZE/OI_DATA_SIZE_TOTAL for that.
+
+        <what> == OI_SIZE_STRINGS:
+           The size needed for the string pointers.
+
+        <what> == OI_SIZE_STRINGS_DATA:
+           The size needed for the string values,
+           scaled down according to the extend of data sharing.
+
+        <what> == OI_SIZE_STRINGS_DATA_TOTAL:
+           The unmodified size needed for the string values.
+
+        <what> == OI_SIZE_INHERITED:
+           The size needed for the inherit structures.
+
+        <what> == OI_SIZE_INCLUDED:
+           The size needed for the include structures.
+
+        <what> == OI_PROG_SIZE:
+           The size of the program structure.
+
+        <what> == OI_PROG_SIZE_TOTAL:
+           The total size of the program.
+
+
+HISTORY
+        Introduced in LDMud 3.2.6.
+        Changes in LDMud 3.2.7:
+          - new basic result OIB_REPLACED.
+          - basic result OIB_IS_WIZARD is always 0 if set_is_wizard()
+              is not available.
+          - basic result OIB_APPROVED is gone.
+        LDMud 3.2.8 added OIM_DATA_SIZE to the result of OINFO_MEMORY.
+        LDMud 3.2.9 added the index mechanism, OIM_NUM_INCLUDES,
+          OIM_NO_INHERIT, OIM_NO_SHADOW, OIM_NO_CLONE, OIM_SIZE_STRINGS_DATA,
+          OIM_SIZE_STRINGS_TOTAL, and OIM_DATA_SIZE_TOTAL to the result
+          of OINFO_MEMORY.
+        LDMud 3.3.378 added the OIM_SHARE_VARIABLES to the result
+          of OINFO_MEMORY.
+        LDMud 3.3.654 added the OIB_NEXT_CLEANUP to the result of OINFO_BASIC.
+        LDMud 3.5.0 redesigned the whole efun.
+
+SEE ALSO
+        configure_object(E), lwobject_info(E), interactive_info(E),
+        driver_info(E)
diff --git a/doc/efun/object_name b/doc/efun/object_name
index b329ca9..b5087db 100644
--- a/doc/efun/object_name
+++ b/doc/efun/object_name
@@ -2,34 +2,36 @@
         string object_name()
         string object_name(object ob)
 
-BESCHREIBUNG
-        Liefert den Namen des Objekts <ob> oder des aktuellen Objekts, wenn
-        <ob> nicht angegeben wurde.
+DESCRIPTION
+        Get the name of an object <ob> or, if no argument is given, of
+        the current object.
 
-        Als Spezialfall liefert die Funktion 0, wenn <ob> 0 ist.
+        As a special case, if <ob> is 0, the function returns 0.
 
-        Dieser Name ist der Name, unter dem das Objekt in der mudinternen
-        Objekttabelle aufgelistet ist. Der Name wird bei der Erzeugung des
-        Objekts eingetragen. Fuer Blueprints entspricht der Name dem Filenamen
-        (ohne die Endung .c), fuer Clones ist es der Name des Blueprints
-        ergaenzt mit einer eindeutigen Nummer nach dem #. Diese Regeln gelten
-        auch fuer virtuelle Objekte - die realen Namen/Typen von virtuellen
-        Objekten werden nicht beruecksichtigt.
+        This name is the name under which the object is stored in the
+        muds object table. It is initialised at the creation of the
+        object such that blueprints are named after the file they are
+        compiled from (without the trailing '.c'), and clones receive
+        the name of their blueprint, extended by '#' followed by
+        a unique non-negative number. These rules also apply to
+        virtual objects - the real name/type of virtual objects
+        is ignored.
 
-        Der Name eines Objekts kann mit rename_object() geaendert werden.
-        object_name() beruecksichtigt alle diese Aenderungen.
+        The name of an object can be changed with rename_object(), and
+        object_name() will reflect any of these changes.
 
-        Der zurueck gegebene Name beginnt immer mit '/' (absoluter Pfad),
-        ausser wenn der Driver im COMPAT-Modus laeuft.
+        The returned name always begins with '/' (absolute path),
+        except when the parser runs in COMPAT mode.
 
-BEISPIELE
-        find_object(object_name(ob)) == ob
+EXAMPLES
+            find_object(object_name(ob)) == ob
 
-        Dies ist immer wahr fuer alle Objekte <ob>, die nicht zerstoert sind.
+        This is guaranteed to be true for all objects ob that are not
+        destructed.
 
-GESCHICHTE
-        0 als Argument wird seit 3.2.9 akzeptiert.
+HISTORY
+        0 is accepted as argument since 3.2.9.
 
-SIEHE AUCH
+SEE ALSO
         clone_object(E), load_name(E), load_object(E), find_object(E),
         object_time(E), program_name(E), rename_object(E)
diff --git a/doc/efun/object_time b/doc/efun/object_time
index 3100dbc..2db6e94 100644
--- a/doc/efun/object_time
+++ b/doc/efun/object_time
@@ -2,9 +2,9 @@
         int object_time()
         int object_time(object ob)
 
-BESCHREIBUNG
-        Liefert die Zeit, zu der das Objekt <ob> erstellt wurde. Wird <obj>
-        nicht angegeben, wird standardmaessig this_object() verwendet.
+DESCRIPTION
+        Returns the creation time of the given object.
+        Default is for this_object(), if no arg is given.
 
-SIEHE AUCH
+SEE ALSO
         program_time(E), program_name(E)
diff --git a/doc/efun/objectp b/doc/efun/objectp
index a007993..2633389 100644
--- a/doc/efun/objectp
+++ b/doc/efun/objectp
@@ -1,9 +1,10 @@
 SYNOPSIS
         int objectp(mixed arg)
 
-BESCHREIBUNG
-        Liefert 1, wenn <arg> ein Objekt ist.
+DESCRIPTION
+        Return 1 if arg is an object.
 
-SIEHE AUCH
-        clonep(E), lwobjectp(E), intp(E), stringp(E), bytesp(E), pointerp(E),
-        symbolp(E), referencep(E), symbolp(E)
+SEE ALSO
+        bytesp(E), clonep(E), closurep(E), coroutinep(E), floatp(E), intp(E),
+        lpctypep(E), lwobjectp(E), mappingp(E), pointerp(E), referencep(E),
+        stringp(E), structp(E), symbolp(E)
diff --git a/doc/efun/or_bits b/doc/efun/or_bits
index 98a558d..fcfc59c 100644
--- a/doc/efun/or_bits
+++ b/doc/efun/or_bits
@@ -1,18 +1,13 @@
 SYNOPSIS
         string or_bits(string str1, string str2)
 
-BESCHREIBUNG
-        <str1> und <str2> sind beides Bitstrings. Das Resultat von or_bits()
-        ist ein Bitstring, der das binaere Oder von <str1> und <str2>
-        enthaelt, d.h. ein String, in dem ein Bit gesetzt ist, wenn es
-        in <str1> oder <str2> oder in beiden gesetzt ist.
+DESCRIPTION
+        <str1> and <str2> are both bitstrings. The result of the function
+        is a bitstring with the binary-or of <str1> and <str2>,
+        ie. a string in which a bit is set if the corresponding
+        bit in <str1> or <str2> (or both) is set.
 
-        Jedes Zeichen enthaelt 6 Bits. In jedem Zeichen kann deshalb eine
-        Zahl von 0 bis 63 gespeichert werde (2^6=64). Das erste Zeichen
-        ist der Leerschlag " " mit dem Wert 0. Das erste Zeichen im String
-        ist jenes mit den niedrigsten Bits (0-5).
-
-BEISPIELE
+EXAMPLES
         string s1, s2, s3;
 
         s1 = set_bit("", 3); s1 = set_bit(s1, 15);  -> s1 is "( ("
@@ -22,6 +17,6 @@
 
         -> s3 is now "8 (", ie. a bitstring with bits 3, 4 and 15 set.
 
-SIEHE AUCH
+SEE ALSO
         clear_bit(E), set_bit(E), test_bit(E), next_bit(E), last_bit(E),
         count_bits(E), and_bits(E), xor_bits(E), invert_bits(E), copy_bits(E)
diff --git a/doc/efun/parse_command b/doc/efun/parse_command
index 83b7731..d88e083 100644
--- a/doc/efun/parse_command
+++ b/doc/efun/parse_command
@@ -1,7 +1,7 @@
 OPTIONAL
 SYNOPSIS
-        int parse_command (string cmd, object  env, string fmt, mixed &var, ...)
-        int parse_command (string cmd, object* arr, string fmt, mixed &var, ...)
+        int parse_command(string cmd, object  env, string fmt, mixed &var, ...)
+        int parse_command(string cmd, object *arr, string fmt, mixed &var, ...)
 
 DESCRIPTION
         parse_command() is basically a spiffed up sscanf operating
@@ -120,10 +120,10 @@
         int parse_command(string, object|object*, string, destargs...)
 
 
-EXAMPLE
+EXAMPLES
         object *items;
-        parse_command( "take apple",environment(this_player())
-                     , " 'get' / 'take' %i ",items);
+        parse_command("take apple",environment(this_player()),
+                      " 'get' / 'take' %i ", items);
 
 HISTORY
         LDMud 3.3.258 removed the compat-mode parse_command().
diff --git a/doc/efun/pg_connect b/doc/efun/pg_connect
index a9d4d58..ea546bb 100644
--- a/doc/efun/pg_connect
+++ b/doc/efun/pg_connect
@@ -1,8 +1,9 @@
 OPTIONAL
 SYNOPSIS
-        int pg_connect (string conn, string fun)
-        int pg_connect (string conn, string fun, string|object obj, mixed extra, ...)
-        int pg_connect (string conn, closure cl, mixed extra, ...)
+        int pg_connect(string conn, string fun)
+        int pg_connect(string conn, string fun, string|object obj,
+                       mixed extra, ...)
+        int pg_connect(string conn, closure cl, mixed extra, ...)
 
 DESCRIPTION
         Open a database connection as directed by <conn>, and assign the
diff --git a/doc/efun/pg_pending b/doc/efun/pg_pending
index 46a6dcc..356911a 100644
--- a/doc/efun/pg_pending
+++ b/doc/efun/pg_pending
@@ -1,7 +1,7 @@
 OPTIONAL
 SYNOPSIS
-        int pg_pending ()
-        int pg_pending (object obj)
+        int pg_pending()
+        int pg_pending(object obj)
 
 DESCRIPTION
         Return the number of pending queries for the connection on the given
diff --git a/doc/efun/pointerp b/doc/efun/pointerp
index a6f2c2c..ee04d0b 100644
--- a/doc/efun/pointerp
+++ b/doc/efun/pointerp
@@ -1,9 +1,10 @@
 SYNOPSIS
         int pointerp(mixed arg)
 
-BESCHREIBUNG
-        Liefert 1, wenn das Argument ein Feld (Array) ist, ansonsten 0.
+DESCRIPTION
+        Return 1 if arg is a pointer, i.e. an array.
 
-SIEHE AUCH
-        closurep(E), floatp(E), mappingp(E), objectp(E), intp(E),
-        referencep(E), stringp(E), symbolp(E), clonep(E)
+SEE ALSO
+        bytesp(E), clonep(E), closurep(E), coroutinep(E), floatp(E), intp(E),
+        lpctypep(E), lwobjectp(E), mappingp(E), objectp(E), referencep(E),
+        stringp(E), structp(E), symbolp(E)
diff --git a/doc/efun/pow b/doc/efun/pow
index c069690..218c8e7 100644
--- a/doc/efun/pow
+++ b/doc/efun/pow
@@ -1,16 +1,16 @@
 SYNOPSIS
         float pow(int|float base, int|float exp)
 
-BESCHREIBUNG
-        Die Potenzfunktion. Sie liefert das Resultat von "<base> hoch <exp>".
+DESCRIPTION
+        The function returns the value of <base> raised to the power of <exp>.
 
-BEISPIELE
-        pow(-2, 3)      -> liefert -8.0
-        pow(8, 1.0/3.0) -> liefert 2.0
+EXAMPLES
+        pow(-2, 3)       - returns -8.0
+        pow(8, 1.0/3.0)  - returns 2.0
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.7.
-        LDMud 3.2.9 erlaubte Integer als Argumente.
+HISTORY
+        Introduced in LDMud 3.2.7.
+        LDMud 3.2.9 added integers as arguments.
 
-SIEHE AUCH
+SEE ALSO
         exp(E), log(E)
diff --git a/doc/efun/present b/doc/efun/present
index 2a9d0be..7c9592a 100644
--- a/doc/efun/present
+++ b/doc/efun/present
@@ -7,71 +7,64 @@
         object present(object ob)
         object present(object ob, object env)
 
-BESCHREIBUNG
-        Wenn ein Objekt mit der Id <str> sich im Inventar oder in der Umgebung
-        von this_object() befindet, wird es zurueck geliefert.
+DESCRIPTION
+        This efun checks if an object is present in a given environment.
+        The object is identified by id <str> or by an object <ob>. This
+        latter form of the efun can be used as a fast way to test for the
+        presence of a known object.
+
+        When searching objects by id, the efun by default returns the first
+        object found matching the id. In order to search for other than the
+        first object, a number can be specified either directly as the
+        argument <n>, or implicetely inside the <str> in the form "<id>
+        <n>".
         
-        Ist das Argument <n> gegeben, wird das n-te Objekt mit Namen <id>
-        zurueck geliefert. Das heisst, der Driver fuehrt fuer alle Objekte
-        im Inventar und in der Umgebung von this_object() die Funktion
-        id(str) aus, bis ein Treffer erzielt wird (wenn ueberhaupt).
+        By default, the efun searches first in the inventory of
+        this_object(), then in its environment. However, if <env> is given,
+        the efun searches just inside <env>.
 
-        Ist <n> nicht gegeben, aber <str> hat die Form "<id> <n>" , wird
-        ebenfalls das n-te Objekt mit Namen <id> zurueckgeliefert.
+        When searching both inventory and environment of this_object(),
+        the numbering is applied linear over both spaces (see examples).
 
-        <str> kann auch ein Objekt (anstatt einer Id) sein, was den Test
-        schneller und einfacher macht.
+        The driver identifies objects by calling the lfun id() in each
+        object.
 
-        Das Argument <env> ist optional. <env> gibt das Objekt an, in welchem
-        nach <str> gesucht wird. Nur das Inventory von <env> wird durchsucht,
-        nicht jedoch dessen Umgebung.
-
-ANMERKUNGEN
-        Wenn die efun sowohl in this_object() als auch dessen Umgebung
-        sucht, werden, soweit es die Numerierung betrifft, die beiden
-        Umgebungen zusammenhaengend betrachtet.
-
-BEISPIELE
+EXAMPLES
         present("chest");
-          --> findet das erste 'chest' Objekt
+          --> returns the first 'chest' object in this object.
 
-        present("chest 2");
-          --> findet das zweite 'chest' Objekt
+        present("chest 2")
+          --> returns the second 'chest' object in this object.
 
-        present("chest 2", 1);
-          --> findet das erste 'chest 2' Objekt
+        present("chest 2", 1)
+          --> returns the first 'chest 2' object in this object.
 
-        Wenn sich eine "chest" im this_object() befindet, und zwei
-        ausserhalb:
-          present("chest", 1) -> findet die chest im Objekt
-          present("chest", 2) -> findet die erste chest ausserhalb
-          present("chest", 3) -> findet die zweite chest ausserhalb
+        Assume there is one "chest" inside the current object, and
+        two in its environment:
+          present("chest", 1) -> returns the chest inside
+          present("chest", 2) -> returns the first chest outside
+          present("chest", 3) -> returns the second chest outside
         
-        Wenn ein Objekt die Forum "<id> <n>" in Verbindung mit einem selbst
-        ueber add_action() gesetzten Verb unterstuetzen soll (damit z. B.
-        "oeffne Kiste 3" funktioniert), kann das folgendermassen geloest
-        werden:
+        A typical 2.4.5-implementation of the "do <id> <n>" command style
+        is:
 
-            void init() { add_action("oeffne_kiste", "oeffne"); }
+            void init() { add_action("open_chest", "open"); }
 
-            int oeffne_kiste(string str)
-            {
-                if(present(str) != this_object() )
-                {
-                    return 0; /* nicht diese Kiste */
-                    ...
-                }
+            int open_chest (string str) {
+              if (present (str) != this_object ())
+                  return 0; /* Not this chest */
+              ...
             }
 
-GESCHICHTE
-        LDMud 3.2.11/3.3.610 fuehrte die (str, n)-Form ein.
-        LDMud 3.3.713 aenderte die Numerierung wenn sowohl Inventory
-          als auch Umgebung durchsucht werden. In der vorherigen
-          Implementierung wurde eine Numerierung auf beiden Umgebungen
-          einzeln angewandt, was zur Folge hatte, dass niedere Objekte
-          in der aeusseren Umgebung nicht gefunden werden koennten, da
-          sie von den Objekten in Inneren verdeckt wurden.
 
-SIEHE AUCH
-        move_object(E), environment(E), this_object(E), present_clone(E),
+HISTORY
+        LDMud 3.2.11/3.3.610 introduced the (str, n) argument form.
+        LDMud 3.3.713 modified the <n> search behaviour so that the
+          numbering is applied over both inventory and environment
+          together. Before, the numbering was individual in each
+          space, leading to situations where low-numbered objects in the
+          environment were hidden by those in the inventory.
+
+SEE ALSO
+        move_object(E), environment(E), this_object(E), present_clone(E)
         id(A), init(A)
diff --git a/doc/efun/present_clone b/doc/efun/present_clone
index e061237..59ecd29 100644
--- a/doc/efun/present_clone
+++ b/doc/efun/present_clone
@@ -1,4 +1,4 @@
-VORLAEUFIG
+PRELIMINARY
 SYNOPSIS
         object present_clone(string str)
         object present_clone(string str, int n)
@@ -10,26 +10,26 @@
         object present_clone(object obj, object env)
         object present_clone(object obj, object env, int n)
 
-BESCHREIBUNG
-        Diese Efun durchsucht das Inventar von <env> nach einem Objekt mit
-        einem bestimmten Blueprint. Wird <env> nicht angegeben, wird in
-        this_object() gesucht. Der Blueprint kann entweder mit seinem Namen
-        <str> angegeben oder als Blueprint des Objekts <obj> werden. Gesucht
-        wird in beiden Faellen aufgrund von load_name().
-        Wird <n> angegeben, wird das <n>. Objekt in <env> gesucht, ansonsten
-        das 1. in <env>.
-        Wird kein passendes Objekt gefunden, wird 0 zurueckgegeben.
 
-        Fuer Driver im Plain Modus beginnt der Name in jedem Fall mit '/', im
-        Compat Modus nicht.
+DESCRIPTION
+        This efun searches the inventory of object <env> (default is 
+        this_object()) for an object with a specific blueprint.
+        The blueprint can be specified either by name <str>, or as the same
+        blueprint as of object <obj>. The matching criteria in both cases is
+        the load_name().
+        If <n> is given, the <n>th object in <env> is returned (if present),
+        otherwise the first object matching <str> or <obj>.
+        If no object in <env> matches the criteria, 0 is returned.
 
-BEISPIELE
-        Angenommen, das Objekt <env> enthalte die Objekte /obj/money#8,
-        /std/weapon#9, /std/weapon#12 und /obj/key in der angegeben
-        Reihenfolge.
+        For plain driver this name starts with a '/', for COMPAT mode
+        drivers it doesn't.
+
+EXAMPLES
+        Assume that object 'env' contains the objects /obj/money#8,
+        /std/weapon#9, /std/weapon#12 and /obj/key in the given order.
 
         +--------------------------------------------------+---------------+
-        | Funktion                                         | Liefert       |
+        | Function call                                    | returns       |
         +--------------------------------------------------+---------------+
         | present_clone("/obj/money", env)                 | /obj/money#8  |
         | present_clone("/std/weapon#12", env)             | /std/weapon#9 |
@@ -39,15 +39,13 @@
         | present_clone("/std/weapon#12", env, 3)          | 0             |
         +--------------------------------------------------+---------------+
 
-        Fuer Driver im Compat Modus liefert die Funktion keine '/' am Anfang.
+REMARKS
+        Note that in contrast to present(), this efun never searches
+        in the environment of <env>.
 
-ANMERKUNGEN
-        Im Unterschied zu present() sucht present_clone() niemals in der
-        Umgebung von <env>.
+HISTORY
+        Introduced in 3.2.7.
+        Searching for the <n>th object was added in 3.3.718.
 
-GESCHICHTE
-        Eingefuehrt in 3.2.7.
-        Die Suche nach dem <n>-ten Objekt wurde in 3.3.718 ergaenzt.
-
-SIEHE AUCH
+SEE ALSO
         load_name(E), present(E)
diff --git a/doc/efun/previous_object b/doc/efun/previous_object
index 2b22080..bf28d5c 100644
--- a/doc/efun/previous_object
+++ b/doc/efun/previous_object
@@ -2,46 +2,44 @@
         object|lwobject previous_object()
         object|lwobject previous_object(int i)
 
-BESCHREIBUNG
-        Liefert einen Pointer auf das letzte Objekt, das einen Aufruf (mittels
-        call_other(), funcall() etc.) auf das aktuelle Objekt this_object()
-        gemacht hat. Wenn dieses aufrufende Objekt inzwischen zerstoert wurde,
-        liefert previous_object() 0.
+DESCRIPTION
+        Returns an object pointer to the object that did a call (call_other(),
+        funcall(), etc) to the current object, if any. If that object is
+        destructed, the function returns 0.
 
-        Wird das Argument <i> angegeben, so verfolgt previous_object() den
-        Aufruf <i> Stufen zurueck. Zum Beispiel liefert previous_object(1) das
-        aufrufende Objekt des aufrufenden Objekts. Fuer <i> muss gelten:
-        0 <= i < call_stack_depth(). Ein Wert <i> < 0 liefert das erste
-        aufrufende Object zurueck.
+        If the optional arg is given, the call_other()s are followed
+        back i times (i.e. previous_object(1) returns the caller of
+        the caller): 0 <= i < caller_stack_depth(). If <i> is less than 0, the
+        first previous object is returned.
 
-        Es gibt einen wichtigen Spezialfall: in Funktionen, die vom Gamedriver
-        auf Grund eines externen Ereignises aufgerufen wurden (zum Beispiel
-        Kommandos, die mit add_action() definiert wurden), liefert
-        previous_object() den Wert von this_object(), previous_object(0)
-        hingegen 0.
+        There is an important special case: in functions called by
+        the gamedriver in reaction to some external event (e.g. commands
+        added by add_action), previous_object() will return this_object(),
+        but previous_object(0) will return 0.
 
-BEISPIELE
-        int sicherheitscheck() {
-            object|lwobject prev;
-            if (!(prev=previous_object()));
-            else if (getuid(prev)  != getuid(this_object()));
-            else if (geteuid(prev) != geteuid(this_object()));
-            else return 1;
-            return 0;
+EXAMPLES
+        int security() {
+           object|lwobject prev;
+           if (!(prev=previous_object()));
+           else if (getuid(prev)  != getuid(this_object()));
+           else if (geteuid(prev) != geteuid(this_object()));
+           else return 1;
+           return 0;
         }
-        void sensible_funktion() {
-            if (!sicherheitscheck())
+        void highly_sensible_func() {
+            if (!security())
                 return;
             ...
         }
 
-        Diese Funktion zeigt, wie man ueberpruefen kann, ob der letzte Aufruf
-        einer Funktion im aktuellen Objekt sicher war, oder ob die
-        Verarbeitung abgebrochen werden sollte.
+        This example shows how we can check if the last call to a
+        function of the current object is secure or if we should abort
+        execution.
 
-FEHLER
-        Werte von <i> < 0 werden wie <i> == 0 behandelt - dies ist historisch.
+BUGS
+        Values of i < 0 are treated as if i == 0 was passed - this is
+        historic.
 
-SIEHE AUCH
-        call_other(E), this_object(E), this_player(E), caller_stack(E),
-        caller_stack_depth(E), extern_call(E)
+SEE ALSO
+        call_other(E), this_object(E), this_player(E),
+        caller_stack(E), caller_stack_depth(E), extern_call(E)
diff --git a/doc/efun/printf b/doc/efun/printf
index f0e1eda..8aea7fd 100644
--- a/doc/efun/printf
+++ b/doc/efun/printf
@@ -1,9 +1,9 @@
 SYNOPSIS
         void printf(string format, ...)
 
-BESCHREIBUNG
-        Eine Mischung aus sprintf() und write(). Gibt void zurueck und den
-        String an den Benutzer aus.
+DESCRIPTION
+        A cross between sprintf() and write(). Returns void and prints
+        the result string to the user.
 
-SIEHE AUCH
+SEE ALSO
         sprintf(E), write(E), terminal_colour(E)
diff --git a/doc/efun/process_string b/doc/efun/process_string
index 8f43053..2e023ba 100644
--- a/doc/efun/process_string
+++ b/doc/efun/process_string
@@ -2,42 +2,46 @@
 SYNOPSIS
         string process_string(string str)
 
-BESCHREIBUNG
-        Durchsucht den String <str> nach "value by function call", das
-        heisst nach @@, gefolgt von einem impliziten Funktionsaufruf. Siehe
-        auch "value_by_function_call" im Prinzipien-Teil der Enzy.
+DESCRIPTION
+        Searches string str for occurrences of a "value by function
+        call", which is an implicit function call surrounded by @@. See
+        "value_by_function_call" in the principles section.
 
-        Der Wert sollte eine String in dieser Form enthalten:
+        The value should contain a string like this:
         @@function[:filename][|arg|arg]@@
 
-        <function> muss einen String zurueckliefern, sonst wird der zu
-        verarbeitende String unveraendert zurueck geliefert.
+        <function> must return a string or else the string which should be
+        processed will be returned unchanged.
 
-        process_string() fuehrt keine Rekursion ueber zurueck gelieferte
-        Werte durch: wenn eine Funktion wiederum eine implizite Funktion
-        zurueckliefert, wird diese zweite Funktion nicht mehr verarbeitet.
+        process_string() does not recurse over returned
+        replacement values. If a function returns another function
+        description, that description will not be replaced.
 
-        Sowohl <filename> wie auch die Argumente <arg> sind optional.
+        Both the filename and the args are optional.
 
-BEISPIELE
+        Consecutive function calls can be written adjacent:
+
+          @@function1@@function2@@
+
+EXAMPLES
         string foo(string str) {
-            return "ab"+str+"ef";
+           return "ab"+str+"ef";
         }
-
         void func() {
-            write(process_string("@@foo|cd@@"+"\n");
+           write(process_string("@@foo|cd@@")+"\n");
         }
 
-        func() gibt jetzt an den Benutzer den String "abcdef" aus.
+        The function func() will print out the string "abcdef".
 
-FEHLER
-        Die Verwendung von process_string() kann massive Sicherheitsprobleme
-        verursachen.
+BUGS
+        Using process_string() can lead to severe security problems.
 
-GESCHICHTE
-        Wegen der Sicherheitsprobleme ist process_string() seit 3.2.1@34
-        optional.
+HISTORY
+        Because of the security problems, process_string() is an
+        optional efun since 3.2.1@34
+        LDMud 3.3.160 removed the undocumented 'feature' that a function call
+        declaration could be terminated by a space. In turn this now allows
+        the use of arguments with spaces.
 
-SIEHE AUCH
+SEE ALSO
         notify_fail(E), closures(LPC), get_bb_uid(M)
-
diff --git a/doc/efun/program_name b/doc/efun/program_name
index 80cb4ab..bdd55d4 100644
--- a/doc/efun/program_name
+++ b/doc/efun/program_name
@@ -2,37 +2,32 @@
         string program_name()
         string program_name(object|lwobject obj)
 
-BESCHREIBUNG
-        Liefert den Name des Programms, aus dem <obj> kompiliert wurde.
-        Wenn <obj> nicht angegeben wird, wird standardmaessig this_object()
-        verwendet.
+DESCRIPTION
+        Returns the name of the program of <obj>, resp. the name of the
+        program of the current object if <obj> is omitted.
 
-        Der Name ist fuer Clones der Name des Files, aus dem der Blueprint
-        kompiliert wurde. Der Name wechselt, wenn ein Objekt sein Programm
-        durch replace_program() aendert.
+        The returned name is usually the name from which the blueprint
+        of <obj> was compiled (the 'load name'), but changes if an object
+        replaces its programs with the efun replace_program().
 
-        Fuer den Spezialfall, dass <obj> als 0 uebergeben wird, liefert
-        program_name() 0 zurueck.
+        As a special case, if <ob> is passed as 0, the function will
+        return 0.
 
-        Der Name endet immer mit '.c'. Er beginnt mit einem '/', wenn der
-        Driver sich nicht im Compat Modus befindet.
+        The name always ends in '.c'. It starts with a '/' unless the
+        driver is running in COMPAT mode.
 
-BEISPIELE
+        CAVEAT: This efun swaps in the program if it is swapped out.
+
+EXAMPLES
         object o;
-        o = clone_object("/std/dings");
-        write(program_name(o));
+        o = clone_object("/std/thing");
+        write(program_name(o));  --> writes "/std/thing.c" in !compat mode
+                                        and "std/thing.c"  in compat mode
 
-        liefert:
-        --> "/std/dings.c", wenn der Driver nicht im Compat Modus laeuft.
-        --> "std/dings.c", wenn der Driver im Compat Modus laeuft.
+HISTORY
+        Introduced in LDMud 3.2.6.
+        LDMud 3.2.9 allowed a 0 argument.
 
-ANMERKUNGEN
-        Die Efun swapt das Programm ein, wenn dieses ausgelagert ist.
-
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6.
-        Seit 3.2.9 ist das Argument 0 erlaubt.
-
-SIEHE AUCH
+SEE ALSO
         clone_object(E), clonep(E), load_name(E), load_object(E),
         object_name(E), replace_program(E)
diff --git a/doc/efun/program_time b/doc/efun/program_time
index e7da010..5af4d9b 100644
--- a/doc/efun/program_time
+++ b/doc/efun/program_time
@@ -1,14 +1,13 @@
 SYNOPSIS
         int program_time()
-        int program_time(object|lwobject obj)
+        int program_time(object|lwobject ob)
 
-BESCHREIBUNG
-        Gibt den Zeitpunkt an, zu dem das Objekt <obj> (bzw. this_object(),
-        wenn nichts angegeben wurde) erzeugt, d.h. kompiliert wurde.
+DESCRIPTION
+        Returns the creation (compilation) time of the object's
+        program. Default is this_object(), if no arg is given.
 
-ANMERKUNGEN
-        Diese Efun swapt das Programm zurueck ins Objekt, wenn es ausgelagert
-        war.
+        CAVEAT: If the objects program is swapped out, this efun
+          swaps it back in.
 
-SIEHE AUCH
+SEE ALSO
         object_time(E), program_name(E)
diff --git a/doc/efun/query_actions b/doc/efun/query_actions
index 688ddc3..59e9c44 100644
--- a/doc/efun/query_actions
+++ b/doc/efun/query_actions
@@ -2,37 +2,32 @@
         #include <commands.h>
         #include <sent.h>
 
-        mixed * query_actions(object|string ob, mixed mask_or_verb)
+        mixed * query_actions(object ob, mixed mask_or_verb)
 
-BESCHREIBUNG
-        Das erste Argument von query_actions() ist entweder ein Objekt
-        oder der Dateiname eines Objekts. Das zweite Argument muss
-        entweder eine Bitmaske (ein Integer) oder ein String sein.
+DESCRIPTION
+        query_actions takes either an object or a filename as first
+        argument and a bitmask (int) or string as a second argument.
+        If the second argument is a string, query_actions() will return
+        an array containing information (see below) on the verb or
+        zero if the living object "ob" cannot use the verb. If the
+        second argument is a bitmask, query_actions() will return a
+        flat array containing information on all verbs added to ob.
+        The second argument is optional (default is QA_VERB).
+            QA_VERB       ( 1):  the verb
+            QA_TYPE       ( 2):  type
+            QA_SHORT_VERB ( 4):  short_verb
+            QA_OBJECT     ( 8):  object
+            QA_FUNCTION   (16): function
 
-        Ist das zweite Argument ein String, liefert query_actions() ein
-        Array mit Informationen ueber das Verb oder 0 zurueck, wenn
-        das lebendige Objekt <ob> das Verb nicht verwenden kann.
+        "type" is one of the values defined in <sent.h> 
+        (which is provided with the parser source).
 
-        Wenn das zweite Argument ein Integer ist, liefert query_actions()
-        ein flaches Array mir den Informationen entsprechend der Bitmaske
-        zu allen Verben von <ob>.
+        SENT_PLAIN        added with add_action (fun, cmd);
+        SENT_SHORT_VERB   added with add_action (fun, cmd, AA_SHORT);
+        SENT_NO_SPACE     added with add_action (fun, AA_NOSPACE);
+        SENT_MARKER       internal, won't be in the returned array
+        negative value: The verb given by the player has to match only
+          the leading -<value> characters of the action's verb.
 
-            QA_VERB         ( 1):   das Verb,
-            QA_TYPE         ( 2):   der Typ,
-            QA_SHORT_VERB   ( 4):   das short_verb,
-            QA_OBJECT       ( 8):   das Objekt,
-            QA_FUNCTION     (16):   die Funktion.
-
-        Der Typ ist ein Wert wie in <sent.h> definiert, der mit dem
-        Driver-Quellcode geliefert wird.
-
-            SENT_PLAIN       durch add_action(fun, cmd) hinzugefuegt
-            SENT_SHORT_VERB  durch add_action(fun, cmd, 1) hinzugefuegt
-            SENT_NO_SPACE    durch add_action(fun); add_xverb(cmd);
-            SENT_NO_VERB     nur eine Funktion mit add_action(fun), ohne Verb
-            SENT_MARKER      intern, ist nicht im Array enthalten
-            negativer Wert   das Verb muss nur in den ersten -<wert> Zeichen
-                             uebereinstimmen.
-
-SIEHE AUCH
+SEE ALSO
         add_action(E), init(A)
diff --git a/doc/efun/query_command b/doc/efun/query_command
index e42e4da..dc7b6c0 100644
--- a/doc/efun/query_command
+++ b/doc/efun/query_command
@@ -1,33 +1,29 @@
 SYNOPSIS
-        string query_command()
+        string query_command(void)
 
-BESCHREIBUNG
-        Liefert den Text des aktuellen Kommandos oder 0, wenn keines
-        ausgefuehrt wird.
+DESCRIPTION
+        Give the text of the current command, or 0 if not executing
+        from a command.
 
-        Der Text entspricht dem, was der Parser "sieht", also nachdem
-        modify_command() ausgefuehrt und nachfolgende Leerzeichen
-        abgeschnitten wurden.
+        The text is the command as seen by the parser, ie. after
+        modify_command and after stripping trailing spaces.
 
-        query_command() liefert 0, wenn es von einer Funktion gestartet
-        wurde, die wiederum von einem call_out() oder dem heart_beat()
-        aufgerufen wurde. Auch Kommandos, die beim Userlogin aufgerufen
-        werden, liefern 0.
+        query_command() returns 0 when invoked by a function which was started
+        by a call_out or the heart beat.  Also when a user logs in
+        query_command() returns 0.
 
-BEISPIELE
+EXAMPLES
         void init() {
-            ...
-            add_action("sing","sing");
-            ...
+           ...
+           add_action("sing","sing");
+           ...
         }
-
         int sing(string str) {
-            write("Dein Kommando war:"+query_command()+"\n");
-            return 1;
+           write("Your command was:"+query_command()+"\n");
+           return 1;
         }
 
-        Jedesmal, wenn jemand "sing blafasel" eingibt, liefert das Programm
-        "Dein Kommando war: sing blafasel".
+        When ever you type "sing ..." you get "Your command was: sing ...".
 
-SIEHE AUCH
+SEE ALSO
         add_action(E), query_verb(E)
diff --git a/doc/efun/query_notify_fail b/doc/efun/query_notify_fail
index ef3a521..79c65aa 100644
--- a/doc/efun/query_notify_fail
+++ b/doc/efun/query_notify_fail
@@ -2,17 +2,19 @@
         mixed query_notify_fail()
         mixed query_notify_fail(int flag)
 
-BESCHREIBUNG
-        Wenn <flag> nicht angegeben oder 0 ist, liefert die Funktion den String
-        oder die Closure, die zuletzt als Fehlermeldung fuer ein Kommando
-        gesetzt wurde (mit notify_fail()).
+DESCRIPTION
+        If <flag> is not given or 0: return the string or closure which
+        was last set as error message for this command (with notify_fail()).
 
-        Wurde keine Meldung gesetzt, wird 0 geliefert.
+        If <flag> is given and 1: return the object which issued the last
+        notify_fail().
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.7.
-        LDMud 3.2.8 fuegte den Paramter <flag> hinzu.
+        If nothing was set yet, return 0.
 
-SIEHE AUCH
+HISTORY
+        Introduced in LDMud 3.2.7.
+        LDMud 3.2.8 added the <flag> parameter.
+
+SEE ALSO
         add_action(E), query_verb(E), query_command(E), notify_fail(E),
         hooks(C)
diff --git a/doc/efun/query_verb b/doc/efun/query_verb
index 2890174..ca8a086 100644
--- a/doc/efun/query_verb
+++ b/doc/efun/query_verb
@@ -1,42 +1,41 @@
 SYNOPSIS
-        string query_verb()
+        string query_verb(void)
         string query_verb(int flag)
 
-BESCHREIBUNG
-        Liefert das Verb des aktuellen Kommandos oder 0, wenn kein Kommando
-        bearbeitet wird. Wenn <flag> nicht angegeben oder 0 ist, wird das Verb
-        wie vom User eingegeben geliefert (das ist das erste Wort der
-        Inputzeile des Spielers, bis zum (aber ohne) den ersten Leerschlag /
-        Zeilenumbruch). Wenn <flag> nicht 0 ist, wird das Verb entsprechend
-        der add_action() zurueck gegeben.
+DESCRIPTION
+        Return the verb of the current command, of 0 if not executing from
+        a command. If <flag> is 0 or not given, the verb as given by the user
+        is returned (this is the first word from the line input by the player,
+        up to but not including the first space or lineend). If <flag> is
+        non-0, the verb as specified in the add_action() statement is returned.
 
-BEISPIELE
+EXAMPLES
         void init() {
-            ...
-            add_action("sing","singe");
-            add_action("sing","jodel", 1);
-            ...
+           ...
+           add_action("sing","sing");
+           add_action("sing","chant", 1);
+           ...
         }
-
         int sing(string str) {
-            write("Das Kommando war:"+query_verb()+(str ? str : "")+"\n");
-            write("Das Verb war:"+query_verb(1)+(str ? str : "")+"\n");
+           write("Your command was: "+query_verb()+(str ? str : "")+"\n");
+           write("The action verb was: "+query_verb(1)+(str ? str : "")+"\n");
+           return 1;
         }
 
-        Das Kommando "sing blafasel" liefert:
-            Das Kommando war: sing
-            Das Verb war: sing
+        The command 'sing ...' will print:
+            Your command was: sing
+            The action verb was: sing
 
-        Das Kommando "jodel blafasel" liefert:
-            Das Kommando war: jodel
-            Das Verb war: jodel
+        The command 'chant ...' will print:
+            Your command was: chant
+            The action verb was: chant
 
-        Das Kommando "jodele blafasel" liefert:
-            Das Kommando war: jodele
-            Das Verb war: jodel
+        The command 'chantit ...' will print:
+            Your command was: chantit
+            The action verb was: chant
 
-GESCHICHTE
-        LDMud 3.2.9. fuehrte das optionale Argument <flag> ein.
+HISTORY
+        LDMud 3.2.9 added the optional flag argument.
 
-SIEHE AUCH
+SEE ALSO
         add_action(E), query_command(E)
diff --git a/doc/efun/quote b/doc/efun/quote
index 926d71f..689947b 100644
--- a/doc/efun/quote
+++ b/doc/efun/quote
@@ -1,16 +1,16 @@
 SYNOPSIS
-        mixed quote(mixed arg)
+        mixed quote(mixed)
 
-BESCHREIBUNG
-        Konvertiert ein Array zu einem quoted Array und Strings zu Symbolen.
-        Symbole und quoted Arrays werden erneut gequoted.
+DESCRIPTION
+        Converts arrays to quoted arrays and strings to symbols.
+        Symbols and quoted arrays get quoted once more.
 
-BEISPIELE
+EXAMPLES
         quote("foo") -> 'foo
         quote(({1,2,3})) -> '({1,2,3})
 
-GESCHICHTE
-        Eingefuehrt in 3.2@70.
+HISTORY
+        Introduced in 3.2@70
 
-SIEHE AUCH
-        sympolp(E), unquote(E)
+SEE ALSO
+        symbolp(E), unquote(E)
diff --git a/doc/efun/raise_error b/doc/efun/raise_error
index e063420..fc25c00 100644
--- a/doc/efun/raise_error
+++ b/doc/efun/raise_error
@@ -1,18 +1,16 @@
 SYNOPSIS
         void raise_error(string arg)
 
-BESCHREIBUNG
-        Bricht die Ausfuehrung des laufenden Programms ab. Wenn das Programm
-        durch catch() aufgerufen wurde, liefert dieses catch() <arg> als
-        Fehlercode, sonst wird <arg> als Fehlermeldung ausgegeben.
+DESCRIPTION
+        Abort execution. If the current program execution was
+        initiated by catch(), that catch expression will return arg as
+        error code, else the arg will printed as error message.
+        
+        This is very similar to throw(), but while throw() is intended to be
+        called inside catch(), raise_error() can be called anywhere.
+        Furthermore, raise_error() includes the complete error handling
+        with generation of a stack backtrace, making it a very expensive
+        function.
 
-        raise_error() gleicht in der Funktion throw(), aber waehrend throw()
-        aus catch() heraus aufgerufen werden soll, kann raise_error() von
-        ueberall her aufgerufen werden.
-
-        Da raise_error() sich wie andere 'echte' Laufzeitfehler verhaelt,
-        einschliesslich der Erzeugung eines Stack Backtraces, ist diese
-        Funktion sehr zeitintensiv.
-
-SIEHE AUCH
+SEE ALSO
         catch(E), throw(E)
diff --git a/doc/efun/random b/doc/efun/random
index d3f876f..a744312 100644
--- a/doc/efun/random
+++ b/doc/efun/random
@@ -1,16 +1,15 @@
 SYNOPSIS
         int random(int n)
 
-BESCHREIBUNG
-        Liefert eine Zufallszahl im Bereich [0 .. n-1].
+DESCRIPTION
+        Returns a number in the random range [0 .. n-1].
 
-        Dieser Zufallszahlgenerator liefert eine gleichmaessige Verteilung von
-        Zahlen ueber einen grossen Bereich, ohne Wiederholung von Sequenzen
-        waehrend einer langen Zeit. Der Nachteil dieser (wuenschenswerten)
-        Qualitaeten ist, dass wenn viele Zahlen in einem kleinen Bereich in
-        kurzer Zeit generiert werden, einige Zahlen sehr viel haeufiger
-        auftreten als andere.
+        The random number generator is proven to deliver an equal distribution
+        of numbers over a big range, with no repetition of number sequences
+        for a long time. The downside of these (desirable) qualities is that
+        when generating numbers in a small range over short time, certain
+        numbers will appear far more often than others.
 
-        Die einzige Loesung hierzu ist eine spezielle simul_efun, die geeignete
-        Schritte unternimmt, um eine gleichmaessige Verteilung ueber kleine
-        Bereiche in kurzen Zeitraeumen zu erreichen.
+        The only solution is the implementation of a special simul_efun which
+        takes special steps to implement an equal distribution over small
+        ranges and short times.
diff --git a/doc/efun/read_bytes b/doc/efun/read_bytes
index c42109c..0a3c228 100644
--- a/doc/efun/read_bytes
+++ b/doc/efun/read_bytes
@@ -1,19 +1,23 @@
 SYNOPSIS
-        bytes read_bytes(string file, int start, int anzahl)
+        bytes read_bytes(string file, int start, int number)
 
-BESCHREIBUNG
-        Liest eine bestimmte Anzahl Bytes aus dem File <file>. Wenn <start>
-        nicht angegeben oder 0 ist, wird das File von Beginn weg gelesen,
-        sonst vom Byte mit der Nummer <start>. Wenn <start> negativ ist,
-        werden die Bytes vom Ende des Files her gezaehlt. <anzahl> ist die
-        Anzahl Bytes, die gelesen werden sollen. Werte von 0 oder negative
-        Werte sind zwar moeglich, aber wenig sinnvoll.
+DESCRIPTION
+        Reads a given amount of bytes from file.
+        If <start> is not given or 0, the file is read from the
+        beginning, else from the <start>th byte on. If <start> is
+        negative, it is counted from the end of the file. If this
+        would extend beyond the beginning of the file, it is read
+        from the beginning.
+        <number> is the number of bytes to read. 0 or negative values
+        are possible, but not useful.
+        If <start> would be beyond the end of the file, 0 is returned
+        instead of a string.
 
-        Wenn <start> ausserhalb der Groesse des Files liegt, liefert
-        read_byte() anstelle eines Strings 0 zurueck.
+        The maximum bytes being read per call is LIMIT_BYTE (see
+        query_limits()).
 
-        Die max. Anzahl einzulesender Bytes pro Aufruf dieser Funktion
-        betraegt LIMIT_BYTE (s. query_limits()).
+HISTORY
+        LDMud 3.6.5 accepts start offsets before the beginning of the file.
 
-SIEHE AUCH
+SEE ALSO
         read_file(E), write_bytes(E), write_file(E)
diff --git a/doc/efun/read_file b/doc/efun/read_file
index 3c58ec1..a05fa1c 100644
--- a/doc/efun/read_file
+++ b/doc/efun/read_file
@@ -1,26 +1,27 @@
 SYNOPSIS
-        string read_file(string file, int start, int anzahl, string encoding)
+        string read_file(string file, int start, int number, string encoding)
 
-BESCHREIBUNG
-        Liest Zeilen aus einem File <file>. Wenn <start> angegeben ist und
-        nicht 0, wird von Beginn der Zeile <start> an gelesen; ist <start> 0
-        oder nicht angegeben, wird vom Beginn des Files gelesen.
+DESCRIPTION
+        Reads lines from file.
+        If <start> is not given or 0, the file is read from the
+        beginning, else the efun starts reading at the beginning of line
+        <start>.
 
-        Wenn <anzahl> nicht angegeben oder 0 ist, wird das gesamte File
-        gelesen, sonst nur <anzahl> Zeilen.
+        If <number> is not given or 0, the whole file is read, else
+        just the given amount of lines.
 
-        Mit <encoding> kann man den Zeichensatz spezifieren, der beim
-        Lesen der Datei angewandt werden soll. Falls er nicht angeben oder
-        0 ist, so wird der Hook H_FILE_ENCODING verwendet.
+        <encoding> denotes the encoding to be used for decoding the file.
+        If it is not given or 0, the H_FILE_ENCODING driver hook will
+        be used.
 
-        Wenn <start> ausserhalb der Groesse des Files liegt, liefert
-        read_file() anstelle eines Strings 0 zurueck.
+        If <start> would be outside the actual size of the file, 0 is
+        returned instead of a string.
 
-        Die max. Anzahl einzulesender Bytes (nicht Zeilen!) pro Aufruf dieser
-        Funktion betraegt LIMIT_FILE (s. query_limits()).
+        The maximum number of characters (not lines!) being read per
+        call is LIMIT_FILE (see query_limits()).
 
-GESCHICHTE
-        LDMud 3.6.0 fuegte den <encoding>-Parameter hinzu.
+HISTORY
+        LDMud 3.6.0 added the <encoding> parameter.
 
-SIEHE AUCH
+SEE ALSO
         read_bytes(E), write_file(E), hooks(C)
diff --git a/doc/efun/referencep b/doc/efun/referencep
index fa4bdda..96fbc26 100644
--- a/doc/efun/referencep
+++ b/doc/efun/referencep
@@ -1,13 +1,14 @@
 SYNOPSIS
         int referencep(mixed arg)
 
-BESCHREIBUNG
-        Liefert 1, wenn das Argument an die aktuelle Funktion per Referenz
-        uebergeben wurde, ansonsten 0.
+DESCRIPTION
+        returns true if arg was passed by reference to the current
+        function, instead of the usual call-by-value.
 
-        Man beachte, dass das Argument als Referenz an referencep()
-        uebergeben werden muss, z. B. referencep(&x).
+        Note that arg has to be passed by reference to the efun,
+        a.g. referencep(&x).
 
-SIEHE AUCH
-        bytesp(E), closurep(E), floatp(E), mappingp(E), objectp(E), intp(E),
-        pointerp(E), stringp(E), symbolp(E), clonep(E), references(LPC)
+SEE ALSO
+        references(LPC), bytesp(E), clonep(E), closurep(E), coroutinep(E),
+        floatp(E), intp(E), lpctypep(E), lwobjectp(E), mappingp(E),
+        objectp(E), pointerp(E), stringp(E), structp(E), symbolp(E)
diff --git a/doc/efun/regexp b/doc/efun/regexp
index c8f8910..9dc0fed 100644
--- a/doc/efun/regexp
+++ b/doc/efun/regexp
@@ -1,62 +1,40 @@
 SYNOPSIS
+        #include <regexp.h>
+
         string * regexp(string *list, string pattern)
+        string * regexp(string *list, string pattern, int opt)
 
-BESCHREIBUNG
-        Liefert ein neues Array mit all jenen Strings aus list zurueck,
-	welche auf das Muster pattern passen. Diese Funktion verwendet
-	dieselbe Syntax fuer regulaere Ausdruecke wie ed():
+DESCRIPTION
+        Match the pattern <pattern> (interpreted according to <opt> if
+        given) against all strings in list, and return a new array with all
+        strings that matched.
 
-        . Passt auf jedes beliebige Zeichen.
+        If there is an error in the regular expression, a runtime
+        error will be raised.
 
-        ^ Passt auf den Beginn einer Zeichenkette.
-
-        $ Passt auf das Ende einer Zeichenkette.
-
-        \< Passt auf das Beginn eines Wortes.
-
-        \> Passt auf das Ende eines Wortes.
-
-        \B Passt auf eine leere Zeichenkette an einem Wortrand
-	   (sollte aehnlich wie das Symbol zur Emacs-Kompatibilitaet in
-	   GNU egrep sein), seit 3.2@249
-
-        x|y Passt entweder auf den regulaeren Ausdruck x oder y.
-
-        () Verwendet den eingeschlossenen regulaeren Ausdruck wie einen
-	   'simplen' Ausdruck.
-
-        x* Der regulaere Ausdruck x passt beliebig oft (0 oder mehr).
-
-        x+ Der regulaere Ausdruck x passt mindestens einmal (1 oder mehr).
-
-        [..] Passt auf jedes in den Klammern eingeschlossenes Zeichen.
-
-        [^ ..] Passt auf jedes Zeichen, welches nicht in den Klammern
-	       eingeschlossen ist. Das .. ist durch einzelne Zeichen oder
-	       Bereiche von Zeichen zu ersten:
-        [abc] Passt auf a, b oder c.
-        [ab0-9] Passt auf a, b, c oder eine beliebige Ziffer.
-        [^a-z] Passt auf keinen klein geschriebenen Buchstaben.
-
-        \c Passt auf das Zeichen c, selbst wenn es eines der Sonderzeichen ist.
-
-        Wenn es einen Fehler im regulaeren Ausdruck gibt, wird ein
-	Laufzeitfehler ausgeloest.
-
-BEISPIELE
+EXAMPLES
         string strs;
-        if (strs = regexp(({ "Bitte helfen sie mir, Sir John." }),
-                          "\\<helfen\\>.*\\<mir\\>")) {
-           if (sizeof(strs)
-              write("Es passt.\n");
+        string pattern;
+
+        if (regexp_package() == RE_PCRE)
+            pattern = "\\<help\\>.*\\<me\\>";
+        else
+            pattern = "\\bhelp\\b.*\\bme\\b";
+
+        if (strs = regexp(({"please, help me Sir John."}), pattern)) {
+            if (sizeof(strs)
+                write("It matches.\n");
         }
 
-        Der regulaere Ausdruck wird den uebergebenen String (welcher in
-	einem Array verpackt wurde) daraufhin ueberpruefen, ob
-	sowas wie "helfen ... mir" darin vorkommt.
+        The regular expression will test the given string (which is
+        packed into an array) if there is something like "help ... me"
+        inside of it.
 
-GESCHICHTE
-        LDMud 3.2.9 fuegte das Sonderzeichen '+' hinzu.
+HISTORY
+        LDMud 3.3 added the optional <opt> argument.
+        Since 3.5.0 a error is raised if RE_PCRE is specified in <opt>, but
+        the driver lacks PCRE support.
 
-SIEHE AUCH
-        regexplode(E), regreplace(E), sscanf(E)
+SEE ALSO
+        regexplode(E), regmatch(E), regreplace(E), regexp_package(E), sscanf(E),
+        regexp(C)
diff --git a/doc/efun/regexp_package b/doc/efun/regexp_package
index 8b8d29f..ae5ccaa 100644
--- a/doc/efun/regexp_package
+++ b/doc/efun/regexp_package
@@ -19,7 +19,7 @@
         If there is an error in the regular expression, a runtime
         error will be raised.
 
-EXAMPLE
+EXAMPLES
         string strs;
         string pattern;
         
@@ -28,12 +28,9 @@
         else
             pattern = "\\bhelp\\b.*\\bme\\b";
 
-        if (strs = regexp( ({"please, help me Sir John."}),
-                         , pattern
-                         ))
-        {
-           if (sizeof(strs)
-              write("It matches.\n");
+        if (strs = regexp(({"please, help me Sir John."}), pattern)) {
+            if (sizeof(strs)
+                write("It matches.\n");
         }
 
         The regular expression will test the given string (which is
diff --git a/doc/efun/regexplode b/doc/efun/regexplode
index 17970bc..ca67db8 100644
--- a/doc/efun/regexplode
+++ b/doc/efun/regexplode
@@ -1,13 +1,30 @@
 SYNOPSIS
+        #include <regexp.h>
+
         string * regexplode(string text, string pattern)
+        string * regexplode(string text, string pattern, int opt)
 
-BESCHREIBUNG
-        regexplode() verhaelt sich aehnlich wie explode(), akzeptiert aber
-        auch regulaere Ausdruecke als Trennzeichen. Im Ergebnisarray ist
-        jedes zweite Element ein Trennzeichen.
+DESCRIPTION
+        This function is similar to explode but accepts a regular
+        expression <pattern> as delimiter (interpreted according to <opt>
+        if given).
 
-GESCHICHTE
-        Eingefuehrt in 3.2@61.
+        If flag RE_OMIT_DELIM is not set in <opt>, then every second element
+        in the result vector will be the text that matched the delimiter.
+        If the flag is set, then the result vector will contain only
+        the text between the delimiters.
 
-SIEHE AUCH
-        explode(E), regexp(E), regreplace(E)
+EXAMPLES
+        regexplode("abcdef", "cde")                -> ({ "ab", "cde", "f" })
+        regexplode("abcdef", "cde", RE_OMIT_DELIM) -> ({ "ab", "f" })
+
+HISTORY
+        Introduced in 3.2@61.
+        LDMud 3.3 added the optional <opt> argument and the RE_OMIT_DELIM
+          flag.
+        Since 3.5.0 a error is raised if RE_PCRE is specified in <opt>, but
+        the driver lacks PCRE support.
+
+SEE ALSO
+        explode(E), regexp(E), regmatch(E), regreplace(E),
+        regexp_package(E), regexp(C)
diff --git a/doc/efun/regmatch b/doc/efun/regmatch
index dbb73f5..b29588c 100644
--- a/doc/efun/regmatch
+++ b/doc/efun/regmatch
@@ -1,11 +1,11 @@
 SYNOPSIS
         #include <regexp.h>
 
-        string  regmatch (string text, string pattern)
-        string  regmatch (string text, string pattern, int opt)
-        string  regmatch (string text, string pattern, int opt, int start)
-        string *regmatch (string text, string pattern, int opt)
-        string *regmatch (string text, string pattern, int opt, int start)
+        string   regmatch(string text, string pattern)
+        string   regmatch(string text, string pattern, int opt)
+        string   regmatch(string text, string pattern, int opt, int start)
+        string * regmatch(string text, string pattern, int opt)
+        string * regmatch(string text, string pattern, int opt, int start)
 
 DESCRIPTION
         Match the string <txt> against <pattern> (interpreted according
@@ -30,7 +30,8 @@
         new index is usually equal the length of the match, but at least one
         higher than the original start index.
 
-EXAMPLE
+
+EXAMPLES
         regmatch("abcdefcdf", "cd")    -> "cd"
         regmatch("abcdefcdf", "cd(e)") -> "cde"
 
@@ -41,6 +42,8 @@
         Introduced in LDMud 3.3.198.
         Modified in 3.3.214 to return 0 for non-matches, and to take and
         return a start position.
+        Since 3.5.0 a error is raised if RE_PCRE is specified in <opt>, but
+        the driver lacks PCRE support.
 
 SEE ALSO
         regexplode(E), regreplace(E), regexp(E), regexp_package(E), regexp(C)
diff --git a/doc/efun/regreplace b/doc/efun/regreplace
index e0e7cf3..912e864 100644
--- a/doc/efun/regreplace
+++ b/doc/efun/regreplace
@@ -1,51 +1,61 @@
-SYNOPSIS
-      string regreplace(string txt, string pattern, 
-                            string|closure replacepattern, int flags)
-
-BESCHREIBUNG
-      Die Funktion durchsucht den String txt nach einem Vorkommen
-      des regulaeren Ausdrucks pattern, und ersetzt ihn durch
-      den String replacepattern. (replacepattern kann auch eine Closure
-      sein. Sie bekommt als argument den passenden Substring und muss
-      den Ersatzstring zurueckliefern.)
-
-      Im replacestring kann man via '&' auf den zum Suchausdruck
-      passenden Teilstring im Original zugreifen. Mit \n (wobei n
-      eine Ganzzahl ist) kann man auf den n-ten Unterausdruck
-      des regulaeren Ausdrucks zugreifen. Um "&" oder "\\1" als
-      Ersetzung zu erreichen, muss "\\&" bzw "\\\\1" verwendet werden.
-
-      Beim Flag bestimmt ein gesetztes Bit 0, dass der Ausdruck so oft
-      wie vorhanden ersetzt wird, sonst nur das erste Auftreten.
-      Bit 1 bestimmt, ob der regulaere Ausdruck 'ed' oder 'sed' kompatibel
-      ist (Bit geloescht) oder 'ex' kompatibel (gesetzt).
-
-      Die Funktion wirkt wie s/pattern/replacepattern/flags in
-      Editoren wie vi oder sed. Sie ist besonders gut geeignet um
-      variable Strings zu ersetzen, im Gegensatz zu regexplode, wo
-      man den String nur nach einem regulaeren Ausdruck zerlegen kann.
-
-BEISPIELE
-      string msgin;
-
-      /* Sucht nach 'teilt Dir mit: ' und schliesst den nachfolgenden
-      ** Text mit <underline> und </underline> ein; bei jedem Auftreten.
-      */
-      msgin = regreplace(msgin, "teilt Dir mit: (.*)",
-             "teilt Dir mit: <underline>\\1</underline>", 1);
-
-      /* Ersetzt die <underline> html-Tags durch die vt100
-      ** Escape-Sequenzen fuer Unterstreichung
-      */
-      txt = regreplace(txt, "<underline>", "<ESC>[5m", 1);
-
-      /* Ersetzt das Wort HOUSE in Kleinbuchstaben. */
-      txt = regreplace(txt, "HOUSE",
-              function string (string s) {return lower_case(s);},
-              1);
-
-AUTOR
-      Marcus@TAPPMud schrieb die Original-efun (und die englische Manpage).
-
-SIEHE AUCH
-      regexp(E), regexplode(E), sscanf(E)
+SYNOPSIS
+        #include <regexp.h>
+
+        string regreplace(string txt, string pattern,
+                          closure|string replacepattern, int flags)
+
+DESCRIPTION
+        This function looks through txt looking for the regular
+        expression pattern. If it finds it, it replaces it by the
+        replacepattern.
+
+        The replacepattern can be a constant string, or a closure taking
+        the matched substring and the position at which it was found
+        as arguments and returning the replacement pattern string.
+
+        The flag is a bitmask of the usual regexp options. Additionally
+        the efun recognizes RE_GLOBAL: if set, the search and replace
+        is repeated as often as the pattern matches.
+
+        The function returns the modified string (or the original if it
+        wasn't modified).
+
+        The function behaves like the s/pattern/replacepattern/flags
+        in editors as ed/vi or sed. The power of this function lies in
+        replacing variable strings (as opposed to regexplode, where
+        you can explode by regular expression, but not implode...)
+
+
+EXAMPLES
+        string msgin;
+
+        /* Checks msgin for the string 'tells you: ' and all following
+         * characters and encloses those characters by <underline>
+         * and </underline>. global.
+         */
+        msgin = regreplace(msgin, "tells you: (.*)",
+                 "tells you: <underline>\\1</underline>", 1);
+
+        /* replaces all <underline> html tags by the vt100 escape
+         * sequence for underline.
+         */
+        txt = regreplace(txt, "<underline>", "<ESC>[5m", 1);
+
+        /* Put the word HOUSE into lower case. */
+        txt = regreplace(txt, "HOUSE",
+                function string (string s) {return lower_case(s);},
+                1);
+
+
+HISTORY
+        Introduced in 3.2.1@125.
+        The use of a closure as replacepattern was introduced in
+        LDMud 3.2.9.
+
+AUTHOR
+        Marcus@TAPPMud contributed the original idea for the efun and the
+        man page.
+
+SEE ALSO
+        regexp(E), regexplode(E), regmatch(E), regexp_package(E),
+        sscanf(E), trim(E), regexp(C)
diff --git a/doc/efun/remove_action b/doc/efun/remove_action
index 8dee7bf..2a86d5a 100644
--- a/doc/efun/remove_action
+++ b/doc/efun/remove_action
@@ -1,23 +1,19 @@
 SYNOPSIS
         int remove_action(int|string verb)
-        int remove_action(int|string verb, object obj)
+        int remove_action(int|string verb, object ob)
 
-BESCHREIBUNG
-        Wenn <verb> ein String ist: entferne das erste im Objekt <obj> durch
-        add_action() definierte Kommando <verb>. Wenn <obj> nicht
-        angegeben wird, wird standardmaessig this_player() verwendet.
-        Gib 1 zurueck, wenn ein Kommando gefunden und entfernt wurde,
-        sonst 0.
+DESCRIPTION
+        If <verb> is a string: remove the first action defined by the current
+        object with the given <verb> from <ob> (default is this_player()).
+        Return 1 if the action was found and removed, and 0 else.
 
-        Wenn <verb> ein Integer ist: wenn verb nicht 0 ist, entferne alle
-        durch das Objekt <obj> definierten Kommandos. Wenn <obj> nicht
-        angegeben wird, wird standardmaessig this_player() verwendet. Gibt
-        die Anzahl der entfernten Kommandos zurueck.
+        If <verb> is a number: if non-0, remove all actions defined by
+        the current object from <ob> (default is this_player()).
+        Return the number of actions removed.
 
-GESCHICHTE
-        Eingefuehrt seit 3.2.1.
-        LDMud 3.2.10 fuehrte zusaetzlich die Moeglichkeit ein, alle Kommandos
-        auf einmal zu entfernen.
+HISTORY
+        Introduced in 3.2.1.
+        LDMud 3.2.10 added the ability to remove all actions.
 
-SIEHE AUCH
+SEE ALSO
         add_action(E), move_object(E)
diff --git a/doc/efun/remove_call_out b/doc/efun/remove_call_out
index 38f0795..96426fa 100644
--- a/doc/efun/remove_call_out
+++ b/doc/efun/remove_call_out
@@ -2,35 +2,21 @@
         int remove_call_out(string fun)
         int remove_call_out(closure fun)
 
-BESCHREIBUNG
-        Entfernt den naechsten anhaengigen call_out() auf die Funktion <fun>
-        im aktuellen Objekt bzw. den naechsten anhaengigen call_out() auf
-        die Closure <fun>. Die verbleibende Zeit wird zurueck geliefert.
+DESCRIPTION
+        Remove next pending call-out for function <fun> in the current
+        object, resp. the next pending call-out for closure <fun>.
+        The time left is returned.
 
-        Wenn es keine anhaengigen call_out()s auf <fun> gibt, wird -1
-        zurueckgeliefert.
+        -1 is returned if there were no call-outs pending to this
+        function.
 
-BEISPIELE
-        Um alle call_out()s auf MeineFunktion() zu entfernen:
+EXAMPLES
+        To remove every pending call-out to MyTimer() :
 
-        while (remove_call_out("MeineFunktion") != -1);      /* wiederhole */
+        while (remove_call_out("MyTimer") != -1) /* continue */ ;
 
-FEHLER
-        Das Entfernen von call_out()s auf Closures funktioniert nur, wenn der
-        exakt gleiche Wert fuer die Closure verwendet wird.
+HISTORY
+        Removing a call_out to a closure was introduced in 3.2.1@45.
 
-        Das funktioniert:
-            closure cl = symbol_function("main", obj);
-            call_out(cl, 2);
-            remove_call_out(cl);
-
-        Das funktioniert nicht:
-            call_out(symbol_function("main", obj), 2);
-            remove_call_out(symbol_function("main", obj));
-
-GESCHICHTE
-        Das Entfernen eines call_out()s auf eine Closure wurde in 3.2.1@45
-        eingefuehrt.
-
-SIEHE AUCH
+SEE ALSO
         call_out(E), call_out_info(E), find_call_out(E)
diff --git a/doc/efun/remove_input_to b/doc/efun/remove_input_to
index 3bbbcea..a443529 100644
--- a/doc/efun/remove_input_to
+++ b/doc/efun/remove_input_to
@@ -3,36 +3,31 @@
         int remove_input_to(object player, string fun)
         int remove_input_to(object player, closure fun)
         int remove_input_to(object player, object|lwobject fun)
-        int remove_input_to(object player, object|lwobject obj, string fun)
+        int remove_input_to(object player, object|lwobject ob, string fun)
 
-BESCHREIBUNG
-        Entfernt ein anhaengiges input_to() aus dem interaktiven Playerobjekt.
-        Wenn <fun> nicht angegeben ist, wird der zuletzt aufgerufen input_to()
-        entfernt.
+DESCRIPTION
+        Remove a pending input_to from the interactive <player> object.
+        If the optional <fun> is not given, the most recently added input_to
+        is removed.
 
-        Wurde <fun> angegeben, entfernt remove_input_to das neueste auf <fun>
-        aufgerufene input_to. Je nach der Definition von <fun> wird nach
-        unterschiedlichen Kriterien gesucht:
-          - <fun> ist ein String: gesucht wird nach dem Funktionsnamen
-          - <fun> ist ein Objekt: gesucht wird nach dem Objekt, in dem
-            input_to() aufgerufen wurde
-          - <fun> ist eine Closure: gesucht wird nach der Closure, die
-            input_to() enthaelt
-          - <obj> und <fun> wurden angegeben: es wird nach Objekt und
-            Funktionsname gesucht. Beide muessen uebereinstimmen.
+        If the optional <fun> is given, the efun tries to find and remove the
+        most recently added input_to matching the <fun> argument:
+         - <fun> is a string: the input_to functionname has to match
+         - <fun> is an object: the object the input_to function is bound to
+                               has to match
+         - <fun> is a closure: the input_to closure has to match.
+         - <ob> and <fun> are given: both the object and the functionname
+                               have to match
 
-        remove_input_to() liefert 1 bei Erfolg, sonst 0 (es wurde kein
-        input_to() gefunden, das Objekt ist nicht interaktiv oder es gibt
-        kein haengiges input_to() auf dem Objekt).
+        Return 1 on success, or 0 on failure (no input_to found, object is
+        not interactive or has no input_to pending).
 
-BEISPIELE
-        Entfernt alle anhaengigen input_to()s des aktuellen Spielers,
-        falls vorhanden:
-            while (remove_input_to(this_interactive()));
+EXAMPLES
+        Remove all pending input_to from the current user, if any.
+            while (remove_input_to(this_interactive())) ;
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9 / 3.3.119.
+HISTORY
+        Introduced in LDMud 3.2.9 / 3.3.119.
 
-SIEHE AUCH
-        input_to(E), find_input_to(E), input_to_info(E),
-        query_input_pending(E)
+SEE ALSO
+        input_to(E), find_input_to(E), input_to_info(E), query_input_pending(E)
diff --git a/doc/efun/remove_interactive b/doc/efun/remove_interactive
index 269bac3..0d6d200 100644
--- a/doc/efun/remove_interactive
+++ b/doc/efun/remove_interactive
@@ -1,14 +1,13 @@
 SYNOPSIS
-        void remove_interactive(object obj)
+        void remove_interactive(object ob)
 
-BESCHREIBUNG
-        Schliesst die Verbindung zum interaktiven Objekt <obj>.
+DESCRIPTION
+        Close the connection to the interactive object ob.
 
-        Waehrend der Ausfuehrung der LPC Anweisung ist das Objekt intern als
-        'about to be closed' ('wird geschlossen') markiert. Das heisst, dass
-        der Output an stdout umgeleitet wird, waehrend die eigentliche
-        Netzwerkverbindung bestehen bleibt, bis die LPC-Anweisung vollstaendig
-        abgearbeitet wurde.
+        For the time of the LPC execution, the object is only marked
+        internally as 'about to be closed', meaning that while all
+        output will be redirected to stdout, the actual network connection
+        will continue to exist until the LPC execution ends.
 
-SIEHE AUCH
+SEE ALSO
         connect(M), logon(A), disconnect(M)
diff --git a/doc/efun/rename b/doc/efun/rename
index 39c083d..fda6c6e 100644
--- a/doc/efun/rename
+++ b/doc/efun/rename
@@ -1,25 +1,26 @@
 SYNOPSIS
         int rename(string from, string to)
 
-BESCHREIBUNG
-        Die Efun rename() verschiebt <from> nach <to>. Wenn <from> ein File
-        ist, kann <to> entweder ein andere File oder ein Verzeichnis sein.
-        Wenn <from> ein Verzeichnis ist, muss <to> auch ein Verzeichnis sein.
-        Wenn in diesem Fall <to> existiert und ein Verzeichnis ist, wird
-        <from> in <to> verschoben und behaelt seinen Namen.
+DESCRIPTION
 
-        <from> umzubenennen erfordert Schreibrechte auf <from>.
+        The efun rename() will move from to the new name to. If from
+        is a file, then to may be either a file or a directory. If
+        from is a directory, then to has to be a directory. If to
+        exists and is a directory, then from will be placed in that
+        directory and keep its original name.
 
-        Unterverzeichnisse (Verzeichnisse in Verzeichnissen) koennen nur auf
-        Maschinen umbenannt werden, die unter System V laufen, d.h. es ist
-        nicht moeglich, diese in ein anderes Verzeichnis zu verschieben. Das
-        Verschieben von Verzeichnissen von einem Filesystem zum andreren ist
-        unter keinem System moeglich.
+        You must have write permission for from to rename the file.
 
-        Bei Erfolg liefert rename() 0, bei Fehlschlag einen Wert ungleich 0.
+        It is only possible to change name of a directory within a
+        directory on machines running System V, i.e. it is not
+        possible to move to another directory. It is not possible to
+        move a directory across filesystems on any system.
 
-BEISPIELE
+        On successfull completion rename() will return 0. If any error
+        occurs, a non-zero value is returned.
+
+EXAMPLES
         rename("/players/wizard/obj.c", "/players/wizard/newobj.c");
 
-SIEHE AUCH
+SEE ALSO
         copy_file(E), mkdir(E), rmdir(E), rm(E)
diff --git a/doc/efun/rename_object b/doc/efun/rename_object
index bbde744..45a777e 100644
--- a/doc/efun/rename_object
+++ b/doc/efun/rename_object
@@ -1,14 +1,13 @@
-GESCHUETZT
 SYNOPSIS
-        void rename_object(object obj, string neuer_name)
+        void rename_object(object ob, string new_name)
 
-BESCHREIBUNG
-        Gibt dem Objekt <obj> einen neuen Namen <neuer_name> und verursacht
-        eine Schutzverletzung (einen Fehler). <neuer_name> darf kein #
-        enthalten, ausser am Ende, um Verwirrung mit Clones zu vermeiden.
+DESCRIPTION
+        Give the object <ob> a new object name <new_name>. Causes a privilege
+        violation. The new name must not contain a # character, except
+        at the end, to avoid confusion with clone numbers.
 
-GESCHICHTE
-        Eingefuehrt in 3.2@55.
+HISTORY
+        Introduced in 3.2@55.
 
-SIEHE AUCH
-        creator(E), object_name(E), load_name(E)
+SEE ALSO
+        creator(E), object_name(E), load_name(E).
diff --git a/doc/efun/replace_program b/doc/efun/replace_program
index 98cc305..39f8e88 100644
--- a/doc/efun/replace_program
+++ b/doc/efun/replace_program
@@ -2,40 +2,35 @@
         void replace_program()
         void replace_program(string program)
 
-BESCHREIBUNG
-        Ersetzt ein Programm mit dem geerbten Programm (inherit) <program>.
-        Das Argument <program> kann weggelassen werden, wenn nur ein Programm
-        geerbt wird. In diesem Fall waehlt der Treiber automatisch dieses eine
-        geerbte Programm.
+DESCRIPTION
+        Substitutes a program with the inherited program <program>. If
+        the object inherits only one program, the argument may be omitted
+        and the efun will automatically select the one inherited program.
 
-        Diese Efun ist nuetzlich, wenn es um Leistung und Speicherverbrauch
-        des Treibers geht. Ein Programm, welches keine zusaetzlichen Variablen
-        oder Funktionen braucht (ausser waehrend der Erstellung), kann
-        replace_program() aufrufen, um die Trefferquote des Treibers auf den
-        Funktionen-Caches zu erhoehen. Dies verringert die Anzahl Programme
-        im System.
+        This efun is useful if you consider the performance and memory
+        consumption of the driver. A program which doesn't need any additional
+        variables and functions (except during creation) can call
+        replace_program() to increase the function-cache hit-rate of the
+        driver which decreases with the number of programs in the system.
 
-        Raeume sind ein gutes Beispiel fuer die Anwendung dieser Funktion, da
-        viele Raeume nur aus einem Inherit und einer Konfigurationsfunktion
-        bestehen. Jedes Objekt kann replace_program() aufrufen, verliert dabei
-        jedoch alle Variablen und Funktionen, die nicht im geerbten Programm
-        definiert sind.
+        Rooms are a good example for the application of this function, as many
+        rooms just consist of an inherit statement and the configure function.
+        Any object can call replace_program() but looses all extra variables
+        and functions which are not defined by the inherited program.
 
-        Wenn replace_program() angewendet wird, werden Shadows vom Objekt
-        entfernt, in dem replace_program() stattfindet. Dies ist so seit
-        3.2@166.
+        When replace_program() takes effect, shadowing is stopped on
+        the object since 3.2@166.
 
-        Es ist nicht moeglich, replace_program() aufzurufen, wenn es an das
-        Objekt gebundene (Lambda-) Closures gibt. Hingegen ist es moeglich,
-        zuerst das Programm des Objekts zu ersetzen und dann Lambdaclosures
-        daran zu binden.
+        It is not possible to replace the program of an object after (lambda)
+        closures have been bound to it. It is of course possible to first
+        replace the program and then bind lambda closures to it.
 
-        Das Ersetzen des Programms findet erst statt, wenn das Objekt
-        vollstaendig abgearbeitet wurde, nicht schon beim Aufruf der Funktion
-        replace_program(). Das kann dazu fuehren, dass Closures auf inzwischen
-        verschwundene Lfuns des Objekts referenzieren. Das stellt allerdings
-        kein Problem dar, solange diese Referenzen nicht ausgefuehrt werden.
+        The program replacement does not take place with the call to the efun,
+        but is merely scheduled to be carried out at the end of the backend
+        cycle. This may cause closures to have references to then vanished
+        lfuns of the object. This poses no problem as long as these references
+        are never executed after they became invalid.
 
-GESCHICHTE
-        LDMud 3.2.9 liess zu, dass das Argument <program> weggelassen wird,
-        wenn nur ein Inherit existiert.
+HISTORY
+        LDMud 3.2.9 allowed to omit the argument if only one inherit
+        exists.
diff --git a/doc/efun/restore_object b/doc/efun/restore_object
index 3103e7d..8eb7720 100644
--- a/doc/efun/restore_object
+++ b/doc/efun/restore_object
@@ -2,47 +2,44 @@
         int restore_object(string name)
         int restore_object(string str)
 
-BESCHREIBUNG
-        Laedt Werte von Variablen fuer das aktuelle Objekt aus der Datei
-        <name> oder direkt aus dem String <str>.
+DESCRIPTION
+        Restore values of variables for current object from the file <name>,
+        or directly from the string <str>.
 
-        Um direkt aus einem String Variablen laden zu koennen, muss dieser
-        mit der typischen Zeile "#x:y" beginnen. Strings, die von der Efun
-        save_object() erzeugt wurden, beginnen so.
+        To restore directly from a string <str>, the string must begin
+        with the typical line "#x:y" as it is created by the save_object()
+        efun.
 
-        Wenn Variablen aus einer Datei geladen werden, kann <name> mit .c
-        enden. Diese Dateiendung wird vom Treiber entfernt. Das Masterobjekt
-        fuegt vermutlich dem Dateinamen ein .o hinzu. Die Gueltigkeit des
-        Dateinamens wird mit der Funktion check_valid_path() automatisch
-        ueberprueft.
+        When restoring from a file, the name may end in ".c" which is stripped
+        off by the parser. The master object will probably append a .o to the
+        <name>. The validity of the filename is checked with a call to
+        check_valid_path().
 
-        Die Funktion gibt 1 zurueck, wenn die Variablen erfolgreich geladen
-        wurden und 0, wenn es nichts zu laden gab.
+        Return 1 on success, 0 if there was nothing to restore.
 
-        Variablen mit dem Typenvermerk nosave werden nicht geladen, zum
-        Beispiel nosave int xxx;
+        Variables that has the type modifer 'nosave' will not be restored.
+        Example: nosave int xxx;
 
-        Clousers aus Lfuns, Variablne und simul_efuns werden nur geladen,
-        wenn sie gefunden werden. Falls nicht, werden sie mit dem Wert '0'
-        geladen.
+        Lfun, variable and simul_efun closures are restored only if they
+        can be found (this excludes closures of private lfuns as well) - if
+        not, they are restored as value '0'.
 
-        Wenn Vererbung verwendet wird, kann es vorkommen, dass mehrere
-        Variablen mit dem gleichen Namen an unterschiedlichen Orten vorkommen
-        und deshalb in der Speicherdatei mehrmals auftreten. Beim Laden der
-        Variablen werden sie in Reihenfolge ihres Auftretens im Vererbungsbaum
-        geladen. Ein geeignetes Vorgehen ist die Verwendung von Verbose und
-        einzigartigen Namen bei nicht-statischen Variablen. So wird auch das
-        manuelle Lesen oder Editieren des Savefiles einfacher.
+        If inheritance is used, then it might be possible that a
+        variable will exist with the same name in more than one place,
+        and thus appear in the  save file multiple times. When
+        restoring, the variables are restored in the order they are
+        found in the inheritance tree.  A good practice is to have
+        verbose and unique name on non-static variables, which also
+        will make it more easy to read or patch the save file
+        manually.
 
-GESCHICHTE
-        Das direkte Laden aus einem String wurde in LDMud 3.2.8 eingefuehrt,
-            wird aber moeglicherweise in Zukunft in eine separate Efun
-            ausgelagert.
-        LDMud 3.2.9 ergaenzte die Funktion um die Moeglichkeit,
-            NonLambda-Closures, Symbole und gequotete Arrays zu laden,
-            indem ein neues Format fuer das Savefile verwendet wird.
-        LDMud 3.5.0 unterstuetzt das Einlesen von Formatversion 2 mit hoeherer
-            Praezision der Gleitkommazahlen.
+HISTORY
+        Restoring directly from a string was added in LDMud 3.2.8 and
+        may be moved in future into a separate efun.
+        LDMud 3.2.9 added the restoring of non-lambda closures, symbols,
+        and quoted arrays, using a new savefile format version.
+        LDMud 3.5.0 added the possibility to restore version 2 with its higher
+        float precision and version 3 with lvalue references.
 
-SIEHE AUCH
+SEE ALSO
         save_object(E), restore_value(E), valid_read(M)
diff --git a/doc/efun/restore_value b/doc/efun/restore_value
index 773613a..3a0319f 100644
--- a/doc/efun/restore_value
+++ b/doc/efun/restore_value
@@ -1,23 +1,21 @@
 SYNOPSIS
         mixed restore_value(string str)
 
-BESCHREIBUNG
-        Wandelt die String-Entsprechung <str> eines Wertes zurueck in den Wert
-        selbst und gibt diesen Wert zurueck. <str> ist ein String, wie er von
-        save_value() erzeugt wird.
-        
-        Die Spezifikation des Speicherformates '#x:y' ist optional. Allerdings
-        nimmt der Driver in diesem Fall das aelteste Format (Version 0) an.
-        In neu gespeicherten Werten sollte die Formatspezifikation daher nicht
-        als optional angesehen werden.
+DESCRIPTION
+        Decode the string representation <str> of a value back into the value
+        itself and return it. <str> is a string as generated by save_value().
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.8.
-        Mit LDMud 3.2.9 kam das Laden von Non-Lambda Closures, Symbolen und
-        gequoteten Arrays hinzu, wozu ein neues Format fuer die Speicherdatei
-        verwendet wird.
-        LDMud 3.5.0 unterstuetzt das Einlesen von Formatversion 2 mit hoeherer
-        Praezision der Gleitkommazahlen.
-        
-SIEHE AUCH
+        The '#x:y' version specification of the saveformat is optional,
+        however the driver will assume the old format version 0 in this case.
+        It is strongly recommended to regard the version specification as
+        non-optional in newly saved values.
+
+HISTORY
+        Introduced in LDMud 3.2.8.
+        LDMud 3.2.9 added the restoring of non-lambda closures, symbols,
+        and quoted arrays, using a new savefile format version.
+        LDMud 3.5.0 added the possibility to restore version 2 with its higher
+        float precision.
+
+SEE ALSO
         save_value(E), restore_object(E), save_object(E)
diff --git a/doc/efun/reverse b/doc/efun/reverse
index af81403..89b9bd6 100644
--- a/doc/efun/reverse
+++ b/doc/efun/reverse
@@ -1,32 +1,32 @@
 SYNOPSIS
-        int     reverse (int arg)
-        string  reverse (string arg)
-        bytes   reverse (bytes arg)
-        mixed * reverse (mixed * arg)
-        mixed * reverse (mixed * & arg)
+        int     reverse(int arg)
+        string  reverse(string arg)
+        bytes   reverse(bytes arg)
+        mixed * reverse(mixed * arg)
+        mixed * reverse(mixed * & arg)
 
-BESCHREIBUNG
-        Kehrt die Reihenfolge des Inhaltes eines Arrays, Strings oder
-        Bytefolge <arg> um und liefert den neuen Wert als Resultat.
-        Ist <arg> eine Zahl, wird die Reihenfolge der Bits in <arg> umgekehrt.
+DESCRIPTION
+        Reverse the content of array, string or byte sequence <arg> and
+        return the result. If <arg> is an integer, the bits in the
+        integer are reversed.
 
-        Wenn in der Referenz-Variante verwendet, wird das Argumentarray selber
-        invertiert und auch zurueckgegeben.
+        If called in the reference variant, the argument array itself
+        is reversed and then returned.
 
-BEISPIELE
-        reverse (0x306a) - gibt 0x560c0000 zurueck
+EXAMPLES
+        reverse(0x306a) - returns 0x560c0000
 
-        reverse ("test") - gibt "tset" zurueck
+        reverse("test") - returns "tset"
 
-        mixed * a = ({ 1, 2 });
-        reverse(a)  - gibt ({ 2, 1 }) zurueck, a bleibt unveraendert.
-        reverse(&a) - gibt ({ 2, 1 }) zurueck, a ist nun ({ 2, 1 })
+        mixed * arr = ({ 1, 2 });
+        reverse(arr)  - returns ({ 2, 1 }), leaves arr unchanged.
+        reverse(&arr) - returns ({ 2, 1 }), sets arr to ({ 2, 1 })
 
-FEHLER
-        Referenz-Teilarrays wie reverse(&(a[1..2])) werden nicht unterstuetzt.
+BUGS
+        Reference ranges like reverse(&(a[1..2])) are not supported.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.3.529.
-        LDMud 3.3.532 fuegte die Bitumkehr von Zahlen ein.
+HISTORY
+        Introduced in LDMud 3.3.529.
+        LDMud 3.3.532 added the reversal of bits in an integer.
 
-SIEHE AUCH
+SEE ALSO
diff --git a/doc/efun/rm b/doc/efun/rm
index cc4e5cf..be1e067 100644
--- a/doc/efun/rm
+++ b/doc/efun/rm
@@ -1,9 +1,8 @@
 SYNOPSIS
         int rm(string file)
 
-BESCHREIBUNG
-        Loescht die Datei <file>. Gibt 0 zurueck, wenn etwas nicht geklappt
-        hat, 1 bei Erfolg.
+DESCRIPTION
+        Remove the file. Returns 0 for failure and 1 for success.
 
-SIEHE AUCH
+SEE ALSO
         mkdir(E), rmdir(E), rename(E)
diff --git a/doc/efun/rmdir b/doc/efun/rmdir
index 93c7a37..748d034 100644
--- a/doc/efun/rmdir
+++ b/doc/efun/rmdir
@@ -1,8 +1,8 @@
 SYNOPSIS
         int rmdir(string dir)
 
-BESCHREIBUNG
-        Loescht das Verzeichnis <dir>. Liefert 1 bei Erfolg, 0 bei Misserfolg.
+DESCRIPTION
+        Remove directory dir. Return 1 on success, 0 on failure.
 
-SIEHE AUCH
+SEE ALSO
         mkdir(E), rm(E), rename(E)
diff --git a/doc/efun/rmember b/doc/efun/rmember
index 5709efe..cd3b22b 100644
--- a/doc/efun/rmember
+++ b/doc/efun/rmember
@@ -1,21 +1,17 @@
 SYNOPSIS
         int rmember(mixed *array, mixed elem [, int start])
-        int rmember(string str, int elem [, int start])
-        int rmember(bytes str, int elem [, int start])
+        int rmember(string s, int elem [, int start])
+        int rmember(bytes s, int elem [, int start])
 
-BESCHREIBUNG
-        Liefert fuer Arrays, Strings und Bytefolgen den Index des letzten
-        Auftretens des Arguments <elem> im Array <*array>, im String bzw.
-        in der Bytefolge <str>. Wenn <elem> nicht gefunden wird, liefert
-        die Funktion -1 zurueck.
+DESCRIPTION
+        Returns the index of the last occurance of second arg
+        in the first arg, or -1 if none found.
+        If <start> is given and non-negative, the search starts at
+        that position.
 
-        Ist <start> als Zahl >= 0 gegeben, beginnt die Suche ab der
-        angegebenen Position. Eine Startposition groesser als die
-        Laenge des Strings/Arrays liefert stets das Resultat -1.
+HISTORY
+        Introduced in LDMud 3.2.10.
+        LDMud 3.3.556 added the <start> parameter.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.10.
-        LDMud 3.3.556 fuegte den <start>-Parameter hinzu.
-
-SIEHE AUCH
+SEE ALSO
         member(E)
diff --git a/doc/efun/rusage b/doc/efun/rusage
index 4de6179..5c268fe 100644
--- a/doc/efun/rusage
+++ b/doc/efun/rusage
@@ -1,18 +1,17 @@
 OPTIONAL
 SYNOPSIS
-        int * rusage()
+        int * rusage(void)
 
-BESCHREIBUNG
-        Liefert ein Array mit Informationen ueber den momentanen
-        Systemzustand; Benutzungsstatistiken, wie sie vom Unix-Kommando
-        getrusage(2) generiert werden, namentlich:
-            utime, stime, maxrss, rus.ru_ixrss, rus.ru_idrss, rus.ru_isrss,
-            rus.ru_minflt, rus.ru_majflt, rus.ru_nswap, rus.ru_inblock,
-            rus.ru_oublock, rus.ru_msgsnd, rus.ru_msgrcv, rus.ru_nsignals,
-            rus.ru_nvcsw, rus.ru_nivcsw
+DESCRIPTION
+        Return an array with current system resource usage statistics,
+        as returned by the getrusage(2) of Unix.
+        namely: utime, stime, maxrss, rus.ru_ixrss, rus.ru_idrss,
+                rus.ru_isrss, rus.ru_minflt, rus.ru_majflt, rus.ru_nswap,
+                rus.ru_inblock, rus.ru_oublock, rus.ru_msgsnd,
+                rus.ru_msgrcv, rus.ru_nsignals, rus.ru_nvcsw,
+                rus.ru_nivcsw
 
-ANMERKUNGEN
-        Diese Funktion ist optional.
+        This function is optional.
 
-SIEHE AUCH
-        sys/resource.h(Unix)
+SEE ALSO
+        <sys/resource.h>(Unix)
diff --git a/doc/efun/save_object b/doc/efun/save_object
index 2ec83b2..cb17764 100644
--- a/doc/efun/save_object
+++ b/doc/efun/save_object
@@ -2,48 +2,46 @@
         int    save_object(string name [, int format])
         string save_object([int format])
 
-BESCHREIBUNG
-        Codiert die speicherbaren Variablen des aktuellen Objekts in einen
-        String.
+DESCRIPTION
+        Encode the saveable variables of the current object into a string.
 
-        In der ersten Form wir der String in die Datei <name> geschrieben. Eine
-        Endung ".c" in <name> wird entfernt, dafuer kann eine Endung ".o"
-        durch das Masterobjekt angefuegt werden, waehrend der Ueberpruefung
-        durch valid_read(). Die Efun save_object() liefert 0, wenn die
-        Speicherdatei erfolgreich erstellt wurde, sonst eine Zahl ungleich 0,
-        wenn ein nicht schwerwiegendee Fehler aufgetreten ist (die Datei
-        konnte nicht geschrieben werden oder das aktuelle Objekt wurde
-        inzwischen zerstoert).
+        In the first form, the string is written to the file <name>.
+        A suffix ".c" will be stripped from the name, the suffix ".o"
+        may be added by the master object during the check in
+        valid_read(). Result is 0 if the save file could be created,
+        and non-zero on a non-fatal error (file could not be written,
+        or current object is destructed).
 
-        In der zweiten Form wird der String direkt zurueck gegeben. Wenn das
-        Objekt zerstoert wurde, wird 0 zurueck gegeben. In beiden Faellen kann
-        durch das optionale Argument <format> das Format der Speicherdatei
-        angegeben werden:
+        In the second form the string is returned directly. If the
+        object is destructed, the result is 0.
 
-            -1: das normale Format des Treibers (Standard)
-             0: das Originalformat nach Amylaar's LPMud und LDMud <=3.2.8
-             1: LDMud >= 3.2.9: Non-Lambda Closures, Symbole und gequotete
-                Arrays koennen gespeichert werden
-             2: LDMUd >= 3.5.0: Gleitkommazahlen werden in einem neuen Format
-                geschrieben, welches kompakter ist die Gleitkommazahlen aus
-                3.5.x verlustfrei speichern kann.
-        
-        Es wird empfohlen, die Angabe des Formats wegzulassen oder in Version
-        2 (oder hoeher) zu speichern.
+        In both forms, the optional <format> argument determines the
+        format of the savefile to be written:
 
-        Eine Variable wird als 'speicherbar' betrachtet, wenn sie nicht als
-        'nosave' oder 'static' deklariert ist.
+           -1: use the driver's native format (default).
+            0: original format, used by Amylaar LPMud and LDMud <= 3.2.8 .
+            1: LDMud >= 3.2.9: non-lambda closures, symbols, quoted arrays
+                 can be saved.
+            2: LDMud >= 3.5.0: floats are stored in a different way, which is
+                 more compact and can store the new float losslessly.
+	    3: LDMud >= 3.5.0: can also save lvalues references (without it,
+	         the plain rvalue will be saved).
 
-GESCHICHTE
-        Seit LDMud 3.2.8 liefert save_object() einen fixen Wert bei Erfolg.
-        Das direkte Abspeichern in einen String wurde in LDMud 3.2.8
-            eingefuehrt, wird aber in Zukunft eventuell in eine separate Efun
-            umgezogen.
-        LDMud 3.2.9 ergaenzte die Funktion um das Speichern von Non-Lambda
-            Closures, Symbolen und gequoteten Arrays. Dazu wurde ein neues
-            Format fuer die Speicherdatei eingefuehrt.
-        LDMud 3.2.10 fuehrte das Argument <format> ein.
-        LDMud 3.5.0 fuehrte Formatversion 2 ein.
+        It is recommended to use version 3 or higher.
 
-SIEHE AUCH
+        A variable is considered 'saveable' if it is not declared
+        as 'nosave' or 'static'.
+
+        Only lfuns bound to the current object can be saved.
+
+HISTORY
+        Since LDMud 3.2.8, save_object() returns a success value.
+          The direct encoding into a string was added in LDMud 3.2.8, but
+          may be moved into a different efun in future.
+        LDMud 3.2.9 added the saving of non-lambda closures, symbols,
+          and quoted arrays, using the new savefile format version 1.
+        LDMud 3.2.10 added the <format> argument.
+        LDMud 3.5.0 added savefile format version 2 and 3.
+
+SEE ALSO
         restore_object(E), save_value(E)
diff --git a/doc/efun/save_value b/doc/efun/save_value
index 11de053..c1df37d 100644
--- a/doc/efun/save_value
+++ b/doc/efun/save_value
@@ -1,39 +1,37 @@
 SYNOPSIS
-        string save_value(mixed wert)
-        string save_value(mixed wert, int format)
+        string save_value(mixed value)
+        string save_value(mixed value, int format)
 
-BESCHREIBUNG
-        Schreibt <wert> in einen String, der sich mit restore_value()
-        auswerten laesst. Der String wird zurueck gegeben.
+DESCRIPTION
+        Encode the <value> into a string suitable for restoration with
+        restore_value() and return it.
 
-        Das optionale Argument <format> bestimmt das Format des Strings:
+        The optional <format> argument determines the format of the savefile
+        to be written:
 
-            -1: das normale Format des Treibers (Standard)
-             0: das Originalformat nach Amylaar's LPMud und LDMud <=3.2.8
-             1: LDMud >= 3.2.9: Non-Lambda Closures, Symbole und gequotete
-                Arrays koennen gespeichert werden
-             2: LDMUd >= 3.5.0: Gleitkommazahlen werden in einem neuen Format
-                geschrieben, welches kompakter ist die Gleitkommazahlen aus
-                3.5.x verlustfrei speichern kann.
+           -1: use the driver's native format (default).
+            0: original format, used by Amylaar LPMud and LDMud <= 3.2.8 .
+            1: LDMud >= 3.2.9: no-lambda closures, symbols, quoted arrays
+                 can be saved.
+            2: LDMUd >= 3.5.0: floats are stored in a different way, which is
+                 more compact and can store the new floats losslessly.
+
+        It is recommended to use version 2 or higher.
+
+        The created string consists of two lines, each terminated with
+        a newline character: the first line describes the format used to
+        save the value in the '#x:y' notation; the second line is the
+        representation of the value itself.
+
+        The format of the encoded value and of the format line matches
+        the format used by save_object() and restore_object().
+
+HISTORY
+        Introduced in LDMud 3.2.8.
+        LDMud 3.2.9 added the saving of non-lambda closures, symbols,
+          and quoted arrays, using the new savefile format version 1.
+        LDMud 3.2.10 added the <format> argument.
+        LDMud 3.5.0 added savefile format version 2.
         
-        Es wird empfohlen, die Angabe des Formats wegzulassen oder in Version
-        2 (oder hoeher) zu speichern.
-
-        Der erzeugte String besteht aus zwei Zeilen, die jeweils mit einem
-        Zeilenumbruch enden. Die erste Zeile beschreibt das Format, in dem der
-        Wert gespeichert wird, in der '#x:y'-Schreibweise. Die zweite Zeile
-        stellt den eigentlichen Wert da.
-
-        Das Format zum Schreiben des Wertes in den String entspricht dem von
-        save_object() und restore_object() verwendeten Format.
-
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.8.
-        LDMud 3.2.9. ergaenzte die Funktion um die Moeglichkeit, Non-Lambda
-            Closures, Symbole und gequotete Arrays zu speichern. Dazu wurde
-            ein neues Format fuer den String eingefuehrt.
-        LDMud 3.2.10 fuehrte das Argument <format> ein.
-        LDMud 3.5.0 fuehrte Formatversion 2 ein.
-
-SIEHE AUCH
+SEE ALSO
         restore_value(E), restore_object(E), save_object(E)
diff --git a/doc/efun/say b/doc/efun/say
index cbb7819..ed4b3ec 100644
--- a/doc/efun/say
+++ b/doc/efun/say
@@ -7,92 +7,78 @@
         void say(mixed *|mapping|struct|object|lwobject msg, object exclude)
         void say(mixed *|mapping|struct|object|lwobject msg, object *excludes)
 
-BESCHREIBUNG
-        Es bestehen zwei Hauptanwendungen fuer say():
+DESCRIPTION
+        There are two major modes of calling:
 
-        Wenn das erste Argument ein String <str> ist, wird er an alle
-        lebendigen Objekte im aktuellen Raum gesendet, ausser zum Objekt,
-        das die Funktion aufgerufen hat.
+        If the first argument is a string <str>, it will be send to
+        all livings in the current room except to the initiator.
 
-        Wenn das erste Argument ein nicht-String <msg> ist, wird die Lfun
-        catch_msg() in allen lebendigen Objekt im Raum aufgerufen, ausser im
-        Objekt, das say() aufgerufen hat. Der Wert <msg> wird als erstes
-        Argument an catch_msg() uebergeben, das aufrufende Objekt als zweites
-        Argument.
+        If the first argument is an array/mapping/struct/object <msg>, the
+        lfun catch_msg() of all living objects except the initiator will be
+        called.
+        This <msg> will be given as first argument to the lfun, and
+        the initiating object as the second.
+        CAVEAT: If the lfun catch_msg() modifies the content of <msg>, all
+        subsequent objects will receive the modified <msg>.
 
-        MERKE: Wenn die Lfun catch_msg() den Wert <msg> veraendert, erhalten
-        alle nachfolgenden Objekte das veraenderte <msg>.
+        By specifying a second argument to the efun one can exclude
+        more objects than just the initiator. If the second argument
+        is a single object <exclude>, both the given object and the
+        initiator are excluded from the call. If the second argument
+        is an array <excludes>, all objects and just the objects in
+        this array are excluded from the call.
 
-        Wird der Efun say() ein zweites Argument angegeben, kann man andere
-        Objekte als nur das aufrufende Objekt ausschliessen. Wenn das zweite
-        Argument ein einzelnes Objekt <exclude> ist, werden das aufrufende
-        Objekt und <exclude> von der Meldung ausgeschlossen. Wenn das zweite
-        Argument ein Array <excludes> ist, werden alle Objekte aus dieser
-        Liste zusaetzlich zum aufrufenden Objekt als Empfaenger von say()
-        ausgeschlossen.
+        The 'initiator' is determined according to these rules:
+          - if the say() is called from within a living object, this
+            becomes the initiator
+          - if the say() is called from within a dead object as result
+            of a user action (i.e. this_player() is valid), this_player()
+            becomes the initiator.
+          - Else the object calling the say() becomes the initiator.
 
-        Das aufrufende Objekt wird nach folgenden Regeln bestimmt:
-          - Wenn say() aus einem lebendigen Objekt aufgerufen wird, gilt
-            dieses als das aufrufende Objekt.
-          - Wenn say() aus einem nicht-lebendigen Objekt als Resultat einer
-            Handlung eines Benutzers aufgerufen wird (das heisst,
-            this_player() ist gueltig), gilt this_player() als aufrufendes
-            Objekt.
-          - In allen anderen Faellen gilt das Objekt, das say() aufgerufen
-            hat, als aufrufendes Objekt.
-
-BEISPIELE
-        Folgende Aufrufe sind gleich, wenn sie aus einem nicht lebendigen
-        Objekt aufgerufen werden:
-
-            say("Hi!\n");
-            say("Hi!\n", this_player());
-
-        Das folgende Beispiel zeigt, wie say() zusammen mit catch_tell()
-        funktioniert. Das zweite Objekt darf nicht lebendig sein, sodass
-        write() an den aktuellen Benutzer geht.
-
-        Objekt 1 (living):
-            void catch_tell(string str)
-            {
-                write("Empfangen: "+str+"\n");
-            }
-
-        Objekt 2 (nicht living):
-            void func()
-            {
-                ...
-                say("HiHo!\n");
-                ...
-            }
-
-        Ein etwas komplexeres Beispiel zeigt das Zusammenspiel von say()
-        und catch_msg(). Auch hier wird ein nicht-lebendiges Objekt
-        verwendet, das die Nachricht ausgibt, sodass das 'wer' in
-        catch_msg() auf den aktuellen Benutzer zeigt.
+EXAMPLES
+        say("Hi!\n");
+        say("Hi!\n", this_player());
+        Both calls are equal when called by a not living object.
 
         Object 1 (living):
-            void catch_msg(mixed *arr, object who) {
-                int i;
-                if (!arr) return;
-                for (i=0;i<sizeof(arr);i++)
-                    tell_object(who, (stringp(arr[i]) ? arr[i] : "-/-")+"\n");
-            }
+           void catch_tell(string str) {
+              write("Received: "+str+"\n");
+           }
+        Object 2 (not living):
+           void func() {
+              ...
+              say("HiHo!\n");
+              ...
+           }
 
-        Object 2 (nicht living):
-            void func() {
-                ...
-                say(({ "Hello", "there!" }));
-                ...
-            }
+        This examples shows how say() together with catch_tell()
+        works. The 2nd object must not be living so the write() will
+        go to the current user.
 
-ANMERKUNGEN
-        Wenn die Lfun catch_msg() den Wert <msg> veraendert, erhalten alle
-        nachfolgenden Objekte das veraenderte <msg>.
 
-GESCHICHTE
-        LDMud 3.3.686 erlaubt die Verwendung eines mapping/struct/object als
-        zweites Argument.
+        Object 1 (living):
+           void catch_msg(mixed *arr, object who) {
+              int i;
+              if(!arr) return;
+              for(i=0; i<sizeof(arr); i++)
+                 tell_object(who, (stringp(arr[i]) ? arr[i] : "-/-")+"\n");
+           }
+        Object 2 (not living):
+           void func() {
+              ...
+              say( ({ "Hello", "there!" }) );
+              ...
+           }
 
-SIEHE AUCH
+        This is a bit complex example to demonstrate how say() and
+        catch_msg() works. Here we also use a non living object to
+        send the message so the who in catch_msg() will be the current
+        user.
+
+HISTORY
+        LDMud 3.3.686 added the use of a mapping/struct/object as second
+        argument.
+
+SEE ALSO
         write(E), tell_object(E), tell_room(E)
diff --git a/doc/efun/send_erq b/doc/efun/send_erq
index fd1d521..85ff4ab 100644
--- a/doc/efun/send_erq
+++ b/doc/efun/send_erq
@@ -1,31 +1,37 @@
-GESCHUETZT
 SYNOPSIS
         #include <erq.h>
 
-        int send_erq(int request, bytes|int *data, closure callback)
+        int send_erq(int request, bytes|int * data, closure callback)
 
-BESCHREIBUNG
-        Eine Anfrage vom Typ <request> (standardmaessig 0) wird mit Inhalt
-        <data> word an den ERQ gesandt. Wenn <callback> angegeben ist,
-        wird diese Closure aufgerufen, wenn eine Antwort vom ERQ eintrifft
-        (ein Status Code), vorausgesetzt die Antwort enthaelt ausreichend
-        Daten, um damit zu arbeiten:
+DESCRIPTION
+        A request of given type (<request>, default is 0), equipped
+        with the given <data>, is sent to the erq. If <callback> is
+        set to a closure, it will be called when the response from the
+        erq (a status code) arrives, if the response carries enough data to
+        work on.
 
-            void <closure>(int *response_data, int len);
+        <request> can be one of the request codes defined in <erq.h>.
+        The binary flag ERQ_CB_STRING defines whether the <callback>
+        closure expects the returned data packed into an array of
+        integers or as a string.
 
-        <data> kann entweder eine Bytefolge oder ein Array von Integers sein,
-        wobei im zweiten Fall die Zahlen als Bytes interpretiert werden.
-        Die unterschiedlichen Anfragen sind in <erq.h> definiert.
+        <data> may be a byte sequence, or an array of integers which are
+        then interpreted as bytes.
 
-        Die Funktion liefert 0 zurueck, wenn das Senden fehlgeschlagen ist,
-        etwas anderes sost.
+        <callback>, if set, is a closure of either these forms:
 
-        Die Funktion verursacht eine Schutzverletzung "erq".
+          !ERQ_CB_STRING: void <closure>(int *response_data, int len)
+           ERQ_CB_STRING: void <closure>(string response_data)
 
-GESCHICHTE
-        Eingefuehrt in 3.2.1@61.
-        Geschuetzt in 3.2.1@84.
-        LDMud 3.3.318 fuehrte das ERQ_CB_STRING-Flag ein.
+        The result returned from the efun is 0 on failure to send the
+        data, or non-zero on a successful send.
 
-SIEHE AUCH
+        The function causes a privilege violation "erq".
+
+HISTORY
+        Introduced in 3.2.1@61.
+        Made a privileged function in 3.2.1@84
+        LDMud 3.3.318 introduced the ERQ_CB_STRING flag.
+
+SEE ALSO
         attach_erq_demon(E), erq(C)
diff --git a/doc/efun/send_udp b/doc/efun/send_udp
index dd5d2bc..f508dd6 100644
--- a/doc/efun/send_udp
+++ b/doc/efun/send_udp
@@ -1,39 +1,26 @@
-GESCHUETZT
 SYNOPSIS
         int send_udp(string host, int port, bytes message)
-        int send_udp(string host, int port, int *message)
+        int send_udp(string host, int port, int * message)
 
-BESCHREIBUNG
-        Sendet die Nachricht <message> als UDP Paket an den angegebenen Host
-        bzw. Port.
+DESCRIPTION
+        Sends the <message> in an UDP packet to the given host and port
+        number.
 
-        Die Efun verursacht eine Schutzverletzung. Wenn USE_DEPRECATED gesetzt
-        ist, wird zuerst send_imp() ausgeloest, anschliessend - wenn send_imp()
-        fehlschlaegt - send_udp(). Wenn USE_DEPRECATED nicht gesetzt ist,
-        wird nur send_udp() ausgeloest.
+        The efun causes the privilege violation ("send_udp").
 
-        Die Funktion liefert 1 bei Erfolg, sonst 0.
+        Returns 1 on success, 0 on failure.
 
-        MERKE: auf manchen Systemen wird ein fehlgeschlagener Versuch von
-        send_udp() nicht registriert, bis das naechste send_udp() aufgerufen
-        wird. Das spaetere send_udp() kann in diesem Fall 0 zurueck liefern,
-        obwohl es erfolgreich war.
+        Note: On some machines a failed send_udp() will not be registered
+        until the next send_udp() - the latter one might return '0' even
+        if itself was successful.
 
-FEHLER
-        Ist <host> ein qualifizierter Hostname (anstelle einer IP Adresse),
-        blockiert die Ausfuehrung fuer die Dauer der Namensaufloesung.
+BUGS
+        If the <host> is given as a fully qualified name (instead of
+        an IP address), the execution will block until the name is resolved.
 
-ANMERKUNGEN
-        Auf manchen Systemen wird ein fehlgeschlagener Versuch von send_udp()
-        nicht registriert, bis das naechste send_udp() aufgerufen wird.
-        Das spaetere send_udp() kann in diesem Fall 0 zurueckliefern, obwohl
-        es erfolgreich war.
+HISTORY
+        LDMud 3.2.9 renamed this efun from send_imp(), and also changed the
+          privilege violation string and the apply names.
 
-GESCHICHTE
-        LDMud 3.2.9 benannte diese Efun von send_imp() und veraenderte auch
-            die Schutzverletzung (bzw. die entsprechende Fehlermeldung) und
-            die Apply Namen. Die alte Version ist verfuegbar, wenn im
-            Treiber USE_DEPRECATED gesetzt ist.
-
-SIEHE AUCH
+SEE ALSO
         query_udp_port(E), receive_udp(M)
diff --git a/doc/efun/set_bit b/doc/efun/set_bit
index 758bdc6..8935b4f 100644
--- a/doc/efun/set_bit
+++ b/doc/efun/set_bit
@@ -1,30 +1,30 @@
 SYNOPSIS
         string set_bit(string str, int n)
 
-BESCHREIBUNG
-        Liefert einen neuen String, bei dem das Bit <n> in <str> gesetzt
-        ist. Dabei wird der urspruengliche String <str> nicht veraendert.
+DESCRIPTION
+        Return the new string where bit n is set in string str. Note
+        that the old string str is not modified.
 
-        Jedes Zeichen enthaelt 6 Bits. In jedem Zeichen kann deshalb eine
-        Zahl von 0 bis 63 gespeichert werde (2^6=64). Das erste Zeichen
-        ist der Leerschlag " " mit dem Wert 0. Das erste Zeichen im String
-        ist jenes mit den niedrigsten Bits (0-5).
+        Each character contains 6 bits. So you can store a value
+        between 0 and 63 in one character (2^6=64). Starting character
+        is the blank " " which has the value 0. The first charcter in
+        the string is the one with the lowest bits (0-5).
 
-        Der neue String wird automatisch verlaengert, falls noetig.
+        The new string will automatically be extended if needed.
 
-BEISPIELE
+EXAMPLES
         string s;
         s=set_bit("?",5);
 
-        Weil "?" einen Wert von 31 hat, ist das 6. Bit nicht gesetzt. Wird
-        es gesetzt, so ergibt sich "_". Der String s enthaelt nun also "_".
+        Because "?" has a value of 31 the variable s will now contain
+        the character "_" which is equal to 63 (31+2^5=63).
 
         string s;
         s=set_bit("78",3);
         s=set_bit(s,8);
 
-        s enthaelt nun "?<".
+        s will now contain the string "?<".
 
-SIEHE AUCH
+SEE ALSO
         clear_bit(E), last_bit(E), next_bit(E), test_bit(E), count_bits(E),
         and_bits(E), or_bits(E), xor_bits(E), invert_bits(E), copy_bits(E)
diff --git a/doc/efun/set_driver_hook b/doc/efun/set_driver_hook
index 5489120..0a6f67b 100644
--- a/doc/efun/set_driver_hook
+++ b/doc/efun/set_driver_hook
@@ -1,11 +1,13 @@
 SYNOPSIS
+        #include <driver_hook.h>
+
         void set_driver_hook(int what, closure arg)
         void set_driver_hook(int what, string arg)
-        void set_driver_hook(int what, string * arg)
+        void set_driver_hook(int what, string *arg)
 
 DESCRIPTION
         This privileged efun sets the driver hook 'what' (values are
-        defined in /sys/driver_hook.h) to 'arg'.
+        defined in <driver_hook.h>) to 'arg'.
         The exact meanings and types of 'arg' depend of the hook set.
         To remove a hook, set 'arg' to 0.
 
@@ -30,6 +32,14 @@
             closure), function name.
           Optional hooks for creation/reset/clean up-actions.
 
+        H_CREATE_LWOBJECT
+        H_CREATE_LWOBJECT_COPY
+        H_CREATE_LWOBJECT_RESTORE
+          arg: lambda closure, function name.
+          Optional hooks for creation of lightweight objects
+          with new_lwobject(), copy()/deep_copy() resp.
+          restore_value()/restore_object().
+
         H_DEFAULT_METHOD
           arg: lambda closure, lfun closure, function name.
           Optional hook for default method implementation.
@@ -73,6 +83,17 @@
           Optional hook to specify a string to be included before the
           source of every compiled LPC object.
 
+        H_AUTO_INCLUDE_EXPRESSION
+        H_AUTO_INCLUDE_BLOCK
+          arg: closure, string
+          Optional hook specifying a string to be prepended before
+          the string of a compile_string() call.
+
+        H_FILE_ENCODING
+          arg: lambda closure, lfun closure, string
+          Optonal hook specifying the name of the encoding to be used
+          for decoding a file (default: "ascii").
+
         H_TELNET_NEG
           arg: lambda closure, lfun closure, string.
           Optional hook to specifiy how to perform a single telnet
@@ -88,11 +109,16 @@
           Optional hook to notify the mudlib about the termination of
           the erq demon.
 
+        H_MSG_DISCARDED
+          arg: lambda closure, lfun closure, string
+          Optional hook to specify a message or take other measures
+          when a message had to be discarded.
+
         See hooks(C) for a detailed discussion.
 
 HISTORY
         Introduced in 3.2.1@1 as efun309(), renamed to
-        set_driver_hook() in 3.2.1@13
+        set_driver_hook() in 3.2.1@13.
 
 SEE ALSO
         hooks(C)
diff --git a/doc/efun/set_environment b/doc/efun/set_environment
index 507a46d..4703b26 100644
--- a/doc/efun/set_environment
+++ b/doc/efun/set_environment
@@ -1,18 +1,17 @@
-GESCHUETZT
 SYNOPSIS
-        void set_environment(objet was, object env)
+        void set_environment(object item, object env)
 
-BESCHREIBUNG
-        Das Objekt <was> wird in die Umgebung <env> bewegt, welche auch 0
-        sein kann. Diese Efun wird im move_object() Hook verwendet. Sie macht
-        nichts, ausser das Objekt <was> zu bewegen - kein Aufruf von init()
-        oder sonstiges.
+DESCRIPTION
+        The item is moved into its new environment env, which may be 0.
+        This efun is to be used in the move_object() hook, as it does
+        nothing else than moving the item - no calls to init() or such.
 
-        Sprich: nicht in eigenen Objekten verwenden!
+        Don't use it in your own objects!
 
-GESCHICHTE
-        Eingefuehrt in 3.2.1.@1 als 'efun308()'.
-        In 3.2.6 umbenannt zu 'set_environment()'.
+HISTORY
+        Introduced in 3.2.1@1 as 'efun308()', renamed to 'set_environment()'
+        in 3.2.6.
 
-SIEHE AUCH
-        remove(A), init(A), move_object(E), transfer(E), hooks(C), native(C)
+SEE ALSO
+        remove(A), init(A), move_object(E), transfer(E), hooks(C),
+        native(C)
diff --git a/doc/efun/set_extra_wizinfo b/doc/efun/set_extra_wizinfo
index d676e00..b94dd9b 100644
--- a/doc/efun/set_extra_wizinfo
+++ b/doc/efun/set_extra_wizinfo
@@ -1,26 +1,24 @@
-GESCHUETZT
 SYNOPSIS
         void set_extra_wizinfo(object   wiz, mixed extra)
         void set_extra_wizinfo(lwobject wiz, mixed extra)
         void set_extra_wizinfo(string   wiz, mixed extra)
         void set_extra_wizinfo(int      wiz, mixed extra)
 
-BESCHREIBUNG
-        Setzt den Wert <extra> als Eintrag im 'Extra' Feld in der Wizlist fuer
-        den Gott <wiz>.
+DESCRIPTION
+        Set the value <extra> as the 'extra' information for the wizlist
+        entry of <wiz>.
 
-        Ist <wiz> ein normales oder leichtgewichtiges Objekt, so wird der
-        Eintrag vom Erzeuger des Objekts (also dessen UID) verwendet.
-        Ist <wiz> ein String (ein Erzeuger bzw. eine UID), bezeichnet dieser
-        den Eintrag, dem <extra> zugewiesen wird.
-        Ist <wiz> 0, wird <extra> im Standardeintrag der Wizlist gesetzt.
-        Diese Funktion kann man verwenden, um Daten fuer die gesamte Laufzeit
-        des Treibers bis zum naechsten Shutdown zu speichern, zum Beispiel den
-        Zeitpunkt des letzten Reboot.
+        If <wiz> is a regular or lightweight object, the entry of its
+        creator (uid) is used.
+        If <wiz> is a string (a creator aka uid), it names the entry
+        to use.
+        If <wiz> is the number 0, the data is set in the default wizlist
+        entry. It can be used to store data for the lifetime of this
+        driver run, like the time of the last reboot.
 
-        Das Argument <extra> kann jeden Wert enthalten.
+        The <extra> argument may be any value.
 
-        Die Funktion verursacht eine Schutzverletzung.
+        The function causes a privilege violation.
 
-SIEHE AUCH
+SEE ALSO
         get_extra_wizinfo(E), set_extra_wizinfo_size(E), wizlist_info(E)
diff --git a/doc/efun/set_next_reset b/doc/efun/set_next_reset
index 20961ea..a3d660e 100644
--- a/doc/efun/set_next_reset
+++ b/doc/efun/set_next_reset
@@ -1,26 +1,24 @@
 SYNOPSIS
         int set_next_reset(int delay)
 
-BESCHREIBUNG
-        Weist den Gamedriver an, im Objekt nicht vor Ablauf von <delay>
-        Sekunden einen Reset durchzufuehren. Wird fuer <delay> ein negativer
-        Wert angegeben, wird nie ein Reset im Objekt durchgefuehrt (sinnvoll
-        fuer Blueprints). Wird fuer <delay> 0 angegeben, wird die
-        Reset-Zeit des Objekts nicht veraendert.
+DESCRIPTION
+        Instruct the gamedriver to reset this object not earlier than
+        in <delay> seconds. If a negative value is given as delay, the object
+        will never reset (useful for blueprints). If 0 is given, the
+        object's reset time is not changed.
 
-        Die Funktion gibt die verbleibende Zeit bis zum naechsten Reset
-        zurueck, bevor <delay> gesetzt wurde. Der Wert kann auch negativ
-        sein, wenn der Reset ueberfaellig war.
+        Result is the former delay to the objects next reset (which can be
+        negative if the reset was overdue).
 
-        Merke: die tatsaechliche Zeit, wann der Reset im Objekt
-        durchgefuehrt wird, haengt davon ab, ob das Objekt nach Ablauf
-        von <delay> verwendet wird.
+        Note that the actual time the reset occurs depends on when
+        the object will be used after the given time delay.
 
-BEISPIELE
-        set_next_reset(15*60);      Der naechste Reset erfolgt nach
-                                    fruehestens 15 Minuten.
-        set_next_reset(0);          Gibt die verbleibende Zeit zum naechsten
-                                    Reset zurueck.
+EXAMPLES
+        set_next_reset(15*60); // Next reset in 15 Minutes or later
+        set_next_reset(0)      --> just returns the time until the
+                                   next reset.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6, angepasst von Morgengrauen.
+HISTORY
+        Introduced in LDMud 3.2.6, adapted from Morgengrauen.
+
+SEE ALSO
diff --git a/doc/efun/set_this_object b/doc/efun/set_this_object
index 1aa0c6a..2af7e1d 100644
--- a/doc/efun/set_this_object
+++ b/doc/efun/set_this_object
@@ -1,60 +1,56 @@
-GESCHUETZT
 SYNOPSIS
-        void set_this_object(object|lwobject objekt-an-stelle-von-originalobjekt)
+        void set_this_object(object|lwobject object_to_pretend_to_be)
 
-BESCHREIBUNG
-        Dies ist eine geschuetzte Funktion, die nur vom Master-Objekt und im
-        Simul-Efun-Objekt genutzt werden darf. Bei sonstiger Benutzung
-        erzeugt diese Funktion einen Fehler.
+DESCRIPTION
+        This is a privileged function, only to be used in the master
+        object or in the simul_efun object.
 
-        Die Funktion aendert das Resultat von this_object() in der laufenden
-        Funktion, ebenso das Resultat von previous_object() in Funktionen in
-        anderen Objekten, die einen call_other() Aufruf machen.
+        It changes the result of this_object() in the using function,
+        and the result of previous_object() in functions called in
+        other objects by call_other()/apply()/funcall(). Its effect will
+        remain till there is a return of an external function call, or
+        another call of set_this_object(). While executing code in the
+        master object's program or the primary simul_efun object's
+        program, set_this_object() is granted even if this_object() is
+        altered by set_this_object(). This does not apply to functions
+        inherited from other programs.
 
-        Der Effekt von set_this_object() bleibt bestehen, bis ein externer
-        Funktionsaufruf abgeschlossen ist oder bis zu einem erneuten Aufruf
-        von set_this_object(). Waehrend der Ausfuehrung von Code im
-        Master-Objekt oder im Simul-Efun-Objekt ist set_this_object()
-        garantiert, auch wenn this_object() durch set_this_object()
-        veraendert wird. Die gilt nicht fuer Funktionen, die aus anderen
-        Programmen geerbt werden.
+        Use it with extreme care to avoid inconsistencies.  After a
+        call of set_this_object(), some LPC-constructs might behave in
+        an odd manner, or even crash the system. In particular, using
+        global variables or calling local functions (except by
+        call_other) is illegal and actively prevented.
 
-        Diese Funktion darf nur mit hoechster Sorgfalt verwendet werden, um
-        Inkonsistenzen zu vermeiden. Nach einem Aufruf von set_this_object()
-        koennen sich gewisse LPC-Konstrukte merkwuerdig verhalten oder gar
-        das System zum Absturz bringen. Insbesondere die Verwendung von
-        globalen Variablen oder der Aufruf von lokalen Funktionen (ausser
-        durch call_other()) ist unzulaessig und wird aktiv verhindert.
+        Allowed are call_other(), map functions, access of local variables
+        (which might hold array pointers to a global array), simple arithmetic
+        and the assignment operators.
 
-        Erlaubt sind call_other(), map(), der Zugriff auf lokale Variablen
-        (die auch Pointers auf globale Arrays enthalten duerfen), einfache
-        Arithmetik und der Zuweisungs-Operator.
+BUGS
+        It is currently not possible to directly restore the original
+        current object. So instead of writing
 
-FEHLER
-        Es ist momentan nicht moeglich, das originale gueltige Objekt wieder
-        herzustellen. Anstelle von:
+          object me = this_object();
+          set_this_object(that);
+          <some code>
+          set_this_object(me);
+          <more code>
 
-            object ich = this_object();
-            set_this_object(dings);
-            <irgendwelcher Code>
-            set_this_object(ich);
-            <mehr Code>
+        one has to use a workaround:
 
-        muss das ueber einen Umweg geloest werden:
+          private void doit (object that) {
+            set_this_object(that);
+            <some code>
+          }
 
-            private void tuwas(object dings) {
-                set_this_object(dings);
-                <irgendwelcher code>
-            }
+          funcall(#'doit, that);
+          <more code>
 
-            funcall(#'tuwas, dings);
-            <mehr Code>
+        Some people would consider this a feature.
 
-        Manche Leute bezeichnen das als Feature.
+HISTORY
+        LDMud 3.2.10 actively prevents references to global variables
+        and function calls by address while set_this_object() is in
+        effect.
 
-GESCHICHTE
-        LDMud 3.2.10 verhindert aktiv die Referenz auf globale Variablen und
-            Funktionsaufrufe nach Adresse, waehrend set_this_object() gilt.
-
-SIEHE AUCH
+SEE ALSO
         this_object(E), set_this_player(E)
diff --git a/doc/efun/set_this_player b/doc/efun/set_this_player
index 91b4124..a83d350 100644
--- a/doc/efun/set_this_player
+++ b/doc/efun/set_this_player
@@ -1,20 +1,18 @@
-GESCHUETZT
 SYNOPSIS
         void set_this_player(object ob)
 
-BESCHREIBUNG
-        Aendert den momentanen Kommandogeber zu <ob>. Dabei kann <ob> auch
-        0 sein, wenn der aktuelle Kommandogeber 'deaktiviert' werden soll.
+DESCRIPTION
+        Change the current command giver to <ob>. <ob> may be 0 if
+        you want to 'deactivate' the current command giver.
 
-        Diese Funktion ist nicht geschuetzt und sollte deshalb von einer
-        simul_efun ueberlagert werden, die die Efun entweder komplett
-        abschaltet, oder mindestens gewisse Sicherheitschecks durchfuehrt.
-        Es ist sonst einfach, die Sicherheit eines Muds mit Hilfe dieser
-        Efun zu untergraben.
+        This efun is not privileged, therefore it should be redefined
+        by a nomask simul_efun which then either completely disables
+        the efun or at least performs some security checks.
+        It is easy to undermine a mudlibs security using this efun.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.1.
-        LDMud 3.2.6 fuehrte die 0 als moeglichen Parameter ein.
+HISTORY
+        Introduced in 3.2.1.
+        LDMud 3.2.6 added the value 0 as acceptable parameter.
 
-SIEHE AUCH
+SEE ALSO
         set_this_object(E), this_player(E)
diff --git a/doc/efun/sgn b/doc/efun/sgn
index 938ecf6..ee1e1f4 100644
--- a/doc/efun/sgn
+++ b/doc/efun/sgn
@@ -1,8 +1,8 @@
 SYNOPSIS
         int sgn(int|float arg)
 
-BESCHREIBUNG
-        Liefert das Vorzeichen des Argumentes.
+DESCRIPTION
+        Return the sign of the argument.
 
         arg  sgn(arg)
         --------------
@@ -10,8 +10,8 @@
           0   0
         < 0  -1
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
+HISTORY
+        Introduced in LDMud 3.2.9.
 
-SIEHE AUCH
+SEE ALSO
         abs(E)
diff --git a/doc/efun/sha1 b/doc/efun/sha1
index 4fe4f06..a8ad455 100644
--- a/doc/efun/sha1
+++ b/doc/efun/sha1
@@ -1,33 +1,34 @@
+OBSOLETE
 SYNOPSIS
-        string sha1(string arg [, int iterations])
-        string sha1(bytes  arg [, int iterations])
-        string sha1(int *  arg [, int iterations])
+        string sha1(string arg [, int iterations ])
+        string sha1(bytes  arg [, int iterations ])
+        string sha1(int  * arg [, int iterations ])
 
-BESCHREIBUNG
-        Berechnet den SHA1-Hashwert von <arg>.
-        Das Argument kann ein String, eine Bytefolge oder ein Array von
-        Zahlen sein (die als Folge von Bytes betrachtet wird, wobei
-        immer nur die untersten 8 Bits Verwendung finden). Falls ein String
-        uebergeben wurde, so wird dieser in eine UTF-8-Bytefolge konvertiert
-        und davon der Hash berechnet.
+DESCRIPTION
+        Create and return a SHA1 message digest from <arg>.
+        <arg> may be a string, a byte sequence, or an array of numbers
+        (each considered to be a byte, ignoring all but the lowest 8 bits).
+        A string is converted to a UTF-8 byte sequence of which then the
+        digest will be created.
 
-        Ist das <iterations> Argument eine Zahl groesser 0, berechnet der
-        Driver den Digest mit diese Anzahl an Wiederholungen. Fehlt die
-        Angabe, fuehrt der Driver die Digest-Berechnung einmal aus.
-        
-        Jede Iteration kostet 5 Evalution-Ticks.
+        If <iterations> is given as a number greater than 0, it is
+        the number of iterations used in the digest calculation. If omitted,
+        the driver executes just one iteration.
 
-BEISPIELE
+        The efun costs 5 ticks per iteration.
+
+EXAMPLES
         string s;
 
         s = sha1("Hello");
         s = sha1( ({ 'H', 'e', 'l', 'l', 'o' })
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.3.523.
-        LDMud 3.3.712 fuehrte Zaehlenarrays als Argument ein.
-        LDMud 3.3.717 fuehrte die Iterations-basierte Evaluationskosten ein.
-        Seit LDMud 3.3.719 abgeloest durch hash().
+HISTORY
+        Introduced in LDMud 3.3.523.
+        LDMud 3.3.712 added number arrays as argument, and the number
+          of iterations.
+        LDMud 3.3.717 added the iteration-based evaluation cost.
+        Since LDMud 3.3.719 obsoleted by hash().
 
-SIEHE AUCH
-        crypt(E), md5(E)
+SEE ALSO
+        crypt(E), md5(E), md5_crypt(E), hash(E), hmac(E)
diff --git a/doc/efun/shadow b/doc/efun/shadow
index 16ab11e..bf8d156 100644
--- a/doc/efun/shadow
+++ b/doc/efun/shadow
@@ -1,46 +1,44 @@
 SYNOPSIS
-        object shadow(object obj, int flag)
+        int shadow(object ob)
 
-BESCHREIBUNG
-        Damit wird das aktuelle Objekt dem Objekt <obj> als Shadow
-        uebergeworfen. Bei Erfolg liefert es 1, sonst 0 zurueck.
+DESCRIPTION
+        The current object will become a shadow of ob. This efun
+        returns 1 on success, 0 otherwise.
 
-        Das aufrufende Objekt muss vom Master-Objekt die Erlaubnis haben,
-        als Shadow zu wirken. Normalerweise kann einem Objekt, das
-        query_prevent_shadow() == 1 zurueck liefert, kein Shadow
-        uebergeworfen werden. In diesem Fall liefert shadow() 0 zurueck,
-        sonst das Objekt, dem der Shadow uebergeworfen wurde.
+        The calling object must be permitted by the master object to
+        do the shadowing. In most installations, an object that
+        defines the function query_prevent_shadow() to return 1
+        can't be shadowed, and the shadow() function will return 0
+        instead of ob.
 
-        shadow() schlaeft fehl, wenn:
-          - der Shadow vesucht, eine "nomask" definierte Funktion zu
-            ueberlagern,
-          - wenn im Praeprozessor #pragma no_shadow gesetzt ist,
-          - wenn das aufrufende Objekt bereits ein Shadow ist,
-          - wenn das aufrufende Objekt selbst einen Shadow uebergeworfen hat,
-          - wenn das aufrufende Objekt ueber ein Environment verfuegt,
-          - wenn das Zielobjekt <obj> selbst ein Shadow ist.
+        shadow() also fails if the calling object tries to shadow
+        a function that was defined as ``nomask'', if the program was
+        compiled with the #pragma no_shadow, or if the calling
+        object is already shadowing, is being shadowed, or has an
+        environment. Also the target ob must not be shadowing
+        something else.
 
-        Wenn ein Objekt A einem Objekt B als Shadow uebergeworfen wird,
-        werden alle call_other() Aufrufe fuer B an A umgeleitet. Wenn A die
-        Funktion, die von call_other() aufgerufen wird, nicht definiert hat,
-        wird der Aufruf an B weitergeleitet. Es gibt also nur ein Objekt,
-        welches call_other() Aufrufe fuer B machen kann: das Objekt A. Nicht
-        einmal das Objekt B kann einen call_other() auf sich selbst machen.
-        Hingegen werden alle normalen (internen) Funktionsaufrufe innerhalb
-        von B werden wie gewohnt innerhalb von B bearbeitet.
+        If an object A shadows an object B then all call_other() to B
+        will be redirected to A. If object A has not defined the
+        function, then the call will be passed to B. There is only on
+        object that can call functions in B with call_other(), and
+        that is A. Not even object B can call_other() itself. All
+        normal (internal) function calls inside B will however remain
+        internal to B.
 
-BEISPIELE
-        Mit drei Objekten a.c, b.c und c.c:
+EXAMPLES
+        With the three objects a.c, b.c and c.c
 
-        --- a.c ---
-            void fun() {
+            --- a.c ---
+            int fun() {
                 debug_message(sprintf("%O [a] fun()\n", this_object()));
             }
+
             void fun3() {
                 debug_message(sprintf("%O [a] fun3()\n", this_object()));
             }
 
-        --- b.c ---
+            --- b.c ---
             int fun() {
                 debug_message(sprintf("%O [b] fun()\n", this_object()));
                 find_object("a")->fun();
@@ -53,7 +51,7 @@
 
             void do_shadow(object target) { shadow(target, 1); }
 
-        --- c.c ---
+            --- c.c ---
             int fun() {
                 debug_message(sprintf("%O [c] fun()\n", this_object()));
                 find_object("a")->fun();
@@ -63,7 +61,7 @@
             }
             void do_shadow(object target) { shadow(target, 1); }
 
-        Es wird nun folgender Code aufgerufen:
+        code like the following
 
             object a, b, c;
 
@@ -81,39 +79,39 @@
             debug_message("--- b->fun2() ---\n");
             b->fun2();
 
-        Das ergibt diesen Output:
+        produces this output:
 
-        --- a->fun() ---
+            --- a->fun() ---
             /c [c] fun()
             /b [b] fun()
             /a [a] fun()
-        --- b->fun() ---
+            --- b->fun() ---
             /c [c] fun()
             /b [b] fun()
             /a [a] fun()
-        --- c->fun() ---
+            --- c->fun() ---
             /c [c] fun()
             /b [b] fun()
             /a [a] fun()
-        --- b->fun2() ---
+            --- b->fun2() ---
             /b [b] fun2()
             /a [a] fun3()
             /c [c] fun3()
 
-            Merke: der erste Aufruf in b::fun2() findet zuerst c::fun3()!
-            Der Grund ist, dass fuer Aufrufe aus b fuer a der Treiber
-            annimmt, dass alle Shadows vor c schon ihre Chance hatten. Der
-            zweite Aufruf hingegen ergeht an b selbst, das der Treiber als
-            vom Shadow c ueberlagert erkennt.
+        Note that the first call in b::fun2() find c::fun3()! Reason is that
+        for calls originating from b to a the driver assumes that all
+        shadows beyond c already had their chance. The second call however
+        was to b itself, which the gamedriver recognized as being shadowed
+        by c.
 
-GESCHICHTE
-        Bis 3.2.1@46 fuehrte die Zerstoerung eines Objekts, dem ein Shadow
-            uebergeworfen war, auch zur Zerstoerung aller seiner Shadows.
-        Seit 3.2.1@47 ueberleben Shadows die Zerstoerung des Objektes, dem
-            sie uebergeworfen sind (ausser, die wird von prepare_destruct()
-            manuell erledigt).
-        Seit LDMud 3.2.8 koenne sich Objekte dank #pragma no_shadow gezielt
-            davor schuetzen, einen Shadow uebergeworfen zu bekommen.
+HISTORY
+        Up to 3.2.1@46, destructing a shadowed object also destructs
+        all shadows. Since 3.2.1@47, shadows may survive the
+        destruction of the shadowee (unless the prepare_destruct() in
+        the master object destructs them manually).
 
-SIEHE AUCH
+        Since LDMud 3.2.8, programs may protect themselves from being
+        shadowed with the #pragma no_shadow.
+
+SEE ALSO
         query_shadowing(E), unshadow(E), query_allow_shadow(M)
diff --git a/doc/efun/shutdown b/doc/efun/shutdown
index 03e7ec5..ecd3ae9 100644
--- a/doc/efun/shutdown
+++ b/doc/efun/shutdown
@@ -2,22 +2,20 @@
         void shutdown()
         void shutdown(int exit_code)
 
-BESCHREIBUNG
-        Faehrt das Mud herunter. Diese Funktion darf nie verwendet werden!
-        Wenn das Mud heruntergefahren werden muss, so hat dies ueber den
-        Shutdownbefehl zu erfolgen.
+DESCRIPTION
+        Shutdown the mud, setting the process result code to
+        <exit_code>, or 0 if not given.
 
-        Ist ein <exit_code> Argument gegeben, wird sein Wert als der
-        Unix-Resultatwert verwendet; andernfalls wird 0 verwendet.
+        Never use this efun. Instead if you have a need to shutdown
+        the mud use the shutdown command.  You may be asking yourself,
+        if you're not supposed to use it why is it here?  Sorry, I
+        cannot answer that.  Its top secret.
 
-        Man fragt sich nun vielleicht, wozu es dann diese Funktion gibt,
-        wenn man sie nicht verwenden darf. Sorry, das darf hier nicht
-        bekannt gegeben werden. Streng geheim.
+        The efun causes a privilege violation.
 
-        Diese efun ist privilegiert.
+HISTORY
+        LDMud 3.2.11 introduced the exit code.
+        LDMud 3.5.0 made the efun privileged.
 
-GESCHICHTE
-        LDMud 3.2.11 fuehrte das 'exit_code' Argument ein.
-        LDMud 3.5.0 machte die efun privilegiert.
-SIEHE AUCH
+SEE ALSO
         break_point(E), swap(E), privilege_violation(M)
diff --git a/doc/efun/sin b/doc/efun/sin
index cf8f981..38a70b8 100644
--- a/doc/efun/sin
+++ b/doc/efun/sin
@@ -1,11 +1,11 @@
 SYNOPSIS
         float sin(int|float)
 
-BESCHREIBUNG
-        Liefert den Sinus des Argumentes.
+DESCRIPTION
+        Returns the sinus of the argument.
 
-GESCHICHTE
-        LDMud 3.2.9: Ganzzahlen (Integers) als Argument hinzugefuegt.
+HISTORY
+        LDMud 3.2.9 added integers as arguments.
 
-SIEHE AUCH
+SEE ALSO
         asin(E), cos(E), acos(E), tan(E), atan(E), atan2(E)
diff --git a/doc/efun/sizeof b/doc/efun/sizeof
index 247d834..9df18d8 100644
--- a/doc/efun/sizeof
+++ b/doc/efun/sizeof
@@ -5,25 +5,24 @@
         int sizeof(mapping val)
         int sizeof(struct xxx val)
 
-BESCHREIBUNG
-        Liefert die Anzahl Elemente in einem Array <val>, die Anzahl
-        Zeichen in einem String <val>, die Anzahl an Bytes in der
-        Bytefolge <val> oder die Anzal Keys in einem Mapping <val>.
+DESCRIPTION
+        Returns the number of elements of an array or struct, the number of
+        characters in a string, number of bytes in a byte sequence, or the
+        number of keys in a mapping.
 
-        Als Spezialfall kann <val> auch 0 sein. In diesem Fall liefert die
-        Funktion 0 zurueck.
+        As a special case, the number 0 can be passed, and the function
+        will return 0.
 
-        Falls im Spiel Objekte zerstoert wurde, seit das Mapping zuletzt auf
-        zerstoerte Keys geprueft wurde, muss es zuerst auf zerstoerte Objekte
-        in Keys geprueft werden. In diesem Fall steigt die Laufzeit mit der
-        Anzahl der Keys im Mapping (O(n)).
-        Anderenfalls ist die Laufzeit unabhaengig der Anzahl der Schluessel
-        (O(1)).
+        If there were any objects destroyed in the game since the mapping was
+        last checked for destructed keys, the mapping() needs to be checked
+        for destructed objects in keys first. In that case, the runtime
+        increases linear with the number of keys in the mapping (O(n)).
+        Otherwise the runtime is independent of the mappings size (O(1)).
 
-GESCHICHTE
-        LDMud 3.2.9 fuehrte Strings als moegliche Argumente ein.
-        LDMud 3.3 fuehrte Structs als moegliche Argumente ein.
+HISTORY
+        LDMud 3.2.9 added strings to the possible parameters.
+        LDMud 3.3 added support for structs.
 
-SIEHE AUCH
+SEE ALSO
         strlen(E), allocate(E), pointerp(E), mappingp(E), m_allocate(E),
-        widthof(E)
+        widthof(E), text_width(E)
diff --git a/doc/efun/sl_close b/doc/efun/sl_close
index 753948d..984efc9 100644
--- a/doc/efun/sl_close
+++ b/doc/efun/sl_close
@@ -2,16 +2,15 @@
 SYNOPSIS
         void sl_close()
 
-BESCHREIBUNG
-        Schliesst die SQLite-Datenbank, welche vom aktuellen Objekt
-        geoeffnet wurde.
+DESCRIPTION
+        Closes the SQLite database that is associated with the
+        current object.
 
-        Diese Funktion ist nur verfuegbar, wenn der Driver mit SQLite-
-        Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __SQLITE__ definiert.
+        The function is available only if the driver is compiled with
+        SQLite support. In that case, __SQLITE__ is defined.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.3.713.
+HISTORY
+        Added in LDMud 3.3.713.
 
-SIEHE AUCH
+SEE ALSO
         sl_open(E), sl_exec(E), sl_insert_id(E)
diff --git a/doc/efun/sl_exec b/doc/efun/sl_exec
index 406c741..28f5c41 100644
--- a/doc/efun/sl_exec
+++ b/doc/efun/sl_exec
@@ -2,28 +2,27 @@
 SYNOPSIS
         mixed * sl_exec(string statement, ...)
 
-BESCHREIBUNG
-        Fuehrt den SQL-Befehl <statement> in der aktuell geoeffneten
-        SQLite-Datenbank aus. Dieser SQL-Befehl kann Wildcards wie '?'
-        nd '?nnn', wobei 'nnn' eine Zahl ist, enthalten. Diese Wildcards
-        koennen als weitere Parameter an sl_exec uebergeben werden.
-        Mit '?nnn' kann direkt die Nummer eines bestimmten Parameters
-        angegeben werden, der erste Parameter hat die Nummer 1.
+DESCRIPTION
+        Executes the SQL statement <statement> for the current
+        SQLite database. The SQL statement may contain wildcards like
+        '?' and '?nnn', where 'nnn' is an integer. These wildcards
+        can be given as further parameters to sl_exec. With '?nnn'
+        the number of a specific parameter can be given, the first
+        parameter has number 1.
 
-        Falls der SQL-Befehl Daten zurueckliefert, liefert sl_exec ein
-        Array aus den einzelnen Zeilen (welche wieder Arrays der einzelnen
-        Felder sind) zurueck.
+        If the statement returns data, sl_exec returns an array
+        with each row (which is itself an array of columns) as 
+        an element.
 
-        Pragma-Befehle erzeugen eine privilege_violation ("sqlite_pragma",
-        ob, name, wert). Wird das Privileg verneint, wird ein Fehler
-        ausgeloest.
+        Pragma statements raise a privilege_violation ("sqlite_pragma",
+        ob, name, value). If the privilege is denied, an error is
+        thrown.
 
-        Diese Funktion ist nur verfuegbar, wenn der Driver mit SQLite-
-        Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __SQLITE__ definiert.
+        The function is available only if the driver is compiled with
+        SQLite support. In that case, __SQLITE__ is defined.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.3.713.
+HISTORY
+        Added in LDMud 3.3.713.
 
-SIEHE AUCH
+SEE ALSO
         sl_open(E), sl_insert_id(E), sl_close(E)
diff --git a/doc/efun/sl_insert_id b/doc/efun/sl_insert_id
index a425cef..49c1fb8 100644
--- a/doc/efun/sl_insert_id
+++ b/doc/efun/sl_insert_id
@@ -2,17 +2,16 @@
 SYNOPSIS
         int sl_insert_id()
 
-BESCHREIBUNG
-        Nachdem eine Zeile in eine Tabelle mit einer AUTO_INCREMENT-Spalte
-        eingefuegt wurde, kann man mit dieser Funktion den (neuen) Wert
-        dieses AUTO_INCREMENT-Feldes der eingefuegten Zeile abfragen.
+DESCRIPTION
+        After inserting a line into a table with an AUTO_INCREMENT field,
+        this efun can be used to return the (new) value of the AUTO_INCREMENT
+        field.
 
-        Diese Funktion ist nur verfuegbar, wenn der Driver mit SQLite-
-        Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __SQLITE__ definiert.
+        The function is available only if the driver is compiled with
+        SQLite support. In that case, __SQLITE__ is defined.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.3.713.
+HISTORY
+        Added in LDMud 3.3.713.
 
-SIEHE AUCH
+SEE ALSO
         sl_open(E), sl_exec(E), sl_close(E)
diff --git a/doc/efun/sl_open b/doc/efun/sl_open
index b54685d..5fd01bf 100644
--- a/doc/efun/sl_open
+++ b/doc/efun/sl_open
@@ -2,19 +2,17 @@
 SYNOPSIS
         int sl_open(string filename)
 
-BESCHREIBUNG
-        Oeffnet die Datei <filename> als SQLite-Datenbank. Falls
-        sie noch nicht existiert, wird sie erstellt. Es ist nur
-        eine geoeffnete Datenbank pro Objekt erlaubt. Im Erfolgsfalle
-        liefert diese Funktion 1 zurueck, anderenfalls wird
-        normalerweise ein Fehler ausgeloest.
+DESCRIPTION
+        Opens the file <filename> for use as a SQLite database.
+        If the file doesn't exists it will be created.
+        Only one open file per object is allowed. On success this
+        function returns 1, otherwise usually an error is thrown.
 
-        Diese Funktion ist nur verfuegbar, wenn der Driver mit SQLite-
-        Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __SQLITE__ definiert.
+        The function is available only if the driver is compiled with
+        SQLite support. In that case, __SQLITE__ is defined.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.3.713.
+HISTORY
+        Added in LDMud 3.3.713.
 
-SIEHE AUCH
+SEE ALSO
         sl_exec(E), sl_insert_id(E), sl_close(E)
diff --git a/doc/efun/snoop b/doc/efun/snoop
index bda2cd5..7428ca2 100644
--- a/doc/efun/snoop
+++ b/doc/efun/snoop
@@ -1,22 +1,25 @@
-GESCHUETZT
 SYNOPSIS
-        int snoop(object snooper)
-        int snoop(object snooper, object snoopee)
+        object snoop(object snooper)
+        object snoop(object snooper, object snoopee)
 
-BESCHREIBUNG
-        Beginnt die Beobachtung des Objekts <snoopee> durch <snooper>. Wenn
-        <snoopee> nicht angegeben wird, werden alle Beobachtungen von
-        <snooper> beendet.
+DESCRIPTION
+        Starts a snoop from 'snooper' on 'snoopee', or if 'snoopee' is not
+        given, terminates any snoop from 'snooper'.
 
-        Die Funktion liefert 1 bei Erfolg, -1 wenn eine Schleife entstehen
-        wuerde und 0 fuer alle anderen Fehler.
+        Return <snoopee> on success, or 0 for a failure (including snooping
+        loops).
 
-        Die Beobachtung wird mit dem Master-Objekt auf Gueltigkeit geprueft.
-        Es wird auch ein Fehler verursacht, wenn eine Beobachtung zu einer
-        Rekursion fuehren wuerde.
+        The snoop is checked with the master object for validity.  It
+        will also fail if a snoop would result in a recursive snoop
+        action.
 
-ANMERKUNGEN
-        Diese Funktion ist geschuetzt.
+        <snooper> can be an interactive player, or an object. If it is
+        an interactive player, the snooped text is prepended with a
+        '%' and send directly to the players connection. If <snooper>
+        is an object, the snooped text is sent in two calls to the
+        object's catch_tell() lfun: the first call passes just the
+        "%" (plus the prompt if the object changed it), the second the
+        actual text.
 
-SIEHE AUCH
-        query_snoop(E)
+SEE ALSO
+        query_snoop(E), catch_tell(A)
diff --git a/doc/efun/sort_array b/doc/efun/sort_array
index 3316a0c..65c861e 100644
--- a/doc/efun/sort_array
+++ b/doc/efun/sort_array
@@ -1,74 +1,71 @@
 SYNOPSIS
         mixed * sort_array(mixed *arr, string wrong_order)
         mixed * sort_array(mixed *arr, string wrong_order, object|string ob)
-        mixed * sort_array(mixed *arr, string wrong_order, object|string ob,
-                             mixed extra...)
+        mixed * sort_array(mixed *arr, string wrong_order, object|string ob
+                           , mixed extra...)
         mixed * sort_array(mixed *arr, closure cl)
         mixed * sort_array(mixed *arr, closure cl, mixed extra...)
 
-BESCHREIBUNG
-        Sortiert das Array <arr> entweder nach der Ordnungsfunktion
-        <ob->wrong_order(a, b)> oder nach der Closure cl.
+DESCRIPTION
+        Sort the copy either by the ordering function ob->wrong_order(a, b),
+        or by the closure expression <cl>.
 
-        Normalerweise wird zuerst eine flache Kopie des Arrays <arr> erstellt
-        und die sortierte Kopie als Ergebnis zurueckgeliefert. Wird <arr>
-        jedoch als Referenz uebergeben, wird keine implizite Kopie erstellt
-        und das Originalarray sortiert.
+        Usually a shallow copy of <arr> is made first and the sorted copy is
+        returned as result. However, if <arr> is given as a reference, no copy
+        will be made and <arr> will be sorted in-place.
 
-        Wenn das Argument <arr> 0 ist, ist das Resultat der Funktion auch 0.
+        If the <arr> argument equals 0, the result is also 0.
 
-        <ob> ist das Objekt, in dem die Ordnungsfunktion <wrong_order()>
-        aufgerufen wird. <ob> kann das Objekt als solches enthalten, oder
-        einen String mit dem Objektnamen. Wird <ob> nicht angegeben, oder
-        enthaelt es weder einen String noch ein Objekt, wird stattdessen
-        this_object() verwendet.
+        <ob> is the object in which the ordering function is called
+        and may be given as object or by its filename. If <ob> is omitted
+        or neither a string nor an object, it defaults to this_object().
 
-        Die Elemente von <arr> werden paarweise an die Ordnungsfunktion
-        <wrong_order()> als Argumente uebergeben, gefolgt von den <extra>
-        Argumenten, falls vorhanden. Die Ordnungsfunktion <wrong_order> sollte
-        eine positve Zahl liefern, wenn die paarweisen Elemente in der
-        falschen Reihenfolge waren, 0 oder eine negative Zahl sonst.
+        The elements from the array to be sorted are passed in pairs to
+        the function <wrong_order> as arguments, followed by the <extra>
+        arguments if any.
 
-BEISPIELE
-        Um folgendes Array in aufsteigender Reihenfolge zu ordnen:
+        The function should return a positive number if the elements
+        are in the wrong order. It should return 0 or a negative
+        number if the elements are in the correct order.
 
-            arr = ({ 3, 8, 1, 3 })
+EXAMPLES
+        To sort an array
 
-        wird als Ordnungsfunktion ist_groesser() verwendet:
+          arr = ({ 3, 8, 1, 3 })
 
-            int ist_groesser(int a, int b) {
-                return a > b;
-            }
+        in ascending order with the help of the ordering function
 
-        Folgende Aufrufe von sort_array() sind alle aequivalent:
+          int is_greater (int a, int b) {
+            return a > b;
+          }
 
-            arr = sort_array(arr, "ist_groesser", this_object())
-            arr = sort_array(arr, "ist_groesser")
-            arr = sort_array(arr, #'ist_groesser)
-            arr = sort_array(arr, #'>)  //dies ist die bevorzugte Variante :-)
-            arr = sort_array(arr, lambda(({'a, 'b}), ({#'>, 'a, 'b})))
+        the following uses of sort_array() are equivalent:
 
-        Soll direkt das Original <arr> statt einer impliziten Kopie sortiert
-        werden:
+          arr = sort_array(arr, "is_greater", this_object())
+          arr = sort_array(arr, "is_greater")
+          arr = sort_array(arr, #'is_greater)
+          arr = sort_array(arr, #'>)  (this is the preferred variant :-)
+          arr = sort_array(arr, lambda(({'a, 'b}), ({#'>, 'a, 'b})))
 
-            sort_array(&arr, #'>)
+        If no implicit shallow copy of <arr> should be made, pass <arr> as
+        reference:
 
-        Etwas komplizierter ist es, folgendes Array aufsteigend nach dem
-        zweiten Argument jedes Teilarrays zu ordnen:
+          sort_array(&arr, #'>)
 
-            arr = ({ ({ "foo", 3 }), ({ "quux", 1 }), ... })
+        A more complicated example is to sort the array
 
-        Dafuer muss die Ordnungsfunktion folgende Form annehmen:
+          arr = ({ ({ "foo", 3 }), ({ "quux", 1 }), ... })
 
-            int ist_groesser(mixed *a, mixed *b) {
-                return a[1] > b[1];
-            }
+        in ascending order by the second element of each subarray.
+        For this, the ordering function should be like
 
-GESCHICHTE
-        LDMud 3.2.8 fuehrte die Moeglichkeit ein, zusaetzliche Argumente
-            <extra> zu uebergeben.
-        LDMud 3.3.720 unterstuetzt die Uebergabe von <arr> als Referenz und
-            sortiert das Original statt einer impliziten flachen Kopie.
+          int is_greater (mixed *a, mixed *b) {
+            return a[1] > b[1];
+          }
 
-SIEHE AUCH
+HISTORY
+        LDMud 3.2.8 added the support of extra arguments.
+        LDMud 3.3.720 added the support of references to sort in-place.
+
+SEE ALSO
         transpose_array(E), filter(E), map(E), alists(LPC)
diff --git a/doc/efun/sprintf b/doc/efun/sprintf
index 41a7c0e..cd74317 100644
--- a/doc/efun/sprintf
+++ b/doc/efun/sprintf
@@ -1,147 +1,191 @@
 SYNOPSIS
         string sprintf(string fmt, ...)
 
-BESCHREIBUNG
-        Mit dieser Funktion kann man auf einfache Weise aus dem Inhalt
-        von Variablen einen String bauen; und dies effektiver als
-        mit der ueblichen "Du hast "+anzahl+" Punkt(e)"-Methode.
+DESCRIPTION
+        Most of the characters in the format string (FMT) get passed
+        straight through to the output (ie: printed or put in the
+        return string), to format the arguments into the string it is
+        necessary to include an argument format string (AFS) in the
+        FMT.  An AFS is a series of characters starting with a percent
+        sign "%" and terminated with a argument type specifier.
+        To include a "%" sign in the output, it is necessary to include a
+        double percent sign "%%". The sequence "%^" will output "%^" again.
 
-        Die Funktion bekommt als erstes Argument einen Formatstring fmt,
-        der Informationen darueber enthaelt, wie die weiteren beliebigen
-        Argumente in den Ergebnisstring eingebaut werden sollen.
-        Die meisten Zeichen gelangen vom Formatstring unveraendert in
-        den Ausgabestring. Die Regeln zum Einbau eines Arguments werden
-        immer mit '%' eingeleitet. Moechte man ein '%' in die Ausgabe
-        bringen, so muss man im Formatstring "%%" verwenden.
+        Valid argument type specifiers are:
+          "s" : the argument is a string.
+          "d" : the argument is an integer to be included in decimal
+                representation.
+          "i" : same as "d".
+          "b" : the argument is an integer to be included in binary
+                representation.
+          "o" : the argument is an integer to be included in octal
+                representation.
+          "x" : the argument is an integer to be included in hexadecimal
+                representation.
+          "X" : as "x" except letters are capitalised.
+          "e","E","f","g","G" : the argument is a float to be included in
+                decimal representation; see examples for details
+          "c" : the argument is an int to included as a character
+          "O" : the argument is an LPC datatype to be printed in an arbituary
+                format, this is for debugging purposes.
+                If the argument is an object then the function
+                printf_obj_name() on the master object is called with the
+                object as a parameter, the string returned is included in
+                brackets at the end of object file name.
+                If 0 is returned then nothing is appended after the file name.
+          "Q"   Like "O", except that special characters in strings are
+                printed in LPC notation.
 
-        Ein einfaches Beispiel ist erg=sprintf("%s %d", str, i);
-        '%' leitet einen Argumentformatstring (AFS) ein. Das 's' schliesst
-        ihn ab und besagt, dass ein String eingebaut werden soll. Das
-        folgende Leerzeichen wird unveraendert uebernommen. '%' leitet
-        wieder einen neuen Formatstring ein, wobei 'd' eine Ganzzahl
-        bezeichnet (eine Variable von Typ int).
-        Dies ist ein allerdings nur ein sehr einfaches Beispiel.
+                Between the percent sign and the argument type specifier in
+                the AFS, the following modifiers can be included to specify
+                the formatting information.  Order is not important unless
+                otherwise specified.  "n" is used to specify a integer, which
+                can be a "*" in which case the next argument is used as the
+                number.
 
-        Jeder Argumentformatstring kennzeichnet also, auf welche Art
-        ein Argument in das Ergebnis eingebaut werden soll. Der erste
-        AFS ist fuer das zweite Argument der Funktion, der zweite AFS
-        fuer das dritte Argument u.s.w. (das erste Argument der Funktion
-        ist ja der Formatstring selbst).
+        Modifiers:
+           n    specifies the field size. If the size is prepended with
+                a 0, the argument is printed with leading zeroes.
+          "."n  specifies the precision, for simple (not columns or tables)
+                strings specifies the truncation length.
+          ":"n  n specifies both the field size _and_ the presision, if n is
+                prepended by a zero then the pad string is set to "0".
+          "'X'" the pad string is set to the char(s) between the single
+                quotes, if the field size is also prepended with a zero then
+                which ever is specified last will overrule.
+                NOTE:  to include "'" in the pad string, you must use "\\'"
+                (as the backslash has to be escaped past the interpreter),
+                similarly, to include "\" requires "\\\\".
+          " "   pad positive integers with a space.
+          "+"   pad positive integers with a plus sign.
+          "-"   left aligned within field size.
+                NB: std (s)printf() defaults to right alignment, which is
+                    unnatural in the context of a mainly string based language
+                    but has been retained for "compatibility" ;)
+          "|"   centered within field size.
+          "$"   justified to field size. Ignored unless the type specifier
+                is 's'.
+          "="   column mode.  Ignored unless the argument type specifier is 's'.
+                Field size must be specified, if precision is specified then
+                it specifies the width for the string to be wordwrapped in, if
+                not then the field size is. The field size specifies the width
+                of the column and has the effect that the last line of the
+                column is padded with spaces to achieve this length.
+          "#"   For strings: table mode.
+                  Field size must be specified, if precision is
+                  specified then it specifies the number of columns in
+                  the table, otherwise the number is "optimally"
+                  generated (as few lines and columns as possible).
+                  Table mode is passed a list of backslash-n separated
+                  'words' which are put in a format similar to that of
+                  ls.
+                For %O/%Q: compact output.
+          "@"   the argument is an array.  the corresponding AFS (minus all
+                "@") is applied to each element of the array.
 
-        Jeder AFS beginnt mit einem '%' und endet mit einem der
-        folgenden Zeichen (Argumenttyp-Kennzeichner):
-        Zeichen    Argumenttyp    Bemerkung
-        's'        string
-        'c'        integer        als ASCII-Zeichen
-        'd' 'i'    integer        Dezimalschreibweise
-        'o'        integer        Oktalschreibweise
-        'b' 'B'    integer        Binaerschreibweise
-        'x' 'X'    integer        Hexadezimalschreibweise
-        'e' 'E'    float          Exponentialschreibweise
-        'f' 'F'    float          Gleitkommadarstellung
-        'g' 'G'    float          Gleitkommadarstellung
-        'O'        mixed          Gibt fuer Debugging alles irgendwie
-                                  lesbar aus, auch Arrays und Mappings
-        'Q'        mixed          Wie 'O', gibt jedoch Sonderzeichen in
-                                  Strings in der LPC-Notation aus
-        
-        Zwischen dem '%' und dem Argumenttyp-Kennzeichner kann man
-        noch mehrere Modifikatoren setzen, die das Verhalten
-        beeinflussen.
-        Hier eine Uebersicht. n steht hier fuer eine Ganzzahl, also
-        zum Beispiel "12".
-        Modifikator  Bedeutung
-        n            Minimale Stringlaenge, die fuer dieses Argument
-                     verwendet werden soll. Fehlende Zeichen werden mit
-                     einem Fuellzeichen aufgefuellt. Beginnt n mit einer
-                     '0' (etwa "08") so ist das Fuellzeichen '0' sonst
-                     ist es per Default ' '. (sogenannte 'Feldbreite')
-        .n           Bei Ganzzahlen die Maxanzahl der Stellen, bei Gleit-
-                     kommazahlen die Maximalzahl der Nachkommastellen.
-                     Bei (einfachen) Strings die Maximallaenge.
-        :n           Ist dasselbe wie n.n - setzt also beide Werte auf
-                     dieselbe Zahl.
-        'X'          Als Fuellzeichen wird X genutzt. X koennen dabei
-                     auch mehrere Zeichen sein, etwa fuehrt '-=' zu
-                     Fuellungen der Art "-=-=-=-=". Um mit Hochkommas
-                     zu fuellen ist '\\'' anzugeben. Rueckwaerts-
-                     schraegstrich entsprechend mit '\\\\'.
-        <Space>      Vor positive Zahlen wird ein Leerzeichen gefuegt.
-        +            Vor positive Zahlen wird ein '+' gefuegt.
-        -            Der Wert wird linksbuendig in das fuer dieses Argument
-                     vorgesehene Feld eingefuegt (Standard ist rechts-
-                     buendig). Bei Strings wird meistens diese Ausrichtung
-                     die sinnvollste sein.
-        |            Der Wert wird zentriert in das Feld eingefuegt.
-                     (Siehe Modifikator n, Feldbreite)
-        $            Blocksatz. Benoetigt eine Feldbreite, funktioniert nur
-                     bei Strings (auch im Spaltenmodus).
-        =            Spaltenmodus (siehe unten).
-        #            Fuer Strings: Tabellenmodus (siehe unten).
-                     Fuer '%O'/'%Q': kompakte Ausgabe.
-        @            Arraymodus (siehe unten).
-        *            Ein Stern kann immer dort eingesetzt werden, wo
-                     hier weiter oben ein n fuer eine Ganzzahl steht.
-                     Der Wert der Zahl muss dann als weiterer Parameter
-                     an die Funktion uebergeben werden.
+        When the formatting of an element results in several output lines
+        (column or table mode) and no explicit pad strings has been
+        defined, then the efun removes any padding whitespace before
+        the newlines of all but the last line. However, if an explicit
+        pad string has been given, even if it is the simple ' ', then
+        the padding will not be removed.
 
-BEISPIELE
-        Mit den bis jetzt erwaehnten Moeglichkeiten kann man zB machen:
 
-        sprintf("%d (dec) == %o (octal) == %x (hex)", 20, 20, 20);
-        => "20 (dec) == 24 (octal) == 14 (hex)"
+EXAMPLES
+        sprintf("decimal=%d, octal=%o, hexadecimal=%x\n", 7, 7, 7);
 
-        sprintf("Du drehst den Knopf um %.3f Umdrehungen", 12.3456);
-        => "Du drehst den Knopf um 12.345 Umdrehungen"
+        sprintf("array=%O\n", ({1, 2, 3}));
+        this will return the following:
+          ({ /* sizeof() == 3 */
+            1,
+            2,
+            3
+          })
+        An array will be printed recursively and each element of the
+        array will be indented. Can also be used as a debugging tool.
 
-        sprintf("Du liest %|'*':9s", "Fiona");
-        => "Du liest **Fiona**"
+        sprintf("%-*#s\n", 80, implode(get_dir("~/."), "\n"));
 
-        sprintf("Auf dem Zettelstueck steht: %-.*s...", 7, "Hallo Du da");
-        => "Auf dem Zettelstueck steht: Hallo D...
+        sprintf("foo")                      // returns "foo"
 
-ERWEITERTE MODI
-        Mit dem Modifikatoren = # und @ stehen maechtige Werkzeuge zur
-        Verfuegung. Mit ein wenig Ueberlegung kann man sich oft viele
-        Zeilen Code ersparen.
-        Arraymodus (@):
-          sprintf("%@s", arr_of_string);
-          Der Argumentformatstring (allerdings ohne das @) wird sooft
-          hintereinandergereiht, wieviele Elemente das Array hat.
-          Jeder AFS wird dann fuer ein Element des Arrays benutzt.
-          sprintf("%@s", ({"aaa","bbb"})) ist somit dasselbe wie
-          sprintf("%s%s", "aaa", "bbb"). Allerdings passt es sich
-          immer an die Elementzahl der uebergebenden Arrays an.
-          Dies ist nuetzlich um Ergebnisse von map() oder aehnlich
-          auszugeben.
-          sprintf("%@s", map_objects(all_inventory(), "short"));
-          Der Argumenttyp-Kennzeichner muss hierbei immer dem Typen
-          eines Elementes des Arrays entsprechen.
-        Spaltenmodus (=):
-          Diese Funktion bricht Text um. Die Feldbreite muss angegeben
-          werden. Wird neben der Feldbreite auch eine maximale String-
-          laenge angegeben, so wird die letztere fuer die Breite des
-          Umbrechens verwendet, die Feldbreite wird mit Fuellzeichen
-          aufgefuellt.
-          sprintf("%=-20s", str); bricht den String str 'wordwrap'end
-          auf 20 Zeichen Laenge um. sprintf("%=-*s", len, str);
-          ist schon eine einfache break_string() Variante.
-        Tabellenmodus (#):
-          Diese Funktion gibt Strings tabellenartig aus. Die Teilstrings
-          muessen mit \n getrennt als ein String als Argument uebergeben
-          werden. Die Feldbreite muss angegeben werden und bezeichnet
-          die (maximale) Gesamtbreite der Tabelle.
-          Die Anzahl der Spalten der Tabelle wird moeglichst optimal
-          bestimmt, und ist fuer alle Spalten gleich. Wird ein
-          Wert als 'Praezision' angegeben, so ist dies die Anzahl von
-          Spalten, die verwendet werden soll.
-          sprintf("%#30.4s", str) erzeugt eine Tabelle, die maximal
-          30 Zeichen breit ist und 4 Spalten enthaelt.
-          sprintf("%#30s", str) legt die Spaltenzahl dynamisch anhand
-          der Einzelstringlaengen fest, so dass der laengste String
-          noch genau in die Tabelle passt.
-          Wenn string* worte die in die Tabelle einzubettenden Worte
-          enthaelt, so muss str=implode(worte,"\n") sein.
+        sprintf("%s","foo")                 // returns "foo"
+        sprintf("%7s","foo")                // returns "    foo"
+        sprintf("%-7s","foo")               // returns "foo    "
+        sprintf("%|7s","foo")               // returns "  foo  "
+        sprintf("%7'.'s","foo")             // returns "....foo"
+        sprintf("%-7'+-'s","foo")           // returns "foo+-+-"
+        sprintf("%|9'-+'s","foo")           // returns "-+-foo-+-"
+        sprintf("%3s","foobarbloh")         // returns "foobarbloh"
+        sprintf("%3.6s","foobarbloh")       // returns "foobar"
+        sprintf("%6.3s","foobarbloh")       // returns "   foo"
+        sprintf("%:6s","foobarbloh")        // returns "foobar"
+        sprintf("%:3s","foobarbloh")        // returns "foo"
+        sprintf("%*.*s",-7,2,"foobarbloh")  // returns "fo     "
 
-SIEHE AUCH
-        printf(E)
+        sprintf("%=12s","this is a very long sentence\n")
+                            // returns "   this is a\n"
+                            //         "   very long\n"
+                            //         "    sentence\n"
+        sprintf("%=-12s","this is a very long sentence\n")
+                            // returns "this is a\n"
+                            //         "very long\n"
+                            //         "sentence\n"
+        sprintf("%=|12s","this is a very long sentence\n")
+                            // returns "  this is a\n"
+                            //         "  very long\n"
+                            //         "  sentence\n"
+        sprintf("%=10.6s","this is a very long sentence\n")
+                            // returns "      this\n"
+                            //         "      is a\n"
+                            //         "      very\n"
+                            //         "      long\n"
+                            //         "    senten\n"
+                            //         "        ce\n"
+        sprintf("%#-40.3s\n",
+                "one\ntwo\nthree\nfour\nfive\nsix\nseven\neight\nnine\nten\n")
+                            // returns "one          five         nine\n"
+                            //         "two          six          ten\n"
+                            //         "three        seven        \n"
+                            //         "four         eight        \n"
+        sprintf("%#-40s\n",
+                "one\ntwo\nthree\nfour\nfive\nsix\nseven\neight\nnine\nten\n")
+                            // returns "one     three   five    seven   nine\n"
+                            //         "two     four    six     eight   ten\n"
+
+        sprintf("%@-5s",({"foo","bar","bloh"})) // returns "foo  bar  bloh "
+
+        sprintf("%d",123)                   // returns "123"
+        sprintf("%7d",123)                  // returns "    123"
+        sprintf("%-7d",123)                 // returns "123    "
+        sprintf("%d/%d",123,-123)           // returns "123/-123"
+        sprintf("% d/% d",123,-123)         // returns " 123/-123"
+        sprintf("%+d/%+d",123,-123)         // returns "+123/-123"
+        sprintf("%+5d/%5d",123,123)         // returns " +123/  123"
+        sprintf("%|6d",123)                 // returns "  123 "
+        sprintf("%|10d",123)                // returns "    123   "
+        sprintf("%|10d%3s",123,"foo")       // returns "    123   foo"
+
+        sprintf("%o",16)                    // returns "20"
+        sprintf("%'0'3o",8)                 // returns "010"
+
+        sprintf("%x",123)                   // returns "7b"
+        sprintf("%X",123)                   // returns "7B"
+
+        sprintf("%f",123.5)                 // returns "124"
+        sprintf("%8.3f",123.5)              // returns " 123.500"
+        sprintf("%E",123.5)                 // returns "1E+02"
+        sprintf("%12.4e",123.5)             // returns "  1.2350e+02"
+        sprintf("%g",123.5)                 // returns "1e+02"
+        sprintf("%8.3G",123.5)              // returns "     124"
+        sprintf("%8.6g",123.5)              // returns "   123.5"
+
+HISTORY
+        LDMud 3.2.9 added the "%^" sequence for compatibility with
+          terminal_colour(), added the "%Q" sequence, clarified the meaning of
+          leading 0s in the field size modifier, clarified the interaction
+          between the padding and newlines, and added the '$' formatter for
+          justified printing of strings.
+        LDMud 3.2.10 added modifier '#' for '%O'/'%Q' and the datatype '%b'.
+
+SEE ALSO
+        printf(E), terminal_colour(E)
diff --git a/doc/efun/sqrt b/doc/efun/sqrt
index d1bccdd..83d5c67 100644
--- a/doc/efun/sqrt
+++ b/doc/efun/sqrt
@@ -1,9 +1,8 @@
 SYNOPSIS
-        float sqrt(int value)
-        float sqrt(floag value)
+        float sqrt(int|float)
 
-BESCHREIBUNG
-        Liefert die Quadratwurzel von <value>.
+DESCRIPTION
+        Returns the square root of the argument.
 
-GESCHICHTE
-        LDMud 3.2.9 fuehrte integer als moegliche Argumente ein.
+HISTORY
+        LDMud 3.2.9 added integers as arguments.
diff --git a/doc/efun/sscanf b/doc/efun/sscanf
index 4344d0e..da96bfe 100644
--- a/doc/efun/sscanf
+++ b/doc/efun/sscanf
@@ -1,81 +1,78 @@
 SYNOPSIS
         int sscanf(string str, string fmt, mixed var1, mixed var2, ...)
 
-BESCHREIBUNG
-        Wertet einen String <str> unter Beruecksichtigung des Formats
-        <fmt>. <fmt> kann Strings beinhalten, die durch %d und %s getrennt
-        werden. Jedes %d und %s entspricht einer der Variablen <var1>,
-        <var2> etc.
+DESCRIPTION
+        Parse a string str using the format fmt. fmt can contain
+        strings seperated by %d and %s. Every %d and %s corresponds to
+        one of var1, var2, ... .
 
-        Die Operatoren im Format-String <fmt> haben eines der folgenden
-        Formate:
+        The match operators in the format string have one of these
+        formats:
+          %[+][!|~][<size>[.<minmatch>]]<type>
 
-            %[+][!|~][<size>[.<minmatch>]]<type>
+        <type> may be:
+           d: matches any number.
+           D: matches any number.
+           U: matches any unsigned number.
+           s: matches any string.
+           %: matches the % character.
+           t: matches whitespace (spaces and tab characters), but does
+              not store them (the simple ' ' matches just spaces and
+              can't be given a size specification).
 
-        <type> kann folgendes sein:
-            d: meldet eine Zahl
-            D: meldet eine Zahl
-            U:
-            s: meldet eine Zeichenkette
-            %: meldet das %-Zeichen
-            t: meldet Whitespaces (also Leerschlaege und Tabulatoren),
-               speichert diese aber nicht.
+        <size> is the expected field size, <minmatch> the demanded
+        minimal match length (defaults are 0 for strings and 1 for
+        numbers). Each of these both may be specified numerically, or
+        as '*' - then the value of the variable at the current place
+        in the argument list is used.
 
-        <size> ist die erwartete Feldgroesse, <minmatch> die verlangte
-        minimale Laenge fuer einen Treffer (Standardwerte sind 0 fuer
-        Strings und 1 fuer Nummern). Sowohl <size> als auch <minmatch> kann
-        entweder numerisch oder mit '*' angegeben werden - im zweiten Fall
-        wird die gueltige Variable in der Liste der Argumente benutzt.
+        Specifying + will require that the characters after the field
+        match as well, or the match will be deemed unsuccessful (the variable
+        might still get assigned, though).
 
-        Wird + angegeben, muessen die Zeichen nach dem Feld ebenfalls
-        matchen. Ist dies nicht der Fall, wird das Feld als Misserfolg
-        betrachted (auch wenn der Wert bereits an die zugehoerige Variable
-        zugewiesen wurde).
+        Specifying ! will perform the match, but neither store the
+        result nor count the match.
 
-        Wird ! angegeben, wird zwar die Suche durchgefuehrt, aber Treffer
-        werden weder gespeichert noch gezaehlt. Mit ~ als Argument wird
-        zwar die Suche durchgefuehrt und die Treffer gezaehlt, das Resultat
-        wird aber nicht gespeichert.
+        Specifying ~ will perform and count the match, but not store
+        the result.
 
-        Wenn %s nicht am Ende von <fmt> steht, wird nur ein Treffer
-        registriert, wenn auch der nachfolgende String bzw. das
-        nachfolgende Format gefunden wird. Weiter unten gibt es dazu
-        ein Beispiel.
+        If the %s specifier is not at the end of the format string,
+        it is matched only if the following character(s) or format
+        is found, too. See below for an example.
 
-        Der Unterschied zwischen %d und %D %U ist, dass letzteres ein
-        unmittelbar vorausgehendes %s so bald als moeglich abbricht,
-        waehrend ersteres zuerst versucht, einen moeglichst grossen Treffer
-        fuer %s zu erzielen. Trotzdem ueberspringt %D/%U keine Whitespaces,
-        dazu muss %.0t%D gesetzt werden.
+        The difference between %d and %D/%U is that the latter will abort
+        an immediately preceeding %s as soon as possible, whereas the
+        former will attempt to make largest match to %s first.
+        %D/%U will still not skip whitespace, use %.0t%D to skip optional
+        whitespace.
 
-        Wenn eine Zahl erkannt wird, welche ausserhalb des Zahlenbereiches
-        von Integers ist, so wird dies nicht als Treffer betrachtet.
+        If a number is matched that exceeds the numerical limits of
+        integers the match is deemed unsuccessful.
 
-        Zurueck gegeben wird die Anzahl Treffer.
+        The number of matched arguments will be returned.
 
-        Die Funktion sscanf() ist insofern ein Spezialfall, als dass
-        Argumente automatisch nach Referenz uebergeben werden.
+        The function sscanf is special, in that arguments are passed
+        by reference automatically.
 
-BEISPIELE
+EXAMPLES
         string who, what;
-            if (sscanf("wirf frisbee zu rex",
-                "wirf %s zu %s", what, who) != 2)
-                write("Usage: Wirf <what> zu <who>\n");
-            else
-                write("Du wirfst einen "+what+" zu "+who+" um auf dich "
-                    "aufmerksam zu machen.\n");
+        if (sscanf("throw frisbee to rover",
+           "throw %s to %s", what, who) != 2)
+           write("Usage: throw <what> to <who>\n");
+        else
+           write("You throw a "+what+" to "+who+" to get his attention.\n");
 
         sscanf("ab", "%s%s", who, what)
-            ==> liefert 2, who = "", what = "ab"
+          ==> result 2, who = "", what = "ab"
 
         sscanf("ab", "%s %s", who, what)
-            ==> liefert 0, who = 0, what = 0
+          ==> result 0, who = 0, what = 0
 
         sscanf("ab ", "%s %s", who, what)
-            ==> liefert 2, who = "ab", what = ""
+          ==> result 2, who = "ab", what = ""
 
-GESCHICHTE
-        LDMud 3.3.713/3.2.13 fuehrte den '+'-Modifizierer ein.
+HISTORY
+        LDMud 3.3.713/3.2.13 introduced the '+' specifier.
 
-SIEHE AUCH
+SEE ALSO
         explode(E), regexp(E)
diff --git a/doc/efun/strftime b/doc/efun/strftime
index d437bcd..635e5c8 100644
--- a/doc/efun/strftime
+++ b/doc/efun/strftime
@@ -5,114 +5,117 @@
      string strftime(string fmt, int clock)
      string strftime(string fmt, int clock, int localized)
 
-BESCHREIBUNG
-     Gibt, aehnliche wie ctime(), eine Zeit als formatierten String zurueck.
-     Hierbei kann ein String mit div. Platzhaltern vom Benutzer angegeben
-     werden (s.u.). Wird kein String angegeben, wird "%c" als Formatstring
-     benutzt.
+DESCRIPTION
+     The function strftime() formats the given time in <clock> as a formatted
+     string, similar to ctime(). Unlike ctime(), strftime() accepts a format
+     string with placeholders for the different elements. The format string
+     consists of zero or more conversion specifiers (see below) and ordinary
+     characters. Ordinary charaecters are just copied to the result. A
+     conversion specifier starts with a percent sign ('%'). If no format
+     string is given, a default of "%c" will be used.
 
-     Das Argument <clock> wird als Anzahl Sekunden seit dem 01.01.1970, 00:00
-     Uhr interpretiert. Wenn <clock> nicht angegeben wird, wird time()
-     verwendet.
+     The argument <clock> is the number of seconds since the epoch (00:00:00
+     UTC, January 1, 1970), as returned by time/mktime(). If <clock> is not
+     given, the current result of time() will be used.
 
-     Das Argument <localized> gibt an, ob die Ausgabe englisch (das sog.
-     klassische "C" locale) oder in der jeweiligen Landessprache (z.B.
-     deutsch) erfolgen soll. Hierbei haengt die Sprache allerdings von den auf
-     dem Mudrechner gesetzten Umgebungsvariablen LC_TIME oder LC_ALL ab, sie
-     kann nicht selber gewaehlt werden. Wird kein <localized> angegeben, wird
-     1 verwendet, was einer Ausgabe in Landessprache entspricht.
-     0: Ausgabe im klassischen "C" locale (english)
-     1: Ausgabe in Landessprache des Mudrechners.
+     The argument <localized> specifies, whether the result will be in english
+     (the classic "C" locale) or in the language configured on the host
+     computer (e.g. german). The language has to be configured with the
+     environment variables LC_TIME or LC_ALL (please ask your admins). If
+     <localized> is not given, the default is 1.
+     0: use classic "C" locale (english)
+     1: use current locale on the host computer (national representation).
 
-ANMERKUNGEN
-     Der zurueckgebene Ergebnisstring ist max. 511 Zeichen lang.
+REMARKS:
+     The resulting string is at most 511 character long.
 
-PLATZHALTER
-     Diese Funktion versteht alle Platzhalter, die die Funktion strftime() aus
-     der C-Standardbibliothek versteht. Momentan sind dies:
-       %a     Der abgekuerzte Wochentag abhaengig von der momentanen Locale.
-       %A     Der gesamte Wochentag abhaengig von der momentanen Locale.
-       %b     Der abgekuerzte Monatsname abhaengig von der momentanen Locale.
-       %B     Der volle Monatsname abhaengig von der momentanen Locale.
-       %c     Das bevorzugte Datums- und Uhrzeit-Repraesentation laut Einstel-
-              lungen der momentanen Locale.
-       %C     Das Jahrhundert als zweistellige Zahl.
-       %d     Der Tag im Monat als Dezimalzahl (01 - 31).
-       %D     Aequivalent  zu %m/%d/%y.  (US-amerikanisches Format.  In anderen
-              Laendern ist %d/%m/%y durchaus ueblich . In internationalem Kon- 
-              text ist dieses Format daher mehrdeutig und sollte nicht verwen-
-              det werden.)
-       %e     Wie %d, der Tag im Monat als Dezimalzahl, aber eine fuehrende
-              Null ist durch ein Leerzeichen ersetzt.
-       %E     Modifikator: Alternatives Format benutzen, s.u.
-       %g     Wie  %G,  aber ohne das Jahrhundert, also mit zweistelligem Jahr
-              (00-99).
-       %G     Das Jahr laut ISO 8601 mit dem Jahrhundert als Dezimalzahl.  Das
-              vierstellige Jahr, das zu ISO-Wochennummer (siehe %V) passt.  Es
-              hat dasselbe Format und denselben Wert wie %y,  nur  dass,  wenn
-              die  ISO-Wochennummer  zum  vorhergehenden  oder  naechsten  Jahr
-              gehoert, dieses Jahr stattdessen benutzt wird.
-       %h     Aequivalent zu %b.
-       %H     Die Stunde im 24h-Format als Ganzzahl (00 - 23).
-       %I     Die Stunde im 12h-Format als Ganzzahl (01 - 12).
-       %j     Der Tag im Jahr als Ganzzahl (001 - 366).
-       %k     Die Stunde im 24h-Format als Ganzzahl (0 - 23); einzelne Ziffern
-              haben ein vorangestelltes Leerzeichen. (Siehe %H.)
-       %l     Die Stunde im 12h-Format als Ganzzahl (0 - 12); einzelne Ziffern
-              haben ein vorangestelltes Leerzeichen. (Siehe %I.)
-       %m     Der Monat als Ganzzahl (01 - 12).
-       %M     Die Minute als Ganzzahl (00 - 59).
-       %n     Ein Zeilenvorschub.
-       %p     Entweder 'AM' oder 'PM', je nach der uebergebenen  Uhrzeit,  oder
-              die  zugehoerigen Zeichenketten in der momentanen Locale.  Mittag
-              erhaelt 'PM', Mitternacht 'AM'.
-       %P     Wie %p, aber in Kleinbuchstaben.
-       %r     Zeit in AM/PM-Notation; in der POSIX-Locale ist das Aequivalent
-              zu '%I:%M:%S %p'.
-       %R     Zeit in 24h-Notation (%H:%M). (SU) Fuer eine Version mit Sekunden
-              siehe %T.
-       %s     Die Zahl der Sekunden seit  der  Epoche,  also  seit  1970-01-01
-              00:00:00 UTC.
-       %S     Die Sekunde als Ganzzahl (00 - 61).
-       %t     Ein Tabulatorzeichen.
-       %T     Zeit in 24h-Notation (%H:%M:%S).
-       %u     Der Tag der Woche als Zahl von 1 bis 7, mit Montag als 1.  Siehe
-              auch %w.
-       %U     Die Wochennummer des aktuellen Jahres als Ganzzahl  von  00  bis
-              53,  beginnend  mit dem ersten Sonntag als erster Tag der ersten
-              Woche.  Siehe auch %V und %W.
-       %V     Die Wochennummer nach ISO 8601:1988 als Dezimalzahl von  01  bis
-              53,  wobei Woche 1 die erste Woche ist, die wenigstens 4 Tage im
-              laufenden Jahr hat, mit Montag als dem  ersten  Tag  der  Woche.
-              Siehe auch %U und %W.
-       %w     Der  Tag  der  Woche  als  Zahl  von 0 bis 6, mit Sonntag als 0.
-              Siehe auch %u.
-       %W     Die Wochennummer des aktuellen Jahres als Ganzzahl  von  00  bis
-              53,  beginnend  mit  dem ersten Montag als erster Tag der ersten
-              Woche.
-       %x     Die bevorzugte Datums-Repraesentation ohne die Zeit in der momen-
-              tanen Locale.
-       %X     Die  bevorzugte  Uhrzeit-Repraesentation  ohne  das  Datum in der
-              momentanen Locale.
-       %y     Das Jahr als Ganzzahl ohne das Jahrhundert (00 - 99).
-       %Y     Das Jahr als Ganzzahl mit dem Jahrhundert.
-       %z     Die  Zeitzone  als  Stundendifferenz  zu  GMT. Benoetigt, um
-              RFC822-konforme  Datumsangaben  zu  erhalten  (mit '%a, %d %b %Y
-              %H:%M:%S %z').
-       %Z     Die Zeitzone oder der Name oder die Abkuerzung.
-       %+     Datum und Zeit im Format von date(1).
-       %%     Das Zeichen '%'.                                                            
-    
-FEHLER
-     Es gibt keinen Platzhalter fuer die Mondphase.
+CONVERSION SPECIFIERS:
+     This function accepts all conversion specifiers, which the function
+     strftime() from the C library accepts. Currently these are:
 
-BEISPIELE
-     write(strftime("Heute ist %A, der %d. %B %Y.\n"))
-     ergibt z.B.
-     "Heute ist Montag, der 24. September 2007.\n"
+     %A    is replaced by national representation of the full weekday name.
+     %a    is replaced by national representation of the abbreviated weekday
+           name.
+     %B    is replaced by national representation of the full month name.
+     %b    is replaced by national representation of the abbreviated month name.
+     %C    is replaced by (year / 100) as decimal number; single digits are
+           preceded by a zero.
+     %c    is replaced by national representation of time and date.
+     %D    is equivalent to ``%m/%d/%y''.
+     %d    is replaced by the day of the month as a decimal number (01-31).
+     %E* %O*
+           POSIX locale extensions.  The sequences %Ec %EC %Ex %EX %Ey %EY %Od
+           %Oe %OH %OI %Om %OM %OS %Ou %OU %OV %Ow %OW %Oy are supposed to
+           provide alternate representations.
+           Additionally %OB implemented to represent alternative 
+           months names (used standalone, without day mentioned).
+     %e    is replaced by the day of month as a decimal number (1-31); single
+           digits are preceded by a blank.
+     %F    is equivalent to ``%Y-%m-%d''.
+     %G    is replaced by a year as a decimal number with century.  This year
+           is the one that contains the greater part of the week (Monday as
+           the first day of the week).
+     %g    is replaced by the same year as in ``%G'', but as a decimal number
+           without century (00-99).
+     %H    is replaced by the hour (24-hour clock) as a decimal number (00-23).
+     %h    the same as %b.
+     %I    is replaced by the hour (12-hour clock) as a decimal number (01-12).
+     %j    is replaced by the day of the year as a decimal number (001-366).
+     %k    is replaced by the hour (24-hour clock) as a decimal number (0-23);
+           single digits are preceded by a blank.
+     %l    is replaced by the hour (12-hour clock) as a decimal number (1-12);
+           single digits are preceded by a blank.
+     %M    is replaced by the minute as a decimal number (00-59).
+     %m    is replaced by the month as a decimal number (01-12).
+     %n    is replaced by a newline.
+     %O*   the same as %E*.
+     %p    is replaced by national representation of either "ante meridiem" or
+           "post meridiem" as appropriate.
+     %R    is equivalent to ``%H:%M''.
+     %r    is equivalent to ``%I:%M:%S %p''.
+     %S    is replaced by the second as a decimal number (00-60).
+     %s    is replaced by the number of seconds since the Epoch, UTC (see
+           mktime(3)).
+     %T    is equivalent to ``%H:%M:%S''.
+     %t    is replaced by a tab.
+     %U    is replaced by the week number of the year (Sunday as the
+           first day of the week) as a decimal number (00-53).
+     %u    is replaced by the weekday (Monday as the first day of
+           the week) as a decimal number (1-7).
+     %V    is replaced by the week number of the year (Monday as the
+           first day of the week) as a decimal number (01-53).  If the week
+           containing January 1st has four or more days in the new year,
+           then it is week 1; otherwise it is the last week of the previous
+           year, and the next week is week 1.
+     %v    is equivalent to ``%e-%b-%Y''.
+     %W    is replaced by the week number of the year (Monday as the 
+           first day of the week) as a decimal number (00-53).
+     %w    is replaced by the weekday (Sunday as the first day of the week)
+           as a decimal number (0-6).
+     %X    is replaced by national representation of the time.
+     %x    is replaced by national representation of the date.
+     %Y    is replaced by the year with century as a decimal number.
+     %y    is replaced by the year without century as a decimal number (00-99).
+     %Z    is replaced by the time zone name.
+     %z    is replaced by the time zone offset from UTC; a leading plus sign
+           stands for east of UTC, a minus sign for west of UTC, hours and
+           minutes follow with two digits each and no delimiter between
+           them (common form for RFC 822 date headers).
+     %+    is replaced by national representation of the date and time
+           (the format is similar to that produced by date(1)).
+     %%    is replaced by `%'.
+     
 
-GESCHICHTE
-    Eingefuehrt in LDMud 3.3.718.
+BUGS
+        There is no conversion specification for the phase of the moon.
 
-SIEHE AUCH
+EXAMPLES
+        write(strftime("Today is %A, %d. %B %Y.\n"))
+          results in "Today is Monday, 24. September 2007.\n"
+
+HISTORY
+     Introduced in LDMud 3.3.718.
+
+SEE ALSO
      ctime(E), gmtime(E), localtime(E), mktime(E), time(E), utime(E)
+
diff --git a/doc/efun/stringp b/doc/efun/stringp
index d67c090..50e399e 100644
--- a/doc/efun/stringp
+++ b/doc/efun/stringp
@@ -1,10 +1,10 @@
 SYNOPSIS
         int stringp(mixed arg)
 
-BESCHREIBUNG
-        Liefert 1, wenn das Argument eine Zeichenkette (String) ist,
-        ansonsten 0.
+DESCRIPTION
+        Return 1 if arg is a string.
 
-SIEHE AUCH
-        bytesp(E), closurep(E), floatp(E), mappingp(E), objectp(E),
-        intp(E), referencep(E), pointerp(E), symbolp(E), clonep(E)
+SEE ALSO
+        bytesp(E), clonep(E), closurep(E), coroutinep(E), floatp(E), intp(E),
+        lpctypep(E), lwobjectp(E), mappingp(E), objectp(E), pointerp(E),
+        referencep(E), structp(E), symbolp(E)
diff --git a/doc/efun/strrstr b/doc/efun/strrstr
index 8e39b79..113702a 100644
--- a/doc/efun/strrstr
+++ b/doc/efun/strrstr
@@ -1,27 +1,25 @@
 SYNOPSIS
-        int strrstr(string str, string muster)
-        int strrstr(string str, string muster, int pos)
-        int strrstr(bytes  str, bytes  muster)
-        int strrstr(bytes  str, bytes  muster, int pos)
+        int strrstr(string str, string str2)
+        int strrstr(string str, string str2, int pos)
+        int strrstr(bytes  str, bytes  str2)
+        int strrstr(bytes  str, bytes  str2, int pos)
 
-BESCHREIBUNG:
-        Liefert den Index des ersten Auftretens von <muster> im String <str>,
-        ausgehend von der Position <pos> her rueckwaerts gesucht. Wird <pos>
-        nicht angegeben, wird als Standard -1 gesetzt, was dem Ende von <str>
-        entspricht. Mit anderen Worten: die Funktion liefert den Index des
-        letzten Auftretens von <muster> vor <pos>.
+DESCRIPTION
+        Returns the index of the first occurance of <str2> in <str> searching
+        from position <pos> (default: -1 == string end) on backward.
+        In other words: the index of the last occurance of <str2> before
+        the given position <pos>.
 
-        Der Index, der zurueck gegeben wird, ist relativ zum Beginn des
-        Strings <str>.
+        The returned index is relativ to the beginning of the string.
 
-        Wenn <muster> nicht in <str> gefunden wird, wird -1 zurueck gegeben.
+        If <str2> is not found in <str>, -1 is returned.
 
-        Wenn <pos> negativ ist, bezeichnet <pos> den Index vom Ende des
-        Strings aus gezaehlt. Dabei wird die Suche aber dennoch rueckwaerts
-        im String <str> durchgefuehrt.
+        If <pos> is negativ, it designates the start position relative
+        to the end of the string (the search will still proceed towards
+        the beginning of the string).
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.10.
+HISTORY
+        Introduced in LDMud 3.2.10.
 
-SIEHE AUCH
+SEE ALSO
         strstr(E), strlen(E), sscanf(E), sprintf(E), explode(E)
diff --git a/doc/efun/strstr b/doc/efun/strstr
index 2d93006..12b61b0 100644
--- a/doc/efun/strstr
+++ b/doc/efun/strstr
@@ -1,19 +1,19 @@
 SYNOPSIS
-        int strstr(string str, string muster)
-        int strstr(string str, string muster, int pos)
-        int strstr(bytes  str, bytes  muster)
-        int strstr(bytes  str, bytes  muster, int pos)
+        int strstr(string str, string str2)
+        int strstr(string str, string str2, int pos)
+        int strstr(bytes  str, bytes  str2)
+        int strstr(bytes  str, bytes  str2, int pos)
 
-BESCHREIBUNG
-        Liefert den Index des ersten Auftretens von <muster> in <str>,
-        ausgehend von der Position <pos>, wobei in <str> vorwaerts gesucht
-        wird. Wird <pos> nicht angegeben, wird als Standardwert 0 gesetzt,
-        also vom Beginn von <str> her gesucht.
+DESCRIPTION
+        Returns the index of <str2> in <str> searching from position <pos>
+        on forward.
 
-        Wenn <muster> nicht gefunden wird, wird -1 zurueckgeliefert.
+        The returned index is relativ to the beginning of the string.
+        If <str2> is not found in <str>, -1 is returned.
 
-        Wenn <pos> negativ ist, bezeichnet <pos> die Startposition der Suche
-        relativ zum Ende von <str>, es wird aber weiterhin vorwaerts gesucht.
+        If <pos> is negativ, it designates the start position relative
+        to the end of the string (the search will still proceed towards
+        the end of the string).
 
-SIEHE AUCH
+SEE ALSO
         strrstr(E), strlen(E), sscanf(E), sprintf(E), explode(E)
diff --git a/doc/efun/struct_info b/doc/efun/struct_info
index 4d4cd0b..82c6093 100644
--- a/doc/efun/struct_info
+++ b/doc/efun/struct_info
@@ -2,7 +2,7 @@
         #include <struct_info.h>
         #include <lpctypes.h>
 
-        mixed * struct_info (struct st, int what)
+        mixed * struct_info(struct st, int what)
 
 DESCRIPTION
         Return information about the structure of struct <st> in an array.
@@ -26,8 +26,8 @@
           string [SI_PROG_NAME]:   the name of program defining the struct
           string [SI_PROG_ID]:     the id of the program defining the struct
           mixed  [SI_BASE]:        0, or the base struct information
-          mixed* [SI_MEMBER+0]:    the first member information
-          mixed* [SI_MEMBER+n]:    the last member information
+          mixed *[SI_MEMBER+0]:    the first member information
+          mixed *[SI_MEMBER+n]:    the last member information
 
         The member information entries are arrays themselves with
         these elements:
diff --git a/doc/efun/structp b/doc/efun/structp
index 0b1668d..9a97fae 100644
--- a/doc/efun/structp
+++ b/doc/efun/structp
@@ -8,6 +8,6 @@
         Introducted in LDMud 3.3.273.
 
 SEE ALSO
-        baseof(E), closurep(E), floatp(E), mappingp(E), objectp(E),
-        intp(E), referencep(E), pointerp(E), stringp(E), symbolp(E),
-        clonep(E)
+        baseof(E), bytesp(E), clonep(E), closurep(E), coroutinep(E),
+        floatp(E), intp(E), lpctypep(E), lwobjectp(E), mappingp(E),
+        objectp(E), pointerp(E), referencep(E), stringp(E), symbolp(E)
diff --git a/doc/efun/swap b/doc/efun/swap
index 0851fbd..750e24c 100644
--- a/doc/efun/swap
+++ b/doc/efun/swap
@@ -1,19 +1,18 @@
 OPTIONAL
 SYNOPSIS
-        void swap(object obj, int flags)
+        void swap(object obj, int flags = 0)
 
-BESCHREIBUNG
-        Lagert ein Objekt aus. Diese Efun ist nur fuer systeminternes
-        Debugging und kann einen Absturz verursachen.
+DESCRIPTION
+        Swap out an object. This efun is only used for system internal
+        debugging and can cause a crash.
 
-        <flags> kann angegeben werden, um festzulegen, welcher Teil von <obj>
-        ausgelagert werden soll. Es ist eine Bitmaske aus folgenden:
+        <flags> can be given to specify which parts of <obj> to swap.
+        It is a bitmask of the following:
 
-            1: Programm auslagern
-            2: Variablen auslagern
+            1: Swap program
+            2: Swap variables
 
-        Standardmaessig (auch wenn 0 angegeben wurde) wird beides (3)
-        ausgelagert.
+        The default (also when 0 given) is both (3).
 
-GESCHICHTE
-        LDMud 3.6.4 fuehrte den zweiten Parameter ein.
+HISTORY
+        LDMud 3.6.4 introduced the second argument.
diff --git a/doc/efun/symbol_function b/doc/efun/symbol_function
index 7178f93..177fdac 100644
--- a/doc/efun/symbol_function
+++ b/doc/efun/symbol_function
@@ -1,35 +1,30 @@
 SYNOPSIS
         closure symbol_function(symbol arg)
         closure symbol_function(string arg)
-        closure symbol_function(string arg, object|lwobject|string obj)
+        closure symbol_function(string arg, object|lwobject|string ob)
 
-BESCHREIBUNG
-        Erzeugt eine Lfun-, Efun- oder Operator-Closure aus <arg>, wobei
-        <arg> entweder ein string oder ein symbol sein muss. Fuer
-        Lfun-Closures gibt <obj> an, zu welchem Objekt die Lfun gehoert,
-        entweder angegeben durch das Objekt selbst (bzw. einen pointer
-        darauf) oder durch den Objektnamen als String. Wenn ein String
-        angegeben wird, wird das Objekt beim Aufruf geladen.
+DESCRIPTION
+        Constructs a lfun closure, efun closure or operator closure
+        from the first arg (string or symbol). For lfuns, the second
+        arg is the object that the lfun belongs to, specified by
+        the object itself or by its name (the object will be loaded
+        in the second case)
 
-        Wenn die Closure fuer eine Lfun in einem anderen als dem momentanen
-        Objekt erzeugt wird, ergibt dies eine "alien lfun closure". Solche
-        Closures sind an das Objekt gebunden, das symbol_function()
-        aufgerufen hat (dieses Objekt wird von to_object() geliefert),
-        obwohl der eigentliche Code in einem anderen Objekt steht (das mit
-        get_type_info() gefunden werden kann).
+        If the closure is created for an lfun in an object other than
+        the current object, the result is an 'alien lfun closure'. Such
+        closures are bound to the object executing the symbol_function()
+        (this is what to_object() will return), even though the actual
+        code is in that other object (which get_type_info() will return).
 
-        Als "private" deklarierte Funktionen koennen auf diese Weise nie
-        aufgerufen werden, "static" und "protected" deklarierte Lfuns nur
-        dann, wenn <obj> das gueltige Objekt ist.
+        Private lfuns can never be accessed this way, static and
+        protected lfuns only if <ob> is the current object.
 
-BEISPIELE
-        symbol_function("efun::users");
-            --> ergibt: #'users
-        symbol_function("QueryProp", other_obj);
-            --> ergibt: other_obj->QueryProp()
+EXAMPLES
+        symbol_function("efun::users")          -> #'users
+        symbol_function("QueryProp", other_obj) -> other_obj->QueryProp()
 
-GESCHICHTE
-        Eingefuehrt in 3.2@70.
+HISTORY
+        Introduced in 3.2@70.
 
-SIEHE AUCH
+SEE ALSO
         lambda(E), quote(E)
diff --git a/doc/efun/symbol_variable b/doc/efun/symbol_variable
index 9a6089a..18b8765 100644
--- a/doc/efun/symbol_variable
+++ b/doc/efun/symbol_variable
@@ -3,27 +3,26 @@
         closure symbol_variable(symbol arg)
         closure symbol_variable(int arg)
 
-BESCHREIBUNG
-        Erzeugt eine Identifier (Lfun) Closure aus der globalen Variablen
-        <arg> des gueltigen Objekts. Die Variable kann angegeben werden
-        als Symbol, mit ihrem Namen oder durch die ordinale Nummer in der
-        Variablentabelle des Objekts.
+DESCRIPTION
+        Constructs an identifier (lfun) closure from the global
+        variable arg of the current program. The variable may be given as a
+        symbol, by name or by its ordinal number in the objects
+        variable table.
+        If there is no such variable, or if it is not visible outside
+        the object, 0 is returned.
 
-        Wenn keine solche Variable existiert oder sie von aussen nicht
-        sichtbar ist, wird 0 zurueck geliefert.
+        If the argument is an integer, and the variable is inherited
+        and private in the inherited object (i.e. hidden), then a
+        privilege violation will occur.
 
-        Wenn <arg> ein Integer ist und sich auf eine geerbte Variable
-        bezieht, die im geerbten Objekt "private" deklariert ist (d.h.
-        versteckt), fuehrt dies zu einer Schutzverletzung.
-
-BEISPIELE
+EXAMPLES
         int base;
         int var;
-        symbol_variable("var");         ergibt: #'<this_object>->var
-        symbol_variable(0);             ergibt: #'<this_object>->base
+        symbol_variable("var")    -> #'<this_object>->var
+        symbol_variable(0)        -> #'<this_object>->base
 
-GESCHICHTE
-        Eingefuehrt in 3.2.1@8.
+HISTORY
+        Enabled since 3.2.1@8.
 
-SIEHE AUCH
+SEE ALSO
         lambda(E), quote(E), symbol_function(E)
diff --git a/doc/efun/symbolp b/doc/efun/symbolp
index d3eec65..66ee03a 100644
--- a/doc/efun/symbolp
+++ b/doc/efun/symbolp
@@ -1,14 +1,16 @@
 SYNOPSIS
         int symbolp(mixed arg)
 
-BESCHREIBUNG
-        Liefert 1, wenn das Argument ein Symbol ist, ansonsten 0.
+DESCRIPTION
+        Returns true, if arg is a symbol.
 
-BEISPIELE
-        symbolp('foo) liefert 1.
+EXAMPLES
+        symbolp('foo) returns 1.
 
-GESCHICHTE
-        Eingefuehrt in 3.2@70.
+HISTORY
+        Introduced in 3.2@70
 
-SIEHE AUCH
-        intp(E), quote(E)
+SEE ALSO
+        quote(E), bytesp(E), clonep(E), closurep(E), coroutinep(E),
+        floatp(E), intp(E), lpctypep(E), lwobjectp(E), mappingp(E),
+        objectp(E), pointerp(E), referencep(E), stringp(E), structp(E)
diff --git a/doc/efun/tan b/doc/efun/tan
index 695522a..f141a97 100644
--- a/doc/efun/tan
+++ b/doc/efun/tan
@@ -1,11 +1,11 @@
 SYNOPSIS
         float tan(int|float)
 
-BESCHREIBUNG
-        Liefert den Tangens des Argumentes.
+DESCRIPTION
+        Returns the tangent of the argument.
 
-GESCHICHTE
-        LDMud 3.2.9: Ganzzahlen (Integers) als Argument hinzugefuegt.
+HISTORY
+        LDMud 3.2.9 added integers as arguments.
 
-SIEHE AUCH
+SEE ALSO
         sin(E), asin(E), cos(E), acos(E), atan(E), atan2(E)
diff --git a/doc/efun/tell_object b/doc/efun/tell_object
index 207672e..6b6d5c9 100644
--- a/doc/efun/tell_object
+++ b/doc/efun/tell_object
@@ -1,49 +1,46 @@
 SYNOPSIS
-        void tell_object(object|string obj, string str)
-        void tell_object(object|string obj,
+        void tell_object(object|string ob, string str)
+        void tell_object(object|string ob,
                          mixed *|mapping|struct|object|lwobject msg)
 
-BESCHREIBUNG
-        Sendet einen Nachricht an das Objekt <obj> (das auch durch seinen
-        Namen angegeben werden kann).
+DESCRIPTION
+        Send a message str to object ob (which is looked up and if necessary
+        loaded if given by name).
+        
+        If the second argument is a string, the message will be printed
+        to <ob> if it is an interactive user, otherwise it will be passed to
+        the lfun catch_tell() of the target living.
 
-        Ist die Nachricht ein String, wird der Text an interaktive Objekte
-        direkt ausgegeben, fuer andere Objekte wird die lfun catch_tell()
-        aufgerufen.
+        If the second argument is an array/mapping/struct/object, it will be
+        passed to the lfun catch_msg() in the target.
 
-        Ist die Nachricht ein anderer Typ, wird die lfun catch_msg() im
-        Empfaenger aufgerufen.
+EXAMPLES
+        object who;
+        who=find_player("wessex");
+        tell_object(who, "Hi!\n");
 
-BEISPIELE
-        Dies gibt ein einfaches "Hi!" an den Spieler Thomas aus:
+        Just tell Wessex a simple "Hi!".
 
-            object wer;
-            wer = find_player("thomas");
-            tell_object(wer, "Hi!\n");
 
-        Ein Beispiel mit zwei Objekten, das zeigt, wie das Zusammenspiel von
-        catch_tell() und tell_object() ablaueft. Objekt1 ist ein Lebewesen
-        mit Namen "Dummymonster", Objekt2 verteilt die Meldung:
+        Object 1 (living with the name "dummymonster"):
+           void catch_tell(string str) {
+              write("Received: "+str+"\n");
+           }
+        Object 2:
+           void func() {
+              object who;
+              who=find_living("dummymonster");
+              tell_object(who, "Follow me, mortal one!\n");
+              ...
+           }
 
-        Objekt1:
-            void catch_tell(string str)
-            {
-                wirte("Erhaltener Text: "+str+"\n");
-            }
+        This examples shows how tell_object() together with
+        catch_tell() works.
 
-        Objekt2:
-            void fun()
-            {
-                object wer;
-                wer = find_living("dummymonster");
-                tell_object(wer, "Folge mir, Sterblicher!\n");
-                ...
-            }
+HISTORY
+        LDMud 3.2.11 introduced the 'mixed *' form for symmetry reasons.
+        LDMud 3.3.686 added the use of a mapping/struct/object as second
+        argument.
 
-GESCHICHTE
-        LDMud 3.2.11 fuehrte die Arrayform aus Symmetriegruenden ein.
-        LDMud 3.3.686 erlaubt die Verwendung eines mapping/struct/object als
-        zweites Argument.
-
-SIEHE AUCH
+SEE ALSO
         write(E), say(E), catch_tell(A), catch_msg(A)
diff --git a/doc/efun/tell_room b/doc/efun/tell_room
index 6692643..28f18d2 100644
--- a/doc/efun/tell_room
+++ b/doc/efun/tell_room
@@ -1,50 +1,49 @@
 SYNOPSIS
-        void tell_room(string|object obj, string str)
-        void tell_room(string|object obj, string str, object *exclude)
+        void tell_room(string|object ob, string str)
+        void tell_room(string|object ob, string str, object *exclude)
 
-        void tell_room(string|object obj,
+        void tell_room(string|object ob,
                        mixed *|mapping|struct|object|lwobject msg)
-        void tell_room(string|object obj,
+        void tell_room(string|object ob,
                        mixed *|mapping|struct|object|lwobject msg,
                        object *exclude)
 
-BESCHREIBUNG
-        Gibt einen Text <str> an den Raum <obj> aus. <obj> kann auch der
-        Name des Raumes als String sein. Wenn das Objekt, das die Meldung
-        erhaelt, nicht ein interaktives Objekt (also kein User) ist, wird
-        im Empfaenger die Funktion catch_tell() mit dem Text als Argument
-        aufgerufen. Falls ein Lebewesen die Funktion catch_tell() definiert,
-        wird der Text hier ausgewertet und nicht an den User ausgegeben.
-        Wenn das Empfaengerobjekt mit seinem Namen angegeben ist, sucht der
-        Driver das Objekt unter diesem Namen und laedt es, falls notwendig.
-        Wenn das Array <*exclude> angegeben ist, wird der Text an die
-        Objekte in <*exclude> nicht ausgegeben.
+DESCRIPTION
+        Send a message <str> to all living objects in the room ob. ob
+        can also be the name of the room given as a string. If a
+        receiving object is not a interactive user the lfun
+        catch_tell() of the object will be invoked with the message as
+        argument. If living objects define catch_tell(), the string
+        will also be sent to that instead of being written to the
+        user. If the object is given as its filename, the driver
+        looks up the object under that name, loading it if necessary.
+        If array *exclude is given, all objects contained in
+        *exclude are excluded from the message str.
 
-        Wenn das zweite Argument ein nicht-String ist, wird in allen
-        Lebewesen, die den Text erhalten, catch_msg() aufgerufen (statt
-        catch_tell()).
+        If the second arg is an array/mapping/struct/object, catch_msg() will
+        be called in all listening livings.
 
-BEISPIELE
-        An alle Lebewesen im Raum soll ein simples "Hi!" gesendet werden:
+EXAMPLES
+        tell_object(environment(this_player()), "Hi!\n");
 
-            tell_object(environment(this_player()), "Hi!\n");
+        Just send a simple "Hi!" to all livings in the current.
 
-        Folgendes Beispiel zeigt, wie tell_room() zusammen mit catch_tell()
-        funktioniert.
+        Object 1 (living):
+           void catch_tell(string str) {
+              write("Received: "+str+"\n");
+           }
+        Object 2:
+           void func() {
+              ...
+              tell_room(environment(this_player()), "HiHo!\n");
+              ...
+           }
 
-        Objekt1 (ein Lebewesen):
-            void catch_tell(string str) {
-                write("Empfangen: "+str+"\n");
-            }
+        This examples shows how tell_room() together with catch_tell() works.
 
-        Objekt2:
-            void fun() {
-                tell_room(environment(this_player()), "Hallo Welt!\n");
-            }
+HISTORY
+        LDMud 3.3.686 added the use of a mapping/struct/object as second
+        argument.
 
-GESCHICHTE
-        LDMud 3.3.686 erlaubt die Verwendung eines mapping/struct/object als
-        zweites Argument.
-
-SIEHE AUCH
+SEE ALSO
         write(E), say(E), tell_object(E), catch_tell(A), catch_msg(A)
diff --git a/doc/efun/terminal_colour b/doc/efun/terminal_colour
index 4d51a33..13976a2 100644
--- a/doc/efun/terminal_colour
+++ b/doc/efun/terminal_colour
@@ -1,67 +1,64 @@
 SYNOPSIS
-        varargs string terminal_colour(string str,
-                                       null | mapping | closure map,
+        varargs string terminal_colour(string str, null|mapping|closure map,
                                        int wrap, int indent)
-BESCHREIBUNG
-        Ist <map> ein Wert ungleich 0, ersetzt diese Efun alle Farb-
-        Definitionen der Form "%^KEY%^" (siehe unten fuer Details) im
-        String <str> und ersetzt sie durch die entsprechenden Werte aus dem
-        unter <map> angegebenen Farbschluessel.
 
-        Ist <map> ein Mapping, muessen die Eintraege das Format
-        "KEY" : "wert" haben; Eintraege, die keine Strings enthalten,
-        werden ignoriert. Einzige Ausnahme dazu: enthaelt <map> einen
-        Eintrag der Form 0:wert, wird dieser fuer alle Farbdefinitionen
-        verwendet, die keinem anderen Schluessel zugeordnet werden koennen.
-        <wert> kann in diesem Fall ein String oder eine Closure sein. Handelt
-        es sich um eine Closure, erhaelt diese den <KEY> als Argument und
-        muss einen String zurueck liefern, der <KEY> ersetzt.
+DESCRIPTION
+        If <map> is given as a non-0 value, this efun expands all
+        colour-defines of the form "%^KEY%^" (see below for details) from the
+        input-string and replaces them by the apropriate values found
+        for the color-key specified by <map>.
 
-        Ist <map> eine Closure, wird diese mit den Farbdefinitionen <KEY>
-        als Argument aufgerufen und muss einen String zurueck liefern, der
-        die <KEY>s ersetzt.
+        If <map> is a mapping, the entries queries have the
+        format "KEY" : "value", non-string contents are ignored with one
+        exception: if the mapping contains an entry 0:value, it is used
+        for all otherwise unrecognized keys. The value in this case can be
+        a string, or a closure. If it is a closure, it takes the key as
+        argument and has to return the replacement string.
 
-        Die speziellen Schluessel "%^%^" und "%%^^" werden immer durch das
-        Literal "%^" ersetzt.
+        If <map> is given as a closure, it is called with the KEYs to
+        replace, and has to return the replacement string.
 
-        Die Parameter <wrap> und <indent> sind optional. Ist nur <wrap>
-        angegeben, wird <str> in der Spalte <wrap> umgebrochen. Ist
-        zusaetzlich <indent> angegeben, werden alle umgebrochenen Zeilen
-        um <indent> Spalten eingerueckt.
+        The special keys "%^%^" and "%%^^" are always replaced with the
+        literal "%^".
 
-        Der Zeilenumbruch ignoriert die Laenge der Farbmakros und ihrer
-        Inhalte. Er bricht <str> anhand der Laenge der uebrigen Zeichen
-        um, ist also farb-neutral.
+        The parameters wrap and indent are both optional, if only wrap is
+        given then the str will be linewrapped at the column given with
+        wrap. If indent is given too, then all wrapped lines will be
+        indented with the number of blanks specified with indent.
 
-        Ist <map> als 0 angegeben, fuehrt die Efun kein Suchen und Ersetzen
-        von Farbdefinitionen durch. Die Funktionalitaet von Zeilenumbruch
-        und Einrueckung bleiben erhalten, wenn gewuenscht. Auf diese Weise
-        dupliziert terminal_colour() die Funktion von sprintf("%-=s") und
-        wirkt als einfache Zeilenumbruch Funktion.
+        The wrapper itself ignores the length of the color macros and that
+        what they contain, it wraps the string based on the length of the
+        other chars inside. Therefore it is color-aware.
+
+        If <map> is given as 0, the efun does no colour-define detection
+        and replacement at all, but still does linewrapping and indentation
+        if requested. This way terminal_colour() doubles as a simple
+        line wrapping function, duplicating the functionality also
+        provided by sprintf("%-=s").
 
 
-        ERKENNEN VON FARBDEFINITIONEN
+        KEY RECOGNITION STRATEGY
 
-        Wie bereits erwaehnt, werden die speziellen Schluessel "%^%^" und
-        "%%^^" durch das Literal "%^" ersetzt und spielen im Weiteren
-        keine Rolle.
+        As mentioned above, the special keys "%^%^" and "%%^^" are always
+        replaced with the literal "%^" and play no role in the following
+        considerations.
 
-        Fuer den Eingabestring wird das folgende Format vorausgesetzt:
+        The input string is supposed to follow this syntax:
 
-            text { '%^' colorkey '%^' text } [ '%^' colorkey ]
+          text { '%^' colorkey '%^' text } [ '%^' colorkey ]
 
-        Oder in Worten: die Efun trennt den String bei jedem '%^', das
-        sie antrifft und behandelt anschliessend jeden zweiten Teilstring
-        als Farbschluessel.
+        or in words: the efun splits up the string at every '%^' it finds
+        and then treats every second substring as color key.
 
-        Merke: dieses Verhalten unterscheidet sich von der Behandlung des
-        Eingabestrings unter MudOS. Dort lautet die Syntax:
 
-            key_oder_text { '%^' key_oder_text }
+        Note that this is different from the way MudOS treats the
+        input string. MudOS uses this syntax:
 
-        Oder in Worten: die MudOS Efun trennt den String bei jedem '%^'
-        und versucht dann jeden Teilstring als Farbschluessel zu behandeln.
-        Dieses Verhalten laesst sich auch unter LPC erreichen:
+          key_or_text { '%^' key_or_text }
+
+        or in words: the MudOS efun splits the string at every '%^' and
+        then tries to treat every substring as color key. One can achieve
+        the MudOS behaviour with this LPC function:
 
           string mudos_terminal_colour(string str, mapping ext, int w, int i) {
             return terminal_colour("%^"+implode(explode(str, "%^")-({""})
@@ -69,8 +66,7 @@
                                   , ext, w, i);
           }
 
-
-BEISPIELE
+EXAMPLES
         mapping trans;
         string str;
 
@@ -78,49 +74,43 @@
 
         str = terminal_colour( "%^GREEN%^ and %^RED%^ and %^BLUE%^", trans );
 
-        Dies fuehrt zu str == "ansi-green and  and BLUE".
+        This will result in str == "ansi-green and  and BLUE"
 
-        "%^GREEN^%" wird ersetzt durch "ansi-green", weil <trans> das so
-        definiert,
-        "%^RED%^" wird aus <str> entfernt, weil es mit "" ersetzt wird, und
-        "%^BLUE%^" wird um die "%^" verkuert, weil der Eintrag zu BLUE in
-        <trans> keinen gueltigen Wert enthaelt (d.h. kein String ist). Das
-        selbe wuerde passieren, wenn <str> "%^DEFINE%^" enthalten wuerde,
-        zu dem es keinen Eintrag in <trans> gibt.
+        %^GREEN%^ is expanded to ansi-green because trans defines that,
+        %^RED%^ is stripped because trans defines that as "" and
+        %^BLUE%^ gets the %^'s removed because the contents of trans are
+        not valid (i.e. no string). The same would happen to %^DEFINES%^
+        where the key is not found inside the trans mapping.
 
-        Merke: um direkt benachbarte Schluessel zu ersetzen, soll die
-        Efun wie folgt verwendet werden:
+        Caveat: to replace adjacent keys, use the efun like this:
 
             str = terminal_colour( "%^GREEN%^%^RED%^", trans );
 
-        Eine Eingabe der Form
+        A command like
 
             str = terminal_colour( "%^GREEN%^RED%^", trans );
 
-        fuehrt zum logischen, aber vielleicht unerwarteten Ergebnis
-        "ansi-greenRED".
+        will return the logical but sometimes unexpected "ansi-greenRED".
 
 
-        Einige Worte zum Zeilenumbruch:
+        Some words about wrapping:
 
-        Ein String, der ohne Einrueckung umgebrochen wird (<indent> ist 0),
-        sieht so aus:
+        a string wrapped without indent would look like this:
 
-            "dies ist die erste Zeile\nund dies ist die zweite Zeile"
+            "this is the first line\nand this is the second line"
 
-        Ein String, der mit <indent> 3 umgebrochen wird, sieht so aus:
+        a string wrapped with indent 3 would look like:
 
-            "dies ist die erste Zeile\n   und dies ist die zweite Zeile"
+            "this is the first line\n   and this is the indented second one"
 
-GESCHICHTE
-        Die Idee fuer diese Efun und die erste Implementierung stammen
-        aus MudOS; die Strategie fuer das Erkennen von Schluesseln
-        (eingeschlossen die pure Zeilenumbruch Funktion) wurde in
-        LDMud 3.2.8 geglaettet.
-        LDMud 3.2.9 fuegte die Verwendung von Closures zur Definition
-        von Farbschluesseln hinzu. Es erklaerte zudem offiziell das
-        Verhalten betreffen "%%^^" aus Gruenden besserer Kompatibilitaet
-        mit MudOS.
+HISTORY
+        Efun idea and initial implementation taken from MudOS; the key
+        recognition strategy (including pure wrapping mode) was straightened
+        out in LDMud 3.2.8.
+        LDMud 3.2.9/3.3.58 added the use of closures to specify the colour
+        mappings.
+        LDMud 3.2.9/3.3.102 officialized the "%%^^" replacement pattern for
+        better MudOS compatibility.
 
-SIEHE AUCH
+SEE ALSO
         sprintf(E)
diff --git a/doc/efun/test_bit b/doc/efun/test_bit
index d493357..c6e134e 100644
--- a/doc/efun/test_bit
+++ b/doc/efun/test_bit
@@ -1,21 +1,24 @@
 SYNOPSIS
         int test_bit(string str, int n)
 
-BESCHREIBUNG
-        Gibt 0 oder 1 des <n>-ten Bits im String <str> zurueck.
+DESCRIPTION
+        Return 0 or 1 of bit n was set in string str.
 
-        Jedes Zeichen besteht aus 6 Bits. Jedem Zeichen ist also ein Wert
-        zwischen 0 und 63 zugeordnet (weil 2^6=64). Das erste Zeichen ist der
-        Leerschlag " " mit dem Wert 0 (keines der Bits ist gesetzt). Das
-        erste Zeichen im String ist dasjenige mit den niedrigsten Bits (0-5).
+        Each character contains 6 bits. So you can store a value
+        between 0 and 63 in one character (2^6=64). Starting character
+        is the blank " " which has the value 0. The first character in
+        the string is the one with the lowest bits (0-5).
 
-BEISPIELE
-        test_bit("_", 5);   Liefert 1, weil "_" das 63. Zeichen ist und
-                            deshalb das 5. Bit gesetzt hat.
+EXAMPLES
+        test_bit("_",5);
 
-        test_bit(" ", 3);   Liefert 0, weil " " das 0. Zeichen ist und deshalb
-                            kein Bit gesetzt hat.
+        Returns 1 because "_" stands for the number 63 and therefore
+        the 6th bit is set.
 
-SIEHE AUCH
+        test_bit(" ",3);
+
+        Returns 0 because " " stands for 0 and no bit is set.
+
+SEE ALSO
         set_bit(E), clear_bit(E), last_bit(E), next_bit(E), count_bits(E),
         and_bits(E), or_bits(E), xor_bits(E), invert_bits(E), copy_bits(E)
diff --git a/doc/efun/this_coroutine b/doc/efun/this_coroutine
new file mode 100644
index 0000000..1c57e26
--- /dev/null
+++ b/doc/efun/this_coroutine
@@ -0,0 +1,12 @@
+SYNOPSIS
+        coroutine this_coroutine()
+
+DESCRIPTION
+        Returns the innermost coroutine in the caller stack.
+        Returns 0 if there is no coroutine.
+
+HISTORY
+        Coroutines were introduced in LDMud 3.6.5.
+
+SEE ALSO
+        coroutines(LPC), call_coroutine(E)
diff --git a/doc/efun/this_interactive b/doc/efun/this_interactive
index 2b872df..14ddd6b 100644
--- a/doc/efun/this_interactive
+++ b/doc/efun/this_interactive
@@ -1,9 +1,9 @@
 SYNOPSIS
-        object this_interactive()
+        object this_interactive(void)
 
-BESCHREIBUNG
-        Die Funktion gibt das momentane interaktive Objekt zurueck, falls
-        vorhanden, also dasjenige, welches "die Entertaste gedrueckt hat".
+DESCRIPTION
+        this_interactive() returns the current interactive object, if
+        any, i.e. the one who "hit the RETURN key".
 
-SIEHE AUCH
+SEE ALSO
         this_player(E), previous_object(E), interactive(E), living(E)
diff --git a/doc/efun/this_object b/doc/efun/this_object
index 39b9fcb..e9e9327 100644
--- a/doc/efun/this_object
+++ b/doc/efun/this_object
@@ -1,10 +1,10 @@
 SYNOPSIS
-        object|lwobject this_object()
+        object|lwobject this_object(void)
 
-BESCHREIBUNG
-        Liefert den Objektpointer auf dieses Objekt. Der Pointer darf nicht
-        mit dem internen Namen des Objekts verwechselt werden, welcher von
-        id() verwendet wird.
+DESCRIPTION
+        Return the object pointer for this object. This is not to be
+        confused with the internal name of an object, which is used by
+        the id() function.
 
-SIEHE AUCH
+SEE ALSO
         this_player(E), previous_object(E), object_name(E), find_object(E)
diff --git a/doc/efun/this_player b/doc/efun/this_player
index 4017a64..bd57ca0 100644
--- a/doc/efun/this_player
+++ b/doc/efun/this_player
@@ -1,17 +1,17 @@
 SYNOPSIS
-        object this_player()
+        object this_player(void)
 
-BESCHREIBUNG
-        Liefert den momentanen Kommandogeber. Das kann ein interaktiver
-        Bentzer oder ein lebendiges Objekt sein, zum Beispiel ein NPC.
+DESCRIPTION
+        Return the current command giver.  This can be an interactive
+        user or a living object like a npc.
 
-        Wenn die Funktion innerhalb von heart_beat() eines nicht
-        lebendigen Objekts aufgerufen wird, wird 0 zurueck gegeben.
+        If called from inside the heart_beat() of a not living object
+        0 will be returned.
 
-BEISPIELE
-        if (this_player() != this_interactive()) {
-            write("Hey, jemand zwingt uns, Kommandos auszufuehren!\n");
-        }
+EXAMPLES
+        if (this_player() != this_interactive())
+           write("Hey, somebody must have forced us to do a
+           command!\n");
 
-SIEHE AUCH
+SEE ALSO
         this_object(E), previous_object(E), interactive(E), living(E)
diff --git a/doc/efun/throw b/doc/efun/throw
index d0b518e..0140dc4 100644
--- a/doc/efun/throw
+++ b/doc/efun/throw
@@ -1,16 +1,17 @@
 SYNOPSIS
         void throw(mixed arg)
 
-BESCHREIBUNG
-        Bricht die Programmverarbeitung ab. Wenn die Verarbeitung mit catch()
-        gestartet wurde, gibt dieses catch() <arg> als Fehlermeldung aus.
+DESCRIPTION
+        Abort execution. If the current program execution was
+        initiated by catch(), that catch expression will
+        return arg as error code.
 
-        Der Aufruf von throw() ohne vorheriges catch() macht keinen Sinn und
-        erzeugt einen "throw without catch" Fehler.
+        Calling throw() without previous catch() does not make sense
+        and will result in an ``throw without catch'' error.
 
-BEISPIELE
-        catch(throw("Verarbeitung abgebrochen!"));
-        Das macht nichts als "Verarbeitung abgebrochen!" auszugeben.
+EXAMPLES
+        catch(throw("aborting execution"));
+        This will just print the string "aborting execution".
 
-SIEHE AUCH
+SEE ALSO
         catch(E), raise_error(E)
diff --git a/doc/efun/time b/doc/efun/time
index d9e9ed2..ab3ffb7 100644
--- a/doc/efun/time
+++ b/doc/efun/time
@@ -1,21 +1,20 @@
 SYNOPSIS
         int time()
 
-BESCHREIBUNG
-        Liefert die Anzahl Sekunden, die seit dem 01. Januar 1970,
-        00:00:00 GMT verstrichen sind.
+DESCRIPTION
+        Return number of seconds ellapsed since 1. Jan 1970, 0.0:0 GMT
 
-        Die Zeitangabe basiert auf der Systemzeit des Hosts; der Driver
-        stellt jedoch sicher, dass das Resultat von time() monoton ansteigt
-        (also immer nur zu hoeheren Werten wechselt).
+        The time is based on the time provided by the host system, however,
+        the driver makes sure that the result of time() is monotonically
+        increasing (ie. changes only to bigger numbers).
 
-        Das Resultat von time() veraendert sich nicht waehrend dem Abarbeiten
-        eines Kommandos.
+        The result of time() does not change during the course of a command
+        execution.
 
-BEISPIELE
-        Um das aktuelle Datum und die aktuelle Zeit anzuzeigen:
+EXAMPLES
+        write(ctime(time())+"\n");
 
-            write(ctime(time())+"\n");
+        Print out the current date and time.
 
-SIEHE AUCH
+SEE ALSO
         ctime(E), gmtime(E), localtime(E), utime(E)
diff --git a/doc/efun/tls_check_certificate b/doc/efun/tls_check_certificate
index f8afc8e..16127c5 100644
--- a/doc/efun/tls_check_certificate
+++ b/doc/efun/tls_check_certificate
@@ -1,7 +1,7 @@
 PRELIMINARY
 SYNOPSIS
-        mixed *tls_check_certificate(object obj);
-        mixed *tls_check_certificate(object obj, int extra);
+        mixed * tls_check_certificate(object obj)
+        mixed * tls_check_certificate(object obj, int extra)
 
 DESCRIPTION
         tls_check_certificate() checks the certificate of the secured
@@ -13,29 +13,26 @@
         error is thrown.
         Otherwise, the result is an array with these values:
 
-          int [0]      : Result code of SSL_get_verify_result (see man 1 verify
-                         subsection DIAGNOSTICS for possible values)
-          array [1]    : array with 3*n entries of extra x509 data.
-                         structure is:
-                            3*i    : numerical form of object name,
-                                     e.g. "2.5.4.3"
-                            3*i + 1: long or short name if available,
-                                     e.g. "commonName"
-                            3*i + 2: value
-          array [2]    : if extra is set:
-                            array with 3*n entries of x509 extension data
-                            data structure is:
-                            3*i    : numerical form of extension name
-                            3*i + 1: long or short name of extension
-                                     name if available
-                            3*i + 2: array of strings with the data
-                                     structure of [1]
+          int [0]   : Result code of SSL_get_verify_result (see 'man 1 verify',
+                      subsection DIAGNOSTICS for possible values)
+          array [1] : array with 3*n entries of extra x509 data.
+                      structure is:
+                         3*i    : numerical form of object name,
+                                  e.g. "2.5.4.3"
+                         3*i + 1: long or short name if available,
+                                  e.g. "commonName"
+                         3*i + 2: value
+          array [2] : if extra is set:
+                         array with 3*n entries of x509 extension data
+                         data structure is:
+                         3*i    : numerical form of extension name
+                         3*i + 1: long or short name of extension
+                                  name if available
+                         3*i + 2: array of strings with the data
+                                  structure of [1]
 
-        Note: a x509 certificate can have more than one object with
-        the same name
-
-BUGS
-        Not supported when using GnuTLS.
+        Note: An X509 certificate can have more than one object with
+        the same name.
 
 HISTORY
         Introduced in LDMud 3.3.672/3.2.11.
diff --git a/doc/efun/tls_init_connection b/doc/efun/tls_init_connection
index e33afae..e36bbac 100644
--- a/doc/efun/tls_init_connection
+++ b/doc/efun/tls_init_connection
@@ -1,7 +1,8 @@
 PRELIMINARY
 SYNOPSIS
         int tls_init_connection(object ob)
-        int tls_init_connection(object ob, string fun, string|object fob, mixed extra...)
+        int tls_init_connection(object ob, string fun, string|object fob,
+                                mixed extra...)
         int tls_init_connection(object ob, closure fun, mixed extra...)
 
 DESCRIPTION
diff --git a/doc/efun/tls_query_connection_info b/doc/efun/tls_query_connection_info
index 32aeef7..5db0b84 100644
--- a/doc/efun/tls_query_connection_info
+++ b/doc/efun/tls_query_connection_info
@@ -1,7 +1,8 @@
 PRELIMINARY
 SYNOPSIS
-        #include <sys/ tls.h>
-        int *tls_query_connection_info (object ob)
+        #include <tls.h>
+
+        int * tls_query_connection_info(object ob)
 
 DESCRIPTION
         If <ob> does not have a TLS connection or if the connection
diff --git a/doc/efun/tls_refresh_certs b/doc/efun/tls_refresh_certs
index c8364c5..995b6e4 100644
--- a/doc/efun/tls_refresh_certs
+++ b/doc/efun/tls_refresh_certs
@@ -5,8 +5,13 @@
 DESCRIPTION
         Reload the certificates and certificate revocation information.
 
-BUGS
-        Not supported when using GnuTLS.
+        If there are no key and certificate files to be found, this efun
+        will keep the current keys and certificates, to keep TLS working.
+        CAs and CRLs are cleared and reloaded in any case.
+
+        Note that when using GnuTLS a call to tls_refresh_certs()
+        while a connection is in the middle of a TLS handshake might
+        result in a wrong key to be used.
 
 HISTORY
         Introduced in LDMud 3.3.714/3.2.15.
diff --git a/doc/efun/to_array b/doc/efun/to_array
index afc91c1..8f30a7f 100644
--- a/doc/efun/to_array
+++ b/doc/efun/to_array
@@ -1,29 +1,37 @@
 SYNOPSIS
-        mixed * to_array(string arg)
-        mixed * to_array(bytes arg)
-        mixed * to_array(symbol arg)
-        mixed * to_array(quotedarray arr)
-        mixed * to_array(mixed *arg)
-        mixed * to_array(struct arg)
+        mixed * to_array(string)
+        mixed * to_array(bytes)
+        mixed * to_array(symbol)
+        mixed * to_array(quotedarray)
+        mixed * to_array(mixed *)
+        mixed * to_array(struct)
+        mixed * to_array(lpctype)
 
         (int*)<value>
 
-BESCHREIBUNG
-        Strings und Symbole werden umgewandelt in ein Integer-Array, das aus
-        den Zeichen von <arg> besteht, wobei 0 == '\0' als letzes Zeichen
-        im Array gespeichert wird.
+DESCRIPTION
+        Strings and symbols are converted to an int array that
+        consists of the args characters. Note that the string "12" will be
+        converted to the array ({ 33, 34 }), and not ({ 33, 34, 0 }) (the
+        LDMud versions prior to 3.3 returned the latter array).
 
-        Bytefolgen werden in ein Array dieser Bytes konvertiert.
+        Byte sequences are converted into an array of these bytes.
 
-        Gequotete Arrays werden "entquotet", und Arrays bleiben, wie sie sind.
+        Quoted arrays are ``dequoted'', and arrays are left as they
+        are.
 
-FEHLER
-        Die Cast-Schreibweise funktioniert nur, wenn der genaue Wert von
-        <value> zum Zeitpunkt der Kompilierung bekannt ist. Dies wird
-        nicht geaendert werden, da die Funktionsform verwendet werden kann.
+        Structs are converted into a normal array.
 
-GESCHICHTE
-        LDMud 3.3.250 fuegte den Support von structs hinzu.
+        Union lpc types are split into their union member types
+        (in no particular order).
 
-SIEHE AUCH
-        to_int(E), to_string(E)
+BUGS
+        The cast notation only works if the precise type of <value>
+        is known at compile-time. This will not be fixed - use the
+        function form instead.
+
+HISTORY
+        LDMud 3.3.250 added structs to the accepted data types.
+
+SEE ALSO
+        to_int(E), to_string(E), to_struct(E)
diff --git a/doc/efun/to_float b/doc/efun/to_float
index 2d6f8d6..1717bae 100644
--- a/doc/efun/to_float
+++ b/doc/efun/to_float
@@ -1,19 +1,19 @@
 SYNOPSIS
-        float to_float(int    arg)
-        float to_float(string arg)
-        float to_float(float  arg)
+        float to_float(int)
+        float to_float(string)
+        float to_float(float)
 
         (float)<value>
 
-BESCHREIBUNG
-        Integers werden zu Floats erweitert, Strings werden in Floats
-        konvertiert bis zum ersten Zeichen, das nicht mehr zum Float
-        gehoert. Floats werden direkt zurueck gegeben.
+DESCRIPTION
+        Ints are expanded to floats, strings are converted up to the
+        first character that doesnt belong into a float.
+        Floats are just returned.
 
-FEHLER
-        Die Cast-Schreibweise funktioniert nur, wenn der genaue Wert von
-        <value> zum Zeitpunkt der Kompilierung bekannt ist. Dies wird nicht
-        geaendert werden, da die Funktionsform verwendet werden kann.
+BUGS
+        The cast notation only works if the precise type of <value>
+        is known at compile-time. This will not be fixed - use the
+        function form instead.
 
-SIEHE AUCH
+SEE ALSO
         to_string(E), to_int(E), sscanf(E)
diff --git a/doc/efun/to_int b/doc/efun/to_int
index 75c1992..a3a98ee 100644
--- a/doc/efun/to_int
+++ b/doc/efun/to_int
@@ -1,32 +1,33 @@
 SYNOPSIS
-        int to_int(string  arg)
-        int to_int(float   arg)
-        int to_int(int     arg)
-        int to_int(closure arg)
+        int to_int(string)
+        int to_int(float)
+        int to_int(int)
+        int to_int(closure)
 
         (int)<value>
 
-BESCHREIBUNG
-        Bei Floats werden die Nachkommastellen abgeschnitten, Strings mit
-        Ziffern am Anfang werden bis zum ersten Nicht-Ziffern-Zeichen in
-        Integers umgewandelt. Lfun-Closures werden in ihren Funktionsindex
-        konvertiert, Variablen-Closures in ihren Variablenindex. Integers
-        werden unveraendert zurueck gegeben.
+DESCRIPTION
+        Floats are truncated to integer values, strings with leadings
+        digits are converted to integers up to the first non-digit.
+        lfun-closures are converted into their function index (not adjusted
+        for inheritance), variable closure are converted into their variable
+        index.
+        Integers are just returned.
 
-        Bezueglich Floats ist es wichtig, Rundungseffekte zu beachten:
-        to_int(3.1*10.0) ergibt nicht 31, sondern 30, weil intern das
-        Resultat der Multiplikation 30.999999 ergibt.
-     
-        Diese Funktion unterstuetzt die Basisprefixe '0x', '0o' und '0b'.
+        Regarding floats, it is important to keep rounding effects
+        in mind: to_int(3.1*10.0) does not return 31, but instead 30,
+        because internally the result of the multiplication is 30.999999.
 
-FEHLER
-        Die Cast-Schreibweise funktioniert nur, wenn der genaue Wert von
-        <value> zum Zeitpunkt der Kompilierung bekannt ist. Dies wird
-        nicht geaendert werden, da die Funktionsform verwendet werden kann.
+        The function supports the '0x', '0o' and '0b' base prefixes.
 
-GESCHICHTE
-        Eingefuehrt in 3.2.1@2.
-        LDMud 3.2.11 fuehrte die Basisprefixe ein.
+BUGS
+        The cast notation only works if the precise type of <value>
+        is known at compile-time. This will not be fixed - use the
+        function form instead.
 
-SIEHE AUCH
+HISTORY
+        Introduced in 3.2.1@2.
+        LDMud 3.2.11/3.3.611 added support for the base prefixes.
+
+SEE ALSO
         to_string(E), sscanf(E)
diff --git a/doc/efun/to_lpctype b/doc/efun/to_lpctype
new file mode 100644
index 0000000..dc681c7
--- /dev/null
+++ b/doc/efun/to_lpctype
@@ -0,0 +1,12 @@
+SYNOPSIS
+        lpctype to_lpctype(string type)
+
+DESCRIPTION
+        Interprets the given string as an lpc type. This efun basically
+        returns the same type as the [<type>] literal.
+
+HISTORY
+        Introduced in LDMud 3.6.7.
+
+SEE ALSO
+        to_string(E), lpctypes(LPC)
diff --git a/doc/efun/to_object b/doc/efun/to_object
index 1ca88da..1eba674 100644
--- a/doc/efun/to_object
+++ b/doc/efun/to_object
@@ -5,25 +5,23 @@
 
         (object)<value>
 
-BESCHREIBUNG
-        Das Argument <arg> wird in ein Objekt umgewandelt, wenn dies
-        moeglich ist.
+DESCRIPTION
+        The argument is converted into an object, if possible.
 
-        Fuer Strings wird das Objekt mit entsprechendem object_name(<arg>)
-        zurueck gelierfert, oder 0, wenn es kein entsprechendes Objekt gibt.
-        Dies entspricht find_object().
+        For strings, the object with a matching object_name() is
+        returned, or 0 if there is none, as find_object() does.
 
-        Fuer (gebundene!) Closures wird das Objekt zurueck gegeben, das die
-        Closure enthaelt. Fuer "Alien Lfun Closures" ist das das Objekt, das
-        die Closure erzeugt hat, nicht das Objekt, in dem die Lfun definiert
-        ist.
+        For (bound!) closures, the object holding the closure is
+        returned (for 'alien lfun closures' this is the object which
+        created the closure, not the object the lfun is defined in).
 
-        Objekte und die Zahl 0 werden unveraendert zurueck gegeben.
+        Objects and the number 0 return themselves.
 
-FEHLER
-        Die Cast-Schreibweise funktioniert nur, wenn der genaue Wert von
-        <value> zum Zeitpunkt der Kompilierung bekannt ist. Dies wird nicht
-        geaendert werden, da die Funktionsform verwendet werden kann.
+BUGS
+        The cast notation only works if the precise type of <value>
+        is known at compile-time. This will not be fixed - use the
+        function form instead.
 
-SIEHE AUCH
-        find_object(E), to_array(E), to_int(E), to_string(E), get_type_info(E)
+SEE ALSO
+        find_object(E), to_array(E), to_int(E), to_string(E),
+        get_type_info(E)
diff --git a/doc/efun/to_string b/doc/efun/to_string
index 1d23ef6..89afa37 100644
--- a/doc/efun/to_string
+++ b/doc/efun/to_string
@@ -1,29 +1,29 @@
 SYNOPSIS
-        string to_string(mixed arg)
+        string to_string(mixed)
 
-BESCHREIBUNG
-        <arg> wird in einen String umgewandelt. Das klappt mit Werten vom Typ
-        int, float, object, array, struct, symbol, string oder closure.
+        (string)<value>
 
-        Closures werden in einen passenden Namen umgewandelt (vorwiegend fuer
-        Debugging-Zwecke geeignet).
+DESCRIPTION
+        The argument is converted to a string. Works with int, float,
+        object, arrays, structs, symbols, strings and closures.
 
-ANMERKUNGEN
-        Arrays werden als "explodete" Strings betrachtet, also Arrays von
-        Zeichencodes. Sie werden bis zur ersten 0 oder bis zum ersten
-        nicht-numerischen Eintrag "implodet", je nachdem, was zuerst eintritt.
+        Converts closures and structs into an appropriate name (this
+        has mostly debugging purposes).
 
-        Das bedeutet, dass to_string( ({ 49, 50 }) ); "12" liefert, und nicht
-        "({ 49, 50 })"
+        CAVEAT: Arrays are considered exploded strings, ie. arrays of
+        Unicode codepoints (i.e. each number is one Unicode character),
+        and are 'imploded' up to the first non-number entry, whatever
+        comes first. That means that to_string(({ 49, 50 })) will return
+        "12" and not "({ 49, 50 })".
 
-FEHLER
-        Die Cast-Schreibweise funktioniert nur, wenn der genaue Wert von
-        <value> zum Zeitpunkt der Kompilierung bekannt ist. Dies wird nicht
-        geaendert werden, da die Funktionsform verwendet werden kann.
+BUGS
+        The cast notation only works if the precise type of <value>
+        is known at compile-time. This will not be fixed - use the
+        function form instead.
 
-GESCHICHTE
-        LDMud 3.2.8 laesst Lambdaclosures als gueltige Datentypen zu.
-        LDMud 3.3.250 laesst structs als gueltige Datentypen zu.
+HISTORY
+        LDMud 3.2.8 adds lambda closures to the accepted data types.
+        LDMud 3.3.250 adds structs to the accepted data types.
 
-SIEHE AUCH
+SEE ALSO
         to_array(E), to_int(E), to_object(E), to_struct(E), sprintf(E)
diff --git a/doc/efun/to_type b/doc/efun/to_type
new file mode 100644
index 0000000..dc93eb1
--- /dev/null
+++ b/doc/efun/to_type
@@ -0,0 +1,58 @@
+SYNOPSIS
+        mixed to_type(mixed value, lpctype type)
+        mixed to_type(mixed value, lpctype type, struct to_type_options options)
+
+DESCRIPTION
+        Converts <value> to <type>. This efun will apply any type conversions
+        recursively to make <value> conform to <type>. The following
+        conversions are available:
+
+          source type       target types
+          -------------     ----------------------------------------
+          array (int)       string, bytes
+          array (mixed)     quoted array, struct, mapping
+          bytes             string, int*
+          closure           object, lwobject, int, string
+          coroutine         string
+          int               float, string
+          float             int, string
+          lpctype           lpctype*, mapping, string
+          lwobject          string
+          mapping           struct, mixed*
+          object            string
+          quoted array      mixed*
+          string            symbol, int, float, lpctype, object, bytes, int*
+          struct            struct, mapping, mixed*, string
+          symbol            string, int*
+
+        If multiple conversions are possible (e.g. to_type("10", <int|int*>)
+        the conversion will be selected in order as given in the table above.
+        If multiple array or struct types are given, the order is undefined.
+        Conversions, where elements (e.g. from an array, mapping or struct)
+        need to be discarded, are not considered.
+
+        Optionally the function accepts a struct with additional options.
+        All entries in this struct are optional. These are the members:
+
+          source_encoding:
+            The encoding (given as string) for conversion from bytes to
+            string. If not given, such a conversion will not be performed.
+
+          target_encoding:
+            The encoding (given as string) for conversion from string to
+            bytes. If not given, such a conversion will not be performed.
+
+          keep_zero:
+            If set (integer != 0) a zero will not be converted. If unset,
+            a zero will be converted to string or float if requested,
+            for all other types it will stay zero.
+
+EXAMPLES
+        to_type(({ "10", "20" }), [int*]) -> ({ 10, 20 })
+
+HISTORY
+        Introduced in LDMud 3.6.8.
+
+SEE ALSO
+        to_array(E), to_bytes(E), to_float(E), to_int(E), to_lpctype(E),
+        to_object(E), to_string(E), to_struct(E), to_text(E)
diff --git a/doc/efun/trace b/doc/efun/trace
index 330fcf1..829d8a1 100644
--- a/doc/efun/trace
+++ b/doc/efun/trace
@@ -1,54 +1,57 @@
-GESCHUETZT
 SYNOPSIS
         #include <trace.h>
 
         int trace(int traceflags)
 
-BESCHREIBUNG
-        Setzt die Trace Flags und liefert die alten Trace Flags zurueck.
-        Wenn Tracing eingeschaltet ist, wird waehrend der Ausfuehrung eine
-        Menge Informationen ausgegeben. Zu viel Output kann die Verbindung
-        lahm legen oder sogar den ganzen Treiber zum Absturz bringen.
+DESCRIPTION
+        Sets the trace flags and returns the old trace flags. When
+        tracing is on, a lot of information is printed during
+        execution and too much output can crash your connection or
+        even the whole driver.
 
-        Tracing erfolgt auf einer Pro-Verbindung-Basis: jeder interaktive (!)
-        User kann sein eigenes Tracelevel und -praefix festlegen. Jeder
-        erhaelt nur den Traceoutput fuer den Code, der waehrend der
-        Auswertung eines vom User eingegeben Kommandos ausgefuehrt wird.
+        Tracing is done on a per-connection basis: each interactive(!)
+        user may specifiy their own tracelevel and -prefix. Each gets the
+        traceoutput for just the code executed during the evaluation
+        of the commands he entered.
 
-        Die Trace-Bits (aus <trace.h>) sind:
+        The trace bits are:
 
-            TRACE_NOTHING       (  0): Beendet das Tracing
-            TRACE_CALL          (  1): Tracet alle Aufrufe von Lfuns
-            TRACE_CALL_OTHER    (  2): Tracet alle call_other() Aufrufe
-            TRACE_RETURN        (  4): Tracet Resultate von Funktionen
-            TRACE_ARGS          (  8): Gibt Argumente und Resultate von
-                                       Funktionen aus
-            TRACE_EXEC          ( 16): Tracet alle ausgefuehrten Anweisungen
-            TRACE_HEART_BEAT    ( 32): Tracet den Heartbeat Code
-            TRACE_APPLY         ( 64): Tracet Treiber-Applies
-            TRACE_OBJNAME       (128): Gibt den Namen des Objektes aus
+          TRACE_NOTHING     (  0): stop tracing.
 
-        TRACE_EXEC und TRACE_HEART_BEAT sollten nicht verwendet werden, weil
-        sie massiven Output verursachen. TRACE_OBJNAME sollte nicht verwendet
-        werden, wenn bekannt ist, welches Objekt getracet wird.
+          TRACE_CALL        (  1): trace all calls to lfuns.
+          TRACE_CALL_OTHER  (  2): trace call_others()s.
+          TRACE_RETURN      (  4): trace function returns.
+          TRACE_ARGS        (  8): print function arguments and results.
+          TRACE_EXEC        ( 16): trace all executed instructions.
+          TRACE_HEART_BEAT  ( 32): trace heartbeat code.
+          TRACE_APPLY       ( 64): trace driver applies.
+          TRACE_OBJNAME     (128): print the object names.
 
-        Die Master-Lfun valid_trace() wird mit ("trace", traceflags)
-        aufgerufen, um die Erlaubnis fuer die Nutzung von trace() zu erhalten.
+        TRACE_EXEC and TRACE_HEART_BEAT should be avoided as they cause
+        massive output! TRACE_OBJNAME should be avoided when you know
+        what you trace.
 
-BEISPIELE
+        The master-lfun valid_trace() is called with ("trace", traceflags)
+        as argument to verify the use of this efun.
+
+
+EXAMPLES
         object obj;
         string prefix;
-        obj = find_player("thomas");
-        prefix = object_name(obj);  /* z.B. /std/player#69         */
-        prefix = prefix[1..];       /* entfernt den fuehrenden "/" */
+        obj = find_player("wessex");
+        prefix = object_name(obj);
+        prefix = prefix[1..];  /* cut off the leading "/" */
         traceprefix(prefix);
-        /* Von hier an wird nur Code im Objekt std/player#69 getracet */
+          /* From here on, only code in the object "std/player#69"
+           * will be traced.
+           */
         trace(TRACE_CALL|TRACE_CALL_OTHER|TRACE_RETURN|TRACE_ARGS);
         ...
         trace(TRACE_NOTHING);
 
-GESCHICHTE
-        LDMud 3.2.9 uebergibt auch <traceflags> an valid_trace().
+HISTORY
+        LDMud 3.2.9 passes the <traceflags> argument to the valid_trace()
+        apply as well.
 
-SIEHE AUCH
+SEE ALSO
         traceprefix(E)
diff --git a/doc/efun/traceprefix b/doc/efun/traceprefix
index 24802ef..3b0595c 100644
--- a/doc/efun/traceprefix
+++ b/doc/efun/traceprefix
@@ -1,38 +1,37 @@
-GESCHUETZT
 SYNOPSIS
+        #include <trace.h>
+
         string traceprefix(string prefix)
         string traceprefix(int dummy)
 
-BESCHREIBUNG
-        Wenn die Funktion mit einem String als Argument aufgerufen wird,
-        werden nur Objekte getracet, deren Name mit diesem String
-        uebereinstimmt. Der String <prefix> darf am Anfang keinen "/"
-        enthalten, weil Objektnamen intern ohne diesen "/" am Anfang
-        gespeichert werden. Wird traceprefix() mit einer Zahl als Argument
-        aufgerufen, wird traceprefix ignoriert und alle Objekte werden
-        getracet.
+DESCRIPTION
+        If called with a string, only objects matching this prefix will
+        be traced. The string must not contain a leading "/" because
+        the object names are stored internally without it. If called
+        with a number, the traceprefix will be ignored and all objects
+        will be traced. Returns the last traceprefix or 0 if there
+        wasn't any.
 
-        Die Funktion liefert das alte Praefix zurueck oder 0, wenn keines
-        gefunden wurde.
+        The master-lfun valid_trace() is called with ("traceprefix", prefix)
+        as arguments to verify the use of this efun.
 
-        Die Master-Lfun valid_trace() wird mit ("traceprefix", prefix)
-        aufgerufen, um die Erlaubnis fuer die Benutzung dieser Funktion zu
-        erhalten.
-
-BEISPIELE
+EXAMPLES
         object obj;
         string prefix;
-        obj=find_player("thomas");
-        prefix = object_name(obj);  /* z.B. /std/player#69         */
-        prefix = prefix[1..];       /* entfernt den fuehrenden "/" */
+        obj = find_player("wessex");
+        prefix = object_name(obj);
+        prefix = prefix[1..];  /* cut off the leading "/" */
         traceprefix(prefix);
-        /* Von hier an wird nur Code im Objekt std/player#69 getracet */
-        trace(TRACE_CALL|TRACE_CALL_OTHER|TRACE_RETURN|TRACE_ARGS);
+          /* From here on, only code in the object "std/player#69"
+           * will be traced.
+           */
+        trace(TRACE_CALL | TRACE_CALL_OTHER | TRACE_RETURN | TRACE_ARGS);
         ...
         trace(TRACE_NOTHING);
 
-GESCHICHTE
-        Ab LDMud 3.2.9 wird das Argument <prefix> an valid_trace() uebergeben.
+HISTORY
+        LDMud 3.2.9 passes the <prefix> argument to the valid_trace()
+        apply as well.
 
-SIEHE AUCH
+SEE ALSO
         trace(E)
diff --git a/doc/efun/transfer b/doc/efun/transfer
new file mode 100644
index 0000000..206df24
--- /dev/null
+++ b/doc/efun/transfer
@@ -0,0 +1,116 @@
+DEPRECATED
+SYNOPSIS
+        int transfer(object item, object dest)
+
+DESCRIPTION
+        This efun is for backward compatibility only. It is only
+        available in compat mode.
+
+        Move the object "item" to the object "dest". All kinds of
+        tests are done, and a number is returned specifying the
+        result:
+
+        0: Success.
+        1: To heavy for destination.
+        2: Can't be dropped.
+        3: Can't take it out of it's container.
+        4: The object can't be inserted into bags etc.
+        5: The destination doesn't allow insertions of objects.
+        6: The object can't be picked up.
+
+        If an object is transfered to a newly created object, make
+        sure that the new object first is transfered to it's
+        destination.
+
+        The efun calls add_weight(), drop(), get(), prevent_insert(),
+        add_weight(), and can_put_and_get() where needed.
+
+REPLACEMENT
+        This efun can easily be replaced with a simul_efun:
+
+        /*--------------------------------------------------------*/
+        int transfer(object item, object dest)
+        {
+            int weight;
+            object from;
+
+            efun::set_this_object(previous_object());
+
+            weight = item->query_weight();
+            if (!item)
+                return 3;
+
+            from = environment(item);
+            if (from)
+            {
+                /*
+                 * If the original place of the object is a living object,
+                 * then we must call drop() to check that the object can be
+                 * dropped.
+                 */
+                if (living(from))
+                {
+                    if (item->drop() || !item)
+                        return 2;
+                }
+                /*
+                 * If 'from' is not a room and not a player, check that we may
+                 * remove things out of it.
+                 */
+                else if (environment(from))
+                {
+                    if (!from->can_put_and_get() || !from)
+                        return 3;
+                }
+            }
+
+            /*
+             * If the destination is not a room, and not a player,
+             * Then we must test 'prevent_insert', and 'can_put_and_get'.
+             */
+            if (environment(dest) && !living(dest))
+            {
+                if (item->prevent_insert())
+                    return 4;
+                if (!dest->can_put_and_get() || !dest)
+                    return 5;
+            }
+
+            if (living(dest))
+            {
+                if (!item->get() || !item)
+                    return 6;
+            }
+
+            /*
+             * If it is not a room, correct the total weight in the
+             * destination.
+             */
+            if (environment(dest) && weight)
+            {
+                if (!dest->add_weight(weight) || !dest)
+                    return 1;
+            }
+
+            /*
+             * If it is not a room, correct the weight in the 'from' object.
+             */
+            if (from && environment(from) && weight)
+            {
+                from->add_weight(-weight);
+            }
+
+            move_object(item, dest);
+
+            return 0;
+        }
+        /*--------------------------------------------------------*/
+
+
+HISTORY
+        Deprecated in LDMud 3.3; available only when compiled with
+          USE_DEPRECATED.
+
+SEE ALSO
+         move_object(E), drop(A), get(A), prevent_insert(A),
+         can_put_and_get(A), add_weight(A)
diff --git a/doc/efun/transpose_array b/doc/efun/transpose_array
index 58654c1..8ae3af7 100644
--- a/doc/efun/transpose_array
+++ b/doc/efun/transpose_array
@@ -1,23 +1,22 @@
 SYNOPSIS
         mixed * transpose_array(mixed *arr)
 
-BESCHREIBUNG
-        Transponiert das Array <arr>.
+DESCRIPTION
+        transpose_array(({ ({1,2,3}), ({a,b,c}) }))
+                        == ({ ({1,a}), ({2,b}), ({3,c}) })
 
-        transpose_array( ({ ({1,2,3}) , ({a,b,c}) }) )
-        ergibt: ({ ({1,a}), ({2,b}), ({3,c}) })
+        transpose_array() applied to an alist results in an array of
+        ({ key, data }) pairs, useful if you want to use sort_array()
+        or filter() on the alist.
 
-        Wird transpose_array() auf eine Alist angewendet, ergibt das ein
-        Array von ({ key, data }) in Paaren. Das ist praktisch, wenn
-        sort_array() oder filter() auf die Alist angewendet werden soll.
+EXAMPLES
+        sort_array(transpose_array(({ m_indices(map), m_values(map) })),
+                   lambda(({ 'a, 'b }),
+                          ({ #'<, ({ #'[, 'a, 0 }),
+                                  ({ #'[, 'b, 0}) }) )
 
-BEISPIELE
-        sort_array(transpose_array( ({m_indices(map), m_values(map) }) ),
-                   lambda( ({'a, 'b}),
-                           ({#'<, ({ #'[, 'a, 0}),
-                                  ({ #'[, 'b, 0}) }) ));
-        Dieses Gebilde liefert das Mapping 'map' als Array von ({key, data })
-        Paaren, sortiert nach den Keys.
+        The given mapping 'map' is returned as an array of
+        ({ key, data }) pairs, sorted by the keys.
 
-SIEHE AUCH
+SEE ALSO
         alists(LPC), sort_array(E)
diff --git a/doc/efun/trim b/doc/efun/trim
index d5c58fa..c14e6c0 100644
--- a/doc/efun/trim
+++ b/doc/efun/trim
@@ -1,33 +1,31 @@
 SYNOPSIS
         #include <strings.h>
 
-        string trim(string str)
-        string trim(string str, int where)
-        string trim(string str, int where, string char)
+        string trim(string s)
+        string trim(string s, int where)
+        string trim(string s, int where, int ch)
+        string trim(string s, int where, string ch)
 
-BESCHREIBUNG
-        Entfernt alle vorausgehenden und abschliessenden Zeichen <char> in
-        einem String <str> und gibt den neuen String zurueck.
+DESCRIPTION
+        Remove all leading and trailing characters <ch> from the string
+        <s> and return the new string.
 
-        <char> kann entweder ein oder mehrere Zeichen sein. Wird <char> nicht
-        angegeben, wird standardmaessig der Leerschlag " \t" genutzt.
+        <ch> may be given as a single character, or a string of characters.
+        If <ch> is not given, it defaults to the whitespace " \t".
 
-        Mit <where> kann angegeben werden, wo Zeichen entfernt werden:
+        <where> can be used to modify where the characters are removed:
 
-            TRIM_LEFT   (1):        entfernt alle vorausgehenden
-                                    Zeichen <char>
-            TRIM_RIGHT  (2):        entfernt alle abschliessenden
-                                    Zeichen <char>
-            TRIM_BOTH   (3 oder 0): entfernt sowohl vorausgehende als auch
-                                    abschliessende Zeichen <char>
+          TRIM_LEFT  (1):      remove the leading characters
+          TRIM_RIGHT (2):      remove the trailing characters
+          TRIM_BOTH  (3 or 0): remove both leading and trailing characters
 
-BEISPIELE
-        trim("    1234    ");                       ergibt: "1234"
-        trim("    1234    ", TRIM_RIGHT);           ergibt: "    1234"
-        trim("    1234    ", TRIM_BOTH, " 1");      ergibt: "234"
+EXAMPLES
+        trim("   1234   ")                  --> "1234"
+        trim("   1234   ", TRIM_RIGHT)      --> "   1234"
+        trim("   1234   ", TRIM_BOTH, " 1") --> "234"
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.7.
+HISTORY
+        Introduced in LDMud 3.2.7.
 
-SIEHE AUCH
+SEE ALSO
         regreplace(E)
diff --git a/doc/efun/typeof b/doc/efun/typeof
index b4716b0..888080b 100644
--- a/doc/efun/typeof
+++ b/doc/efun/typeof
@@ -1,15 +1,17 @@
 SYNOPSIS
         #include <lpctypes.h>
 
-        int typeof(mixed arg)
+        int typeof(mixed)
 
-BESCHREIBUNG
-        Gibt einen Code fuer den Typ des Arguments <arg>. Die Typen sind
-        definiert in <lpctypes.h>.
+DESCRIPTION
+        Returns a code for the type of the argument, as defined in
+        <lpctypes.h>.
 
-GESCHICHTE
-        Eingefuehrt in 3.2@63.
+HISTORY
+        Introduced in 3.2@63.
 
-SIEHE AUCH
-        get_type_info(E), intp(E), objectp(E), floatp(E), pointerp(E),
-        closurep(E), symbolp(E), stringp(E), bytesp(E), mappingp(E)
+SEE ALSO
+        get_type_info(E), bytesp(E), clonep(E), closurep(E), coroutinep(E),
+        floatp(E), intp(E), lpctypep(E), lwobjectp(E), mappingp(E),
+        objectp(E), pointerp(E), referencep(E), stringp(E), structp(E),
+        symbolp(E)
diff --git a/doc/efun/unbound_lambda b/doc/efun/unbound_lambda
index 79926e1..eaf715d 100644
--- a/doc/efun/unbound_lambda
+++ b/doc/efun/unbound_lambda
@@ -1,30 +1,24 @@
 SYNOPSIS
-        closure unbound_lambda(mixed *arg, mixed code)
+        closure unbound_lambda(mixed *args, mixed)
 
-BESCHREIBUNG
-        Erzeugt eine Lambda-Closure, die nicht an ein Objekt gebunden ist,
-        entsprechend einer Lambda-Funktion in LISP.
+DESCRIPTION
+        Constructs a lambda closure that is not bound to an object,
+        like lambda function in LISP.
+        The closure cannot contain references to global variables, and
+        all lfun closures are inserted as is, since there is no native
+        object for this closure. You need to bind it before it can be
+        called. Ordinary objects can only bind to themselves, binding
+        to other objects causes a privilege violation(). The point is
+        that previous_object for calls done from inside the closure
+        will reflect the object doing bind_lambda(), and all object /
+        uid based security will also refer to this object.
 
-        Die Closure kann keine Referenz zu globalen Variablen enthalten.
-        Lfun-Closures werden unveraendert in die Closure eingebunden, da es
-        kein Ursprungsobjekt fuer diese Closure gibt.
+        The first argument is an array describing the arguments
+        (symbols) passed to the closure upon evaluation by funcall()
+        or apply(), the second arg forms the code of the closure.
 
-        Bevor die Closure aufgerufen werden kann, muss sie an ein Objekt
-        gebunden werden. Normale Objekte koennen Closures nur an sich selbst
-        binden, das Binden an andere Objekte erzeugt eine Schutzverletzung.
+HISTORY
+        Introduced in 3.2@82.
 
-        Der Punkt ist, dass previous_object() fuer Aufrufe innerhalb der
-        Closure auf das Objekt zeigt, das bind_lambda() aufgerufen hat, und
-        alle objekt- oder uid-basierten Sicherheitschecks beziehen sich
-        auf jenes Objekt.
-
-        Das erste Argument <*arg> ist ein Array, das die Argumente (Symbole)
-        enthaelt, die an die Closure uebergeben werden, wenn diese mit
-        funcall() oder apply() ausgewertet wird. Das zweite Argument <code>
-        enthaelt den Code der Closure.
-
-GESCHICHTE
-        Eingefuehrt in 3.2@82.
-
-SIEHE AUCH
+SEE ALSO
         closures(LPC), lambda(E), apply(E), funcall(E), bind_lambda(E)
diff --git a/doc/efun/unique_array b/doc/efun/unique_array
index 72da0b0..b1c649c 100644
--- a/doc/efun/unique_array
+++ b/doc/efun/unique_array
@@ -1,47 +1,48 @@
 SYNOPSIS
-        <object|lwobject>** unique_array(<object|lwobject> *obj
-                                      , string|closure fun)
-        <object|lwobject>** unique_array(<object|lwobject> *obj
-                                      , string|closure fun, mixed skip)
-        <object|lwobject>** unique_array(<object|lwobject> *obj
-                                      , string|closure fun, mixed extra...
-                                      , mixed skip)
+        <object|lwobject>** unique_array(<object|lwobject> *obarr
+                                        , string|closure fun)
+        <object|lwobject>** unique_array(<object|lwobject> *obarr
+                                        , string|closure fun, mixed skip)
+        <object|lwobject>** unique_array(<object|lwobject> *obarr
+                                        , string|closure fun, mixed extra...
+                                        , mixed skip)
 
-BESCHREIBUNG
-        Gruppiert alle Objekte aus <*obj>, fuer die die Funktion <fun>
-        den gleichen Wert liefert. Wenn <*obj> etwas anderes als Objekte
-        enthaelt, werden diese ignoriert.
+DESCRIPTION
+        Groups objects together for which the separator function returns the
+        same value. obarr should be an array of objects, other types are
+        ignored.
         
-        Ist die Funktion mit Namen angegeben, wird sie in jedem Objekt
-        in <*obj> einmal aufgerufen. Wurden <extra> Argumente
-        gegeben, werden diese an die Funktion bei jedem Aufruf als
-        Parameter uebergeben.
-
-        Ist die Funktion als Closure angegeben, wird sie fuer jedes Objekt
-        in <*obj> einmal aufgerufen, wobei das Objekt als erstes Argument
-        uebergeben wird, gefolgt von etwaiigen <extra> Argumenten.
-
-        Wird ein Argument <skip> angegeben (bei Verwendung von <extra>
-        Argumenten muss dies geschehen), und entspricht <skip> dem
-        Resultat von <separator> fuer ein Element aus <*obj>, so wird
-        dieses Element nicht in das Resultat von unique_array()
-        uebernommen.
+        If the separator function is defined by name, it is searched and
+        called in the objects from <obarr>. If <extra> arguments are given,
+        they are passed to the function as arguments.
         
-        Das Resultat von unique_array() hat die Form:
+        If the separator function is defined as a closure, it will be passed
+        the objects from <obarr> as first argument, with the <extra> arguments
+        (if any) passed following.
+        
+        If the <skip> argument is given (it is required when <extra> arguments
+        are to be used), and the return value from the separator function call
+        matches this value, the object in question will _not_ be included in
+        the returned array. Default value for <skip> is the number 0.
 
-            ({ ({same1:1, same1:2, ... same1:n}),
-               ({same2:1, same2:2, ... same2:n}),
-               ({samem:1, samem:2, ... samem:n}) })
+        The returned array is an array of arrays of objects in the form:
 
-BEISPIELE
-        Um ein Array von Arrays zu erhalten, das alle Benutzer, nach Level
-        gruppiert, enthaelt:
+        ({ ({ Same1:1, Same1:2, ... Same1:N }),
+           ({ Same2:1, Same2:2, ... Same2:N }),
+              ....
+           ({ SameM:1, SameM:2, ... SameM:N }) })
 
-            mixed *arr;
-            arr = unique_array(users(), "_query_level", -1);
+EXAMPLES
+        mixed *arr;
+        arr=unique_array(users(), "_query_level", -1);
 
-        Goetter haben einen Level von -1. Sie werden nicht in arr aufgenommen,
-        weil <skip> == -1.
+        This will return an array of arrays holding all user objects
+        grouped together by their user levels. Wizards have a user
+        level of -1 so they will not appear in the the returned array.
 
-SIEHE AUCH
+HISTORY
+        LDMud 3.3 added the possibility to call closures, and to
+          pass extra arguments to the separator function.
+
+SEE ALSO
         filter(E), map(E)
diff --git a/doc/efun/unmkmapping b/doc/efun/unmkmapping
index 6eedb60..a537f82 100644
--- a/doc/efun/unmkmapping
+++ b/doc/efun/unmkmapping
@@ -1,27 +1,30 @@
 SYNOPSIS
         mixed * unmkmapping(mapping map)
 
-BESCHREIBUNG
-        Wandelt das Mapping <map> in ein Array von Arrays aus, das alle Keys
-        und Werte von <map> enthaelt und gibt dieses Array zurueck.
+DESCRIPTION
+        Take mapping <map> and return an array of arrays with the keys
+        and values from the mapping.
 
-        Das Resultat von unmkmapping() hat die Form ({ keys[], data0[],
-        data1[] ... }), wobei keys[] ein Array aller Keys ist, data0[] ein
-        Array mit allen Werten aus der ersten Spalte, data1[] ein Array mit
-        allen Werten aus der zweiten Spalte etc. Das heisst, dass die
-        Werte von key[x] in data0[x], data1[x] usw. gespeichert sind.
+        The return array has the form ({ keys[], data0[], data1[], ... }),
+        with keys[] being the array of all keys, data0[] the array of
+        all values in the first column, data1[] the array of all values
+        in the second column, etc. In particular, the data for key[x]
+        is stored in data0[x], data1[x], etc.
 
-        unmkmapping() ist die Umkehrfunktion von mkmapping(), sodass gilt:
+        unmkmapping() is inverse to mkmapping(), so that
 
             apply(#'mkmapping, unmkmapping(m)) == m
 
-BEISPIELE
+        holds.
+
+EXAMPLES
         mapping m = ([ 1:10;20, 2:11;21 ]);
-        unmkmapping(m) ergibt: ({ ({1, 2}) , ({10, 11}) , ({20, 21}) })
+        unmkmapping(m)
+          --> returns ({ ({1, 2}), ({ 10, 11 }), ({ 20, 21 }) })
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6.
+HISTORY
+        Introduced in LDMud 3.2.6.
 
-SIEHE AUCH
-        mappings(LPC), mappingp(E), m_indices(E), m_values(E), m_delete(E),
-        sizeof(E), widthof(E).
+SEE ALSO
+        mappings(LPC), mappingp(E), m_indices(E), m_values(E),
+        m_delete(E), sizeof(E), widthof(E).
diff --git a/doc/efun/unquote b/doc/efun/unquote
index 9e8fad0..38628c4 100644
--- a/doc/efun/unquote
+++ b/doc/efun/unquote
@@ -1,17 +1,17 @@
 SYNOPSIS
-        quoted_array unquote(quoted_array arr)
-        string|symbol unquote(symbol sym)
+        quoted_array  unquote(quoted_array)
+        string|symbol unquote(symbol)
 
-BESCHREIBUNG
-        Entfernt ein Quote von einem gequoteten Array oder Symbol. Wenn das
-        letzte Quote von einem Symbol entfernt wird, entsteht ein String.
+DESCRIPTION
+        Removes a quote from quoted arrays and symbols. When the
+        last quote from a symbol is removed, the result is a string.
 
-BEISPIELE
-        unquote('foo);              ergibt: "foo"
-        unquote( '({1,2,3}) );      ergibt: ({1,2,3})
+EXAMPLES
+        unquote('foo) -> "foo"
+        unquote( '({1,2,3}) ) -> ({1,2,3})
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
+HISTORY
+        Introduced in LDMud 3.2.9 .
 
-SIEHE AUCH
+SEE ALSO
         quote(E), symbolp(E)
diff --git a/doc/efun/unshadow b/doc/efun/unshadow
index 0131a71..3d70bf4 100644
--- a/doc/efun/unshadow
+++ b/doc/efun/unshadow
@@ -1,10 +1,9 @@
 SYNOPSIS
-        void unshadow()
+        void unshadow(void)
 
-BESCHREIBUNG
-        Das aufrufende Objekt wird als Shadow von allen anderen Objekten
-        entfernt, denen es uebergeworfen war. Wenn dem aufrufenden Objekt
-        selbst ein Shadow uebergeworfen war, wird dieser entfernt.
+DESCRIPTION
+        The calling object stops shadowing any other object.
+        If the calling object is being shadowed, that is also stopped.
 
-SIEHE AUCH
+SEE ALSO
         shadow(E), query_shadowing(E)
diff --git a/doc/efun/upper_case b/doc/efun/upper_case
index a63eef0..b553ad2 100644
--- a/doc/efun/upper_case
+++ b/doc/efun/upper_case
@@ -1,12 +1,12 @@
 SYNOPSIS
         string upper_case(string str)
 
-BESCHREIBUNG
-        Wandelt alle Zeichen in <str> in Grossbuchstaben um und gibt das
-        Resultat zurueck.
+DESCRIPTION
+        Convert all characters in str to upper case, and return the
+        new string.
 
-BEISPIELE
-        upper_case("Heya!")     ergibt: "HEYA!"
+EXAMPLES
+        upper_case("Heya!") -> "HEYA!"
 
-SIEHE AUCH
+SEE ALSO
         capitalize(E), lower_case(E)
diff --git a/doc/efun/users b/doc/efun/users
index 05ec115..bc5da96 100644
--- a/doc/efun/users
+++ b/doc/efun/users
@@ -1,5 +1,5 @@
 SYNOPSIS
-        object * object users()
+        object * users(void)
 
-BESCHREIBUNG
-        Liefert ein Array, das alle interaktiven Benutzer enthaelt.
+DESCRIPTION
+        Return an array containing all interactive users.
diff --git a/doc/efun/utime b/doc/efun/utime
index 1566019..7f10e33 100644
--- a/doc/efun/utime
+++ b/doc/efun/utime
@@ -1,22 +1,21 @@
 SYNOPSIS
         int * utime()
 
-BESCHREIBUNG
-        Liefert ein Array der Zeit, die seit dem 01. Januar 1970,
-        00:00:00 GMT vergangen ist, mit einer Genauigkeit in Mikrosekunden
-        (0.000001 Sekunden).
+DESCRIPTION
+         Return the time since 1. Jan 1970, 00:00:00 GMT in microsecond
+         precision.
 
-        Zurueck gegeben wird ein Array der Form:
-            int[0]: Anzahl Sekunden seit Beginn der Zeitrechnung
-            int[1]: Anzahl Mikrosekunden innerhalb der aktuellen Sekunde
+         Return is an array:
+           int[0]: number of seconds elapsed
+           int[1]: number of microseconds within the current second.
 
-BEISPIELE
+EXAMPLES
         write(ctime(utime())+"\n");
 
-        Gibt das aktuelle Datum und Zeit zurueck.
+        Print out the current date and time.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.9.
+HISTORY
+        Introduced in LDMud 3.2.9.
 
-SIEHE AUCH
+SEE ALSO
         ctime(E), gmtime(E), localtime(E), time(E)
diff --git a/doc/efun/variable_exists b/doc/efun/variable_exists
index 682490e..d940c41 100644
--- a/doc/efun/variable_exists
+++ b/doc/efun/variable_exists
@@ -1,29 +1,29 @@
 SYNOPSIS
         #include <functionlist.h>
 
-        string variable_exists(string str [, int flags])
-        string variable_exists(string str, object|lwobject obj [, int flags])
+        string variable_exists(string str)
+        string variable_exists(string str, int flags)
+        string variable_exists(string str, object|lwobject ob)
+        string variable_exists(string str, object|lwobject ob, int flags)
 
-BESCHREIBUNG
-        Sucht eine Varialbe <str> in this_object() oder (falls angegeben)
-        im Objekt <obj>.
+DESCRIPTION
+        Look up a variable <str> in the current object, respectively
+        in the object <ob>.
 
-        Das Resultat ist der Name des Programms, in dem die Variable definiert
-        ist. Das kann entweder object_name(obj) sein oder der Name eines
-        geerbten Programms. Wenn sich der Treiber nicht im Compat-Modus
-        befindet, beginnt der zurueck gelieferte Name immer mit '/'.
+        The result is the name of the program the variable is defined
+        in. This can be either object_name(ob), or the name of an
+        inherited program. If !compat mode, the returned name always
+        begins with a '/'.
 
-        Wird <flags> NAME_HIDDEN gesetzt, so liefert variable_exists() auch
-        Informationen ueber Variablen vom Typ "static" und "protected" in
-        anderen Objekten. Es ist nicht moeglich, Informationen ueber "private"
-        deklarierte Variablen zu erhalten.
+        If <flags> can be passed as NAME_HIDDEN to return information
+        about static and protected variables in other objects. It is
+        not possible to return information about private variables.
 
-        Wird die Variable nicht gefunden (weil sie nicht existiert oder weil
-        sie fuer das aufrufende Objekt nicht sichtbar sind), wird 0 zurueck
-        geliefert.
+        If the variable cannot be found (because it doesn't exist or
+        it is not visible to the caller), the result is 0.
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.10.
+HISTORY
+        Introduced in LDMud 3.2.10.
 
-SIEHE AUCH
+SEE ALSO
         function_exists(E), variable_list(E)
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)
diff --git a/doc/efun/walk_mapping b/doc/efun/walk_mapping
index 3dad60c..1d36812 100644
--- a/doc/efun/walk_mapping
+++ b/doc/efun/walk_mapping
@@ -1,24 +1,22 @@
 SYNOPSIS
-        void walk_mapping(mapping map, string fun, mixed extra, ...)
-        void walk_mapping(mapping map, string fun, string|object obj,
-                                                      mixed extra, ...)
-        void walk_mapping(mapping map, closures cl, mixed extra, ...)
+        void walk_mapping(mapping m, string func, mixed extra,...)
+        void walk_mapping(mapping m, string func, string|object ob
+                                                , mixed extra,...)
+        void walk_mapping(mapping m, closure cl, mixed extra,...)
 
-BESCHREIBUNG
-        Ruft obj->fun(key, &value1, ... &valueN, extra, ...) fuer jeden Key
-        im Mapping <map> auf bzw. wendet die Closure <cl> auf jeden Key
-        im Mapping <map> an. Dies Keys werden als Wert uebergeben, die Values
-        als Referenz, entsprechend koennen sie in der Funktion veraendert
-        werden.
+DESCRIPTION
+        Calls ob->func(key, &value1, ..., &valueN, extra,...) resp. applies
+        the closure to every entry in the mapping. The keys are passed
+        by value, the values are passed by reference and can be
+        changed in the function.
 
-        Es kann eine beliebige Anzahl zusaetzlicher Argumente <extra>
-        uebergeben werden.
+        Any number of extra arguments is accepted and passed.
 
-        Wird <obj> weggelassen oder enthaelt es weder einen String noch ein
-        Objekt, wird standardmaessig this_object() verwendet.
+        If <ob> is omitted, or neither a string nor an object, it
+        defaults to this_object().
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2@61.
+HISTORY
+        Introduced in 3.2@61
 
-SIEHE AUCH
+SEE ALSO
         map(E), filter(E)
diff --git a/doc/efun/widthof b/doc/efun/widthof
index 6312d3d..a16fa14 100644
--- a/doc/efun/widthof
+++ b/doc/efun/widthof
@@ -1,16 +1,17 @@
 SYNOPSIS
         int widthof(mapping map)
 
-BESCHREIBUNG
-        Liefert die Anzahl Values pro Key im Mapping <map>. Wenn <map> 0 ist,
-        ist das Resultat 0.
+DESCRIPTION
+        Returns the number of values per key of mapping <map>.
+        If <map> is 0, the result is 0.
 
-BEISPIELE
-        mapping map = (["foo" : 1;2]);
-        widthof(map)    ergibt 2.
+EXAMPLES
+        mapping m = ([ "foo": 1;2 ]);
+        widthof(m)  --> returns 2
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.2.6.
+HISTORY
+        Introduced in LDMud 3.2.6.
 
-SIEHE AUCH
-        sizeof(E), mkmapping(E), m_reallocate(E), m_values(E), unmkmapping(E)
+SEE ALSO
+        sizeof(E), mkmapping(E), m_reallocate(E), m_values(E),
+        unmkmapping(E)
diff --git a/doc/efun/wizlist_info b/doc/efun/wizlist_info
index 91c1bae..674ec9a 100644
--- a/doc/efun/wizlist_info
+++ b/doc/efun/wizlist_info
@@ -1,39 +1,38 @@
-GESCHUETZT
 SYNOPSIS
         #include <wizlist.h>
 
         mixed * wizlist_info()
 
-BESCHREIBUNG
-        Liefert ein Array mit Eintraegen aus der Wizlist (der internen
-        Goetterliste). Die Benutzung muss durch das Masterobjekt erlaubt
-        werden.
+DESCRIPTION
+        Returns an array with the interesting entries of the wizlist.
+        Needs to be privileged by the master object.
 
-        Das Resultat ist ein Array mit einem Eintrag fuer jeden Gott (uid).
-        Jeder Eintrag enthaelt wiederum ein Array mit folgenden Elementen:
+        The result is an array with one entry for every wizard (uid).
+        Every entry is an array itself:
 
-            string  w[WL_NAME]          Name des Gottes
-            int w[WL_COMMANDS]          Gewichtete Anzahl Kommandos, die von
-                                        Objekten dieses Gottes ausgefuehrt
-                                        wurden
-            int w[WL_COSTE]             Gewichtete Summe der Eval-Kosten
-            int w[WL_GIGACOST]          Gewichtete Summe der Eval-Kosten
-            int W[WL_TOTAL_COST]        Totale Summe der Eval-Kosten
-            int w[WL_TOTAL_GIGACOST]    Totale Summe der Eval-Kosten
-            int w[WL_HEART_BEAT]        Gewichtete Anzahl der heat_beat()s
-            int w[WL_CALL_OUT]          Reserviert fuer call_out()s
-                                        (bisher nicht implementiert)
-            int w[WL_ARRAY_TOTAL]       Totale Groesse aller Arrays in
-                                        Elementen
-            mixed w[WL_EXTRA]           Die eigentliche Wizlist-Info
+          string w[WL_NAME]        = Name of the wizard.
+          int    w[WL_COMMANDS]    = Weighted number of commands execute by
+                                     objects of this wizard.
+          int    w[WL_COST],
+          int    w[WL_GIGACOST]       = Weighted sum of eval_costs.
+          int    w[WL_TOTAL_COST],
+          int    w[WL_TOTAL_GIGACOST] = Total sum of eval_costs.
+          int    w[WL_HEART_BEATS]   = Weighted count of heart_beats.
+          int    w[WL_CALL_OUT]      = Reserved for call_out() (unused yet).
+          int    w[WL_ARRAY_TOTAL]   = Total size of arrays in elements.
+          int    w[WL_MAPPING_TOTAL] = Total size of mappings in elements.
+          int    w[WL_STRUCT_TOTAL]  = Total size of structs in elements.
+          mixed  w[WL_EXTRA]         = Extra wizlist-info if set.
 
-        Die "gewichteten" Werte verfallen pro Stunde um 10%.
+        The 'weighted' entries decay every hour by 10%.
 
-GESCHICHTE
-        LDMud 3.2.10 trennte das alte WL_EVAL_COST in WL_COST und WL_GIGACOST,
-            um laengeren Uptimes gerecht zu werden. Ausserdem wurde
-            WL_TOTAL_COST und WL_TOTAL_GIGACOST eingefuehrt.
+HISTORY
+        LDMud 3.2.10 split the old WL_EVAL_COST into WL_COST and WL_GIGACOST
+          to accomodate for longer uptimes, and introduced
+          WL_TOTAL_COST/WL_TOTAL_GIGACOST.
+        LDMud 3.3.174 added WL_MAPPING_TOTAL.
+        LDMud 3.3.? added WL_STRUCT_TOTAL.
 
-SIEHE AUCH
-        privilege_violation(M), set_extra_wizinfo_size(E),
+SEE ALSO
+        privilege_violation(M), set_extra_wizinfo_size(E)
         get_extra_wizinfo(E), set_extra_wizinfo(E)
diff --git a/doc/efun/write b/doc/efun/write
index 276e35d..7e3af94 100644
--- a/doc/efun/write
+++ b/doc/efun/write
@@ -1,32 +1,36 @@
-VERALTET
 SYNOPSIS
         void write(mixed msg)
 
-BESCHREIBUNG
-        Gibt etwas an den aktuellen Benutzer aus. Was genau ausgegeben wird,
-        haengt vom Typ der Meldung <msg> ab.
+DESCRIPTION
+        Write out something to the current user. What exactly will
+        be printed in the end depends of the type of msg.
 
-        Folgende Ausgaben erfolgen abhaengig vom Typ von <msg>:
-            String oder Zahl    <msg> wird ausgegeben
-            Objekt              "OBJ("+object_name((object)msg)+")"
-            Array               "<ARRAY>"
-            Mapping             "<MAPPING>"
-            Closure             "<CLOSURE>"
+        If it is a string or a number then just prints it out.
 
-        Wenn write() von einem Kommando eines Lebewesens aufgerufen wird,
-        dieses Lebewesen aber nicht interaktiv ist, und <msg> einen String
-        enthaelt, wird im Lebewesen die Lfun catch_tell() mit <msg> als
-        Argument aufgerufen.
+        If it is an object then the object will be printed in the
+        form: "OBJ("+object_name((object)mix)+")"
 
-BEISPIELE
+        If it is an array just "<ARRAY>" will be printed.
+        If it is a mapping just "<MAPPING>" will be printed.
+        If it is a closure just "<CLOSURE>" will be printed.
+
+        If the write() function is invoked by a command of an living
+        but not interactive object and the given argument is a string
+        then the lfun catch_tell() of the living will be invoked with
+        the message as argument.
+
+EXAMPLES
         write("Hello world!\n");
-        Dies gibt den String an den Benutzer aus.
+
+        Just print out a string.
 
         write(this_player());
-        Dies erzeugt etwas wie: "OBJ(/std/player#1234)".
 
-        write( ({"blubb"}) );
-        Dies erzeugt "<ARRAY>".
+        This will print out something like "OBJ(std/player#1234)".
 
-SIEHE AUCH
+        write( ({ "blub" }) );
+
+        Will print out "<ARRAY>".
+
+SEE ALSO
         say(E), tell_object(E), tell_room(E), catch_tell(A)
diff --git a/doc/efun/write_bytes b/doc/efun/write_bytes
index b8b6b0a..2308b77 100644
--- a/doc/efun/write_bytes
+++ b/doc/efun/write_bytes
@@ -1,15 +1,15 @@
 SYNOPSIS
         int write_bytes(string file, int start, bytes str)
 
-BESCHREIBUNG
-        Schreibt die Bytefolge <str> ins File <file> und ueberschreibt dabei die
-        alten Bytes ab Position <start>. Wenn <start> eine negative Zahl ist,
-        werden die Zeichen vom Ende von <file> an gezaehlt. write_bytes()
-        liefert 1 bei Erfolg, 0 bei Misserfolg.
+DESCRIPTION
+        Write string str to file file by overwriting the old bytes at
+        position start. If start is a negative value then it will be
+        counted from the end of the file. The file will not be
+        appended, instead the function will be aborted. Returns 1 for
+        success 0 for failure during execution.
 
-ANMERKUNGEN
-        Seit Version 3.2@232 ist write_bytes() in der Lage, Zeichen
-        aus <str> ans File <file> anzuhaengen.
+        Note: since version 3.2@232, write_bytes() is able to append
+        to the file.
 
-SIEHE AUCH
+SEE ALSO
         save_object(E), write_file(E)
diff --git a/doc/efun/write_file b/doc/efun/write_file
index f268eb4..a33ea87 100644
--- a/doc/efun/write_file
+++ b/doc/efun/write_file
@@ -3,21 +3,21 @@
         int write_file(string file, string str, int flags)
         int write_file(string file, string str, int flags, string encoding)
 
-BESCHREIBUNG
-        Haengt den String <str> an die Datei <file> an. Liefert 1 bei Erfolg,
-        0 bei Misserfolg.
+DESCRIPTION
+        Append the string <str> to the file <file>. Returns 1 for success
+        and 0 if any failure occurred.
 
-        If <flags> = 1, dann wird die Datei vor dem eigentlichen
-        Schreiben geloescht; das 'anhaengen' wird so effektiv ein
-        'ueberschreiben'. Defaultwert fuer <flags> ist 0.
+        If <flags> is 1, the file is removed first; thus making the
+        'append' effectively an 'overwrite'. Default for <flags> is 0.
 
-        Mit <encoding> kann man den Zeichensatz angeben, welcher beim Schreiben
-        in die Datei verwendet werden soll. Falls er nicht angegeben oder 0 ist,
-        so wird der Hook H_FILE_ENCODING verwendet.
+        <encoding> denotes the encoding to be used for saving the string
+        in the file. If it is not given or 0, the H_FILE_ENCODING driver
+        hook will be used.
 
-GESCHICHTE
-        LDMud 3.6.0 fuegte den <encoding>-Parameter hinzu.
+HISTORY
+        LDMud 3.3.523 added the <flags> parameter.
+        LDMud 3.6.0 added the <encoding> parameter.
 
-SIEHE AUCH
+SEE ALSO
         file_size(E), write_bytes(E), write_file(E), read_file(E),
-        read_bytes(E), rm(E), hooks(C)
+        read_bytes(E), rm(E), get_dir(E), hooks(C)
diff --git a/doc/efun/xml_generate b/doc/efun/xml_generate
index d210d5e..5502f9c 100644
--- a/doc/efun/xml_generate
+++ b/doc/efun/xml_generate
@@ -5,74 +5,72 @@
 
         string xml_generate(mixed *xml)
 
-BESCHREIBUNG
-        Wandelt das uebergebene <xml>-Array in einen XML-konformen String um,
-        sofern moeglich. Der <xml>-Parameter muss folgende Struktur haben:
+DESCRIPTION
+        Converts the given <xml> array into an XML conform string, if 
+        possible. The <xml> argument array must have the following structure.
 
-        Er muss Tag-Arrays mit folgenden drei Elementen enthalten:
+        It must contain tag arrays of three elements, with the following 
+        indices:
 
             string XML_TAG_NAME
-                Der Name des XML-Tags.
+                The name of the XML tag.
 
             mapping XML_TAG_ATTRIBUTES
-                Alle Attribute dieses XML-Tags als ein Mapping mit dem
-                jeweiligen Attributnamen als Schluessel und den Attributwert
-                als der dazugehoerige String.
-                
-                Falls ein XML-Tag keine Attribute enthaelt, so ist dieses
-                Element 0.
+                All attributes given to the XML tag as mapping where the key
+                is the attribute name and the value is its string value. 
+
+                If the xml tag does not contain any attributes, this element
+                is set 0:
 
             mixed * XML_TAG_CONTENTS
-                Der Inhalt des XML-Tags als ein Array. Dieses Array kann
-                entweder Strings (reine Zeichendaten) oder Arrays
-                als weitere Tags enthalten, welche wiederum diese
-                drei Elemente besitzen.
-                
-                Falls das XML-Tag nichts enthaelt, so ist dieses Element 0.
+                The contents of this xml tag as array. This array may 
+                contain either strings, or arrays of sub-tags again with 
+                three elements (see example)
 
-        Falls der uebergebe Parameter nicht diese Struktur besitzt, so wird
-        eine Fehlermeldung ausgegeben. Ansonsten ist ein gueltiger XML-String
-        das Resultat.
+                If the xml tag does not contain anything, the element is
+                set 0.
 
-        Diese Funktion ist nur verfuegbar, wenn der Driver mit Iksemel-
-        Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __XML_DOM__ definiert.
+        In case the parameter does not follow these rules, errors are raised.
+        The method returns a valid XML string otherwise.
+
+        The function is available only if the driver is compiled with Iksemel
+        support. In that case, __XML_DOM__ is defined.
 
 
-BEISPIELE
+EXAMPLES
         xml_generate(({ "abc", 0, 0 })) -> "<abc/>"
         xml_generate(({ "abc", ([ "xyz" : "cde" ]), 0 })) -> "<abc xyz="cde"/>"
 
-        mixed* xml = ({ "buch"
-                      , ([ "sprache" : "deutsch" ])
-                      , ({ ({ "titel"
+        mixed *xml = ({ "book"
+                      , ([ "language" : "common" ])
+                      , ({ ({ "title"
                             , 0
-                            , ({ "Dies ist der Titel" })
+                            , ({ "This is a title" })
                            })
-                         , ({ "kapitel"
+                         , ({ "chapter"
                             , 0
-                            , ({ "Dies ist ein Kapitel" })
+                            , ({ "This is a chapter" })
                            })
-                         , ({ "kapitel"
+                         , ({ "chapter"
                             , 0
-                            , ({ "Das soll "
+                            , ({ "We want "
                                , ({ "b"
                                   , 0 
-                                  , ({ "fettgedruckt" })
+                                  , ({ "bold" })
                                  })
-                               , " sein."
+                               , "here"
                               })
                            })
                         })
                      })
 
         xml_generate(xml)
-            -> "<buch sprache="deutsch"><titel>Dies ist der Titel</titel>"
-               "<kapitel>Dies ist ein Kapitel</kapitel><kapitel>Das soll "
-               "<b>fettgedruckt</b> sein.</kapitel></buch>"
+            -> "<book language="common"><title>This is the title</title>"
+               "<chapter>This is a chapter</chapter><chapter>We want "
+               "<b>bold</b> here.</chapter></book>"
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.3.718.
+HISTORY
+        Added in LDMud 3.3.718.
 
-SIEHE AUCH
+SEE ALSO
         xml_parse(E)
diff --git a/doc/efun/xml_parse b/doc/efun/xml_parse
index 130063b..8c243fc 100644
--- a/doc/efun/xml_parse
+++ b/doc/efun/xml_parse
@@ -3,77 +3,75 @@
 SYNOPSIS
         #include <xml.h>
 
-        mixed* xml_parse(string xml)
+        mixed * xml_parse(string xml)
 
-BESCHREIBUNG
-        Parst den angegebenen String <xml> als XML. Der String darf nur ein
-        einziges Root-Tag enthalten, weitere Root-Tags werden ignoriert.
+DESCRIPTION
+        Parses the given string <xml> as a XML conform string. The string must
+        have only one root tag, subsequent root tags are ignored.
 
-        Falls der String XML-konform war, so wird ein Array mit drei Elementen
-        zurueckgegeben, dessen Elemente folgendermassen definiert sind:
+        If the xml string is correct, an array is of three elements is 
+        returned, where as the following indices are defined:
 
             string XML_TAG_NAME
-                Der Name des XML-Tags.
+                The name of the XML tag.
 
             mapping XML_TAG_ATTRIBUTES
-                Alle Attribute dieses XML-Tags als ein Mapping mit dem
-                jeweiligen Attributnamen als Schluessel und den Attributwert
-                als der dazugehoerige String.
-                
-                Falls ein XML-Tag keine Attribute enthaelt, so ist dieses
-                Element 0.
+                All attributes given to the XML tag as mapping where the key
+                is the attribute name and the value is its string value. 
+
+                If the xml tag does not contain any attributes, this element
+                is set 0.
 
             mixed * XML_TAG_CONTENTS
-                Der Inhalt des XML-Tags als ein Array. Dieses Array kann
-                entweder Strings (reine Zeichendaten) oder Arrays
-                als weitere Tags enthalten, welche wiederum diese
-                drei Elemente besitzen.
-                
-                Falls das XML-Tag nichts enthaelt, so ist dieses Element 0.
+                The contents of this xml tag as array. This array may 
+                contain either strings, or arrays of sub-tags again with 
+                three elements (see example)
 
-        Falls der XML-String nicht wohlgeformt ist oder falls nicht genug
-        Speicher zur Verfuegung steht, wird eine Fehlermeldung ausgegeben.
+                If the xml tag does not contain anything, the element is
+                set 0.
 
-        Diese Funktion ist nur verfuegbar, wenn der Driver mit Iksemel-
-        Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
-        __XML_DOM__ definiert.
+        If the XML string is not well formed, or there is not enough memory to 
+        parse the whole XML structure into the array an error is raised.
+
+        The function is available only if the driver is compiled with Iksemel
+        support. In that case, __XML_DOM__ is defined. 
 
 
-BEISPIELE
+EXAMPLES
         xml_parse("<abc/>")           -> ({ "abc", 0, 0 })
         xml_parse("<abc xyz="cde"/>") -> ({ "abc", ([ "xyz" : "cde" ]), 0 })
 
-        xml_parse("<buch sprache="deutsch">" + 
-                  "    <titel>Dies ist der Titel</titel>" + 
-                  "    <kapitel>Dies ist ein Kapitel</kapitel>" + 
-                  "    <kapitel>Das soll <b>fettgedruckt</b> sein.</kapitel>" +
-                  "</buch>")
+        xml_parse("<book language="common">" + 
+                  "    <title>This is the title</title>" + 
+                  "    <chapter>This is a chapter</chapter>" + 
+                  "    <chapter>We want <b>bold</b> here.</chapter>" +
+                  "</book>")
 
-            -> ({ "buch"
-                , ([ "sprache" : "deutsch" ])
-                , ({ ({ "titel"
+            -> ({ "book"
+                , ([ "language" : "common" ])
+                , ({ ({ "title"
                       , 0
-                      , ({ "Dies ist der Titel" })
+                      , ({ "This is a title" })
                      })
-                   , ({ "kapitel"
+                   , ({ "chapter"
                       , 0
-                      , ({ "Dies ist ein Kapitel" })
+                      , ({ "This is a chapter" })
                      })
-                   , ({ "kapitel"
+                   , ({ "chapter"
                       , 0
-                      , ({ "Dies soll "
+                      , ({ "We want "
                          , ({ "b"
                             , 0 
-                            , ({ "fettgedruckt" })
+                            , ({ "bold" })
                            })
-                         , "sein."
+                         , "here"
                         })
                      })
                   })
                })
 
-GESCHICHTE
-        Eingefuehrt in LDMud 3.3.718.
+HISTORY
+        Added in LDMud 3.3.718.
 
-SIEHE AUCH
+SEE ALSO
         xml_generate(E)
diff --git a/doc/efun/xor_bits b/doc/efun/xor_bits
index 885afa8..66d9fb3 100644
--- a/doc/efun/xor_bits
+++ b/doc/efun/xor_bits
@@ -1,19 +1,22 @@
 SYNOPSIS
         string xor_bits(string str1, string str2)
 
-BESCHREIBUNG
-        <str1> und <str2> sind beiden Bitstrings. Das Resultat von xor_bits()
-        ist ein Bitstring mit dem binaeren XOR von <str1> und <str2>, also
-        ein String, in dem ein Bit nur gesetzt ist, wenn es entweder in <str1>
-        oder in <str2> vorkommt, nicht aber in beiden.
+DESCRIPTION
+        <str1> and <str2> are both bitstrings. The result of the function
+        is a bitstring with the binary-xor of <str1> and <str2>,
+        ie. a string in which a bit is set only if the corresponding
+        bits in either <str1> or <str2> (but not both) is set.
 
-BEISPIELE
+EXAMPLES
         string s1, s2, s3;
-        s1 = set_bit("", 3); s1 = set_bit(s1, 15);  -> s1 ist "( ("
-        s2 = set_bit("", 3); s2 = set_bit(s2, 4);   -> s2 ist "8"
-        s3 = xor_bits(s1, s2);
-        -> s3 ist "0 (", es sind also das 4. und das 15. Bit gesetzt.
 
-SIEHE AUCH
-        clear_bit(E), set_bit(E), test_bit(E), next_bit(E), last_bit(E)
+        s1 = set_bit("", 3); s1 = set_bit(s1, 15);  -> s1 is "( ("
+        s2 = set_bit("", 3); s2 = set_bit(s2, 4);   -> s2 is "8"
+
+        s3 = xor_bits(s1, s2);
+
+        -> s3 is now "0 (", ie. a bitstring with bits 4 and 15 set.
+
+SEE ALSO
+        clear_bit(E), set_bit(E), test_bit(E), next_bit(E), last_bit(E),
         count_bits(E), and_bits(E), or_bits(E), invert_bits(E), copy_bits(E)
