diff --git "a/doc/efun/\133\135" "b/doc/efun/\133\135"
index a59696a..afbc0fe 100644
--- "a/doc/efun/\133\135"
+++ "b/doc/efun/\133\135"
@@ -2,8 +2,8 @@
         mixed  arr[index];
         int    str[index];
 
-        *mixed arr[from .. to];
-        string str[from .. to];
+        mixed * arr[from..to];
+        string  str[from..to];
 
 BESCHREIBUNG
         Liefert ein Element aus einem Array oder String (erste Form), oder
@@ -52,7 +52,7 @@
         str[1..2] = "bar"               -> str == "tbart"
         str[1..2] = ""                  -> str == "tt"
 
-AENDERUNGEN
+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
diff --git a/doc/efun/abs b/doc/efun/abs
index 586beea..d242124 100644
--- a/doc/efun/abs
+++ b/doc/efun/abs
@@ -1,6 +1,6 @@
 SYNOPSIS
-        int   abs (int arg)
-        float abs (float arg)
+        int   abs(int arg)
+        float abs(float arg)
 
 BESCHREIBUNG
         Liefert den Betrag des Argumentes <arg>.
@@ -12,7 +12,7 @@
         abs( 11    )  11
         abs( -1.974)   1.974
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.6.
 
 SIEHE AUCH
diff --git a/doc/efun/acos b/doc/efun/acos
index 2487958..84bad82 100644
--- a/doc/efun/acos
+++ b/doc/efun/acos
@@ -2,7 +2,7 @@
         float acos(float)
 
 BESCHREIBUNG
-        Liefert der Arkuskosinus des Argumentes.
+        Liefert den Arkuskosinus des Argumentes.
 
 SIEHE AUCH
         sin(E), asin(E), cos(E), tan(E), atan(E), atan2(E)
diff --git a/doc/efun/all_environment b/doc/efun/all_environment
index 993f493..3da7cb6 100644
--- a/doc/efun/all_environment
+++ b/doc/efun/all_environment
@@ -1,9 +1,6 @@
 SYNOPSIS
-        object *all_environment();
-        object *all_environment(object ob);
-
-ARGUMENTE:
-        ob - das Objekt, dessen environment()s gewuenscht werden
+        object * all_environment()
+        object * all_environment(object ob)
 
 BESCHREIBUNG
         Gibt ein Array mit allen Umgebungen des Objekts <ob> zurueck.
@@ -13,21 +10,13 @@
         Wenn <o> keine Umgebung hat oder zerstoert wurde, wird 0 zurueck
         gegeben.
 
-BEMERKUNGEN:
-        Das zurueckgegebene Array ist so angelegt, dass die innerste Umgebung
-        am Anfang des Arrays steht, und die aeusserste Umgebung am Ende.
+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.
 
-BEISPIEL
-        (Die gesuchte Fackel befindet sich in einem Behaelter, den Wargon bei
-        sich traegt. Wargon steht in seinem Workroom.)
-
-        ob = all_environment(find_object("/obj/fackel#32"));
-        => ob = ({[+wueste/durian/behaelter#31],[/magier:wargon],[~/workroom]})
-
-AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.6. Ein Vorschlag von TubMud.
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.6. Ein Vorschlag von Tubmud.
 
 SIEHE AUCH
         environment(E), all_inventory(E)
-
-7.Feb 2007 Gloinson
\ No newline at end of file
diff --git a/doc/efun/allocate b/doc/efun/allocate
index c591c5e..cf74429 100644
--- a/doc/efun/allocate
+++ b/doc/efun/allocate
@@ -1,12 +1,12 @@
 SYNOPSIS
-        *mixed allocate(int size);
-        *mixed allocate(int size, mixed init_value);
+        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
-        Alloziert ein Array von <size> Elementen. Die Anzahl Elemente muss
+        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
@@ -18,11 +18,11 @@
         Arrays.
 
         Heute wird allocate() kaum mehr benoetigt, weil Arrays mit dem
-        +-Operator addiert werden koennen und mit dem ({})-Operator
-        initialisiert. Der einzige Nutzen der Funktion ist, grosse leere
+        +-Operator addiert und mit dem ({})-Operator initialisiert werden
+        koennen. Der einzige Nutzen der Funktion ist, grosse leere
         oder initialisierte Arrays zu erzeugen.
 
-BEISPIEL
+BEISPIELE
         string *buffer;
         buffer = allocate(50);
         buffer = allocate(50, "");
@@ -30,7 +30,7 @@
         buffer = allocate( ({ 2, 3 }) )
           --> ({ ({ 0, 0, 0 }), ({ 0, 0, 0 }) })
 
-AENDERUNGEN
+GESCHICHTE
         LDMud 3.2.9 fuehrte den Anfangswert <init_value> und die
             Initialisierung von mehrdimensionalen Arrays ein.
 
diff --git a/doc/efun/and_bits b/doc/efun/and_bits
index f066d61..d1d89a3 100644
--- a/doc/efun/and_bits
+++ b/doc/efun/and_bits
@@ -1,5 +1,5 @@
 SYNOPSIS
-        string and_bits(string str1, string str2);
+        string and_bits(string str1, string str2)
 
 BESCHREIBUNG
         <str1> und <str2> seien beides Bitstrings. Das Resultat von and_bits()
@@ -7,7 +7,7 @@
         heisst ein String, in dem ein Bit nur gesetzt ist, wenn das
         entsprechende Bit in beiden Strings <str1> und <str2> gesetzt ist.
 
-BEISPIEL
+BEISPIELE
         string s1, s2, s3;
 
         s1 = set_bit("", 3); s1 = set_bit(s1, 15);  -> s1 is "( ("
diff --git a/doc/efun/apply b/doc/efun/apply
index aaa30a5..d7c891e 100644
--- a/doc/efun/apply
+++ b/doc/efun/apply
@@ -1,5 +1,5 @@
 SYNOPSIS
-        mixed apply(closure cl, mixed arg, ...);
+        mixed apply(closure cl, mixed arg, ...)
 
 BESCHREIBUNG
         Wertet die Closure <cl> aus. Wenn <cl> keine Closure ist, wird <cl>
@@ -26,7 +26,7 @@
         Eine wichtige Anwendung von apply() ist das Auswerten des
         Array-Arguments in "varargs" Funktionen.
 
-AENDERUNGEN
+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.
diff --git a/doc/efun/atan b/doc/efun/atan
index 105b748..f8242b5 100644
--- a/doc/efun/atan
+++ b/doc/efun/atan
@@ -4,7 +4,7 @@
 BESCHREIBUNG
         Liefert den Arkustangens des Argumentes.
 
-AENDERUNGEN
+GESCHICHTE
         LDMud 3.2.9: Ganzzahlen (Integers) als Argument hinzugefuegt.
 
 SIEHE AUCH
diff --git a/doc/efun/atan2 b/doc/efun/atan2
index e4cd78a..e1c939a 100644
--- a/doc/efun/atan2
+++ b/doc/efun/atan2
@@ -1,5 +1,5 @@
 SYNOPSIS
-        float atan2 (int|float y, int|float x)
+        float atan2(int|float y, int|float x)
 
 BESCHREIBUNG
         Liefert den Winkel der Polarkoordinaten des Punktes (x, y) im
@@ -9,7 +9,7 @@
         Parameter-Liste, die die Abfolge in der Steigungs-Winkel-Umrechnung
         atan(y / x) widerspiegelt.
 
-AENDERUNGEN
+GESCHICHTE
         LDMud 3.2.9: Ganzzahlen (Integers) als Argumente hinzugefuegt.
 
 SIEHE AUCH
diff --git a/doc/efun/attach_erq_demon b/doc/efun/attach_erq_demon
index 032b13b..118a1ff 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(string obname, int do_close)
 
-DESCRIPTION
-        This privileged efun is to set/change the connection of the
-        driver to the external erq demon, thus in effect changing the
-        demons.
+BESCHREIBUNG
+        Diese geschuetzte Funktion setzt oder aendert die die Verbindung des
+        Treibers zum externen Erq-Demon, aendert also effektiv die Demons.
 
-        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.
+        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.
 
-        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.
+        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.
 
-        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.
+        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.
 
-EXAMPLE
-        To restart the (default) erq, write in
-        master.c::stale_erq(closure c):
-          attach_erq_demon("", 0);
+        Die Efun liefert 1 bei Erfolg, 0 sonst.
 
-HISTORY
-        Introduced in 3.2.1@61.
+BEISPIELE
+        Um den (Standard-)Erq neu zu starten, muss in
+        master.c::stale_erq(closure c) geschrieben werden:
+        attach_erq_demon("", 0);
 
-SEE ALSO
+GESCHICHTE
+        Eingefuehrt in 3.2.1@61.
+
+SIEHE AUCH
         send_erq(E), erq(C)
diff --git a/doc/efun/binary_message b/doc/efun/binary_message
index 08bc321..5b909a9 100644
--- a/doc/efun/binary_message
+++ b/doc/efun/binary_message
@@ -1,6 +1,6 @@
 GESCHUETZT
 SYNOPSIS
-        int binary_message(int *|string messages, int flags);
+        int binary_message(int *|bytes messages, int flags)
 
 BESCHREIBUNG
         Liest den Output aus und sendet diesen direkt mit write() OHNE IAC
@@ -21,15 +21,15 @@
             werden - der Rueckgabewert ist nicht definiert.
 
         Bit 1 (Wert 2): Der Puffer wird ausgelesen, _nachdem_ die Nachricht
-            angefuegt wurde. Ist nur in Verbindung mit Bit 0 sinnvoll.
+            angefuegt wurde. Macht nur in Verbindung mit Bit 0 Sinn.
 
-        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.
+            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.
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in 3.2.1@40.
 
 SIEHE AUCH
diff --git a/doc/efun/bind_lambda b/doc/efun/bind_lambda
index 6075a33..ddd2ada 100644
--- a/doc/efun/bind_lambda
+++ b/doc/efun/bind_lambda
@@ -1,16 +1,18 @@
 SYNOPSIS
-        closure bind_lambda(closure, object ob)
+        closure bind_lambda(closure cl, object ob)
 
-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.
+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.
 
-        If the optional argument ob is not this_object(), the privilege
-        violation ("bind_lambda", this_object(), ob) occurs.
+        Wenn das optionale Argument <ob> nicht mit this_object()
+        uebereinstimmt, wird eine Schutzverletzung ("bind_lambda",
+        this_object(), ob) verursacht.
 
-HISTORY
-        Introduced in 3.2@82.
+GESCHICHTE
+        Eingefuehrt in 3.2.1@82.
 
-SEE ALSO
+SIEHE AUCH
         lambda(E), unbound_lambda(E), apply(E), funcall(E), closures(LPC)
diff --git a/doc/efun/blueprint b/doc/efun/blueprint
index 1c77497..11459fe 100644
--- a/doc/efun/blueprint
+++ b/doc/efun/blueprint
@@ -1,7 +1,7 @@
 VORLAEUFIG
 SYNOPSIS
         object blueprint()
-        object blueprint(string|object ob);
+        object blueprint(string|object ob)
 
 BESCHREIBUNG
         Die Efun liefert den Blueprint fuer das angegeben Objekt <ob> oder
@@ -11,12 +11,12 @@
         Objekte mit replace_program() liefert die Funktion den Blueprint des
         ersetzenden Programs.
 
-BEISPIEL
+BEISPIELE
         blueprint("/obj/ding");                 -> liefert /obj/ding
         blueprint(find_object("/obj/ding"));    -> liefert /obj/ding
         blueprint(clone_object("/obj/ding"));   -> liefert /obj/ding
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.9.
 
 SIEHE AUCH
diff --git a/doc/efun/break_point b/doc/efun/break_point
index 584453e..6566923 100644
--- a/doc/efun/break_point
+++ b/doc/efun/break_point
@@ -1,11 +1,11 @@
-OPTIONAL
+OPTIONAL, GESCHUETZT
 SYNOPSIS
         void break_point()
 
-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.
+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.
 
-SEE ALSO
+SIEHE AUCH
         shutdown(E), swap(E)
diff --git a/doc/efun/call_other b/doc/efun/call_other
index b487f4d..ee6ebdd 100644
--- a/doc/efun/call_other
+++ b/doc/efun/call_other
@@ -1,10 +1,10 @@
 SYNOPSIS
-        unknown call_other(object ob, string fun, mixed arg, ...);
-        unknown call_other(object *ob, string fun, mixed arg, ...);
+        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
@@ -12,16 +12,14 @@
         Funktion <fun> geliefert wird (oder 0 fuer nicht existierende oder
         als void deklarierte  Funktionen).
 
-        Optional kann der Driver so konfigueriert werden, dass auch ein Array
-        von Objekten *<ob> akzeptiert wird. Die Funktion <fun> wird dann fuer
-        jedes Objekt <ob> im Array mit den Argumenten <arg...> aufgerufen.
+        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.
-        call_other() auf Arrays von Objekten ist im MG aktiviert, welches
-        durch das Define __LPC_ARRAY_CALLS__ angezeigt wird.
 
         Das Objekt (bzw. die Objekte) kann direkt oder ueber einen String
         (d.h. den Objektnamen) angegeben werden. Wenn ein String angegeben
@@ -69,18 +67,17 @@
         Benutzern auf und speichert das gesammelte Resultat in einer
         Variablen:
 
-            string * s;
+            string *s;
             s = (string *)users()->short();
-
-        Objekte laden (obsolet):
-            Compat: call_other("/users/luser/thing", "???", 0);
+            !Compat: call_other("/users/luser/thing", "???", 0);
+            Compat: call_other("users/luser/thing", "???", 0);
 
         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(), also bitte nicht mehr verwenden.
+        diesem Zweck die Efun load_object().
 
-AENDERUNGEN
+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,
@@ -88,7 +85,10 @@
           - 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.
 
 SIEHE AUCH
-        function_exists(E), call_resolved(E), create(A), pragma(LPC),
-        extern_call(E), functions(LPC)
+        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)
diff --git a/doc/efun/call_out_info b/doc/efun/call_out_info
index 61d5ff5..df357bc 100644
--- a/doc/efun/call_out_info
+++ b/doc/efun/call_out_info
@@ -1,8 +1,8 @@
 SYNOPSIS
-        mixed *call_out_info();
+        mixed * call_out_info()
 
 BESCHREIBUNG
-        Liefert Informationen ueber alle anhaengigen call_out()s. Das Resultat
+        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:
diff --git a/doc/efun/call_resolved b/doc/efun/call_resolved
index 0103766..26e9d28 100644
--- a/doc/efun/call_resolved
+++ b/doc/efun/call_resolved
@@ -1,5 +1,5 @@
 SYNOPSIS
-        int call_resolved(mixed result, object ob, string func, mixed arg,...);
+        int call_resolved(mixed result, object ob, string func, mixed arg,...)
 
 BESCHREIBUNG
         Die Funktion ist aehnlich zu call_other(). Wenn obj->func() definiert
@@ -15,4 +15,6 @@
         tritt ein Fehler auf.
 
 SIEHE AUCH
-        call_other(E), function_exists(E), find_object(E)
+        call_other(E), call_direct(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/caller_stack b/doc/efun/caller_stack
index d1b5777..98b3e24 100644
--- a/doc/efun/caller_stack
+++ b/doc/efun/caller_stack
@@ -1,6 +1,6 @@
 SYNOPSIS
-        *object caller_stack();
-        *object caller_stack(int add_interactive);
+        object * caller_stack()
+        object * caller_stack(int add_interactive)
 
 BESCHREIBUNG
         Liefert ein Array der previous_object(), die einen call_other() auf
@@ -11,7 +11,7 @@
         wird this_interactive() dem Array hinzugefuegt, oder 0, wenn kein
         this_interactive() existiert.
 
-BEISPIEL
+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.
@@ -19,15 +19,15 @@
         Wenn D nun caller_stack() aufruft, ergibt dies: ({C,B}).
         Fuer caller_stack(1) ergibt die Funktion: ({C,B,A}).
 
-AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.6, vorgeschlagen von TubMud.
-
-ANMERKUNG
+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.
 
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.6, vorgeschlagen von Tubmud.
+
 SIEHE AUCH
         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 230827e..41b4e79 100644
--- a/doc/efun/caller_stack_depth
+++ b/doc/efun/caller_stack_depth
@@ -1,9 +1,9 @@
 SYNOPSIS
-        int caller_stack_depth(void)
+        int caller_stack_depth()
 
-DESCRIPTION
-        Returns the number of previous objects on the stack. This
-        can be used for security checks.
+BESCHREIBUNG
+        Liefert die Anzahl previous_object()s im Caller Stack. Dies kann fuer
+        Sicherheitschecks genutzt werden.
 
-SEE ALSO
+SIEHE AUCH
         caller_stack(E), previous_object(E), call_other(E), call_resolved(E)
diff --git a/doc/efun/capitalize b/doc/efun/capitalize
index bbb82b7..5c3b107 100644
--- a/doc/efun/capitalize
+++ b/doc/efun/capitalize
@@ -1,12 +1,12 @@
 SYNOPSIS
         string capitalize(string str)
 
-DESCRIPTION
-        Convert the first character in str to upper case, and return
-        the new string.
+BESCHREIBUNG
+        Konvertiert das erste Zeichen des Strings <str> in einen
+        Grossbuchtaben und gibt den neuen String zurueck.
 
-EXAMPLES
-        capitalize("heya!") -> "Heya!"
+BEISPIELE
+        capitalize("hallo welt!") -> "Hallo welt!"
 
-SEE ALSO
+SIEHE AUCH
         lower_case(E), upper_case(E)
diff --git a/doc/efun/catch b/doc/efun/catch
index c436b7d..57c58aa 100644
--- a/doc/efun/catch
+++ b/doc/efun/catch
@@ -1,6 +1,6 @@
 SYNOPSIS
-        mixed catch(expr, expr, ...);
-        mixed catch(expr, expr, ...; modifiers);
+        mixed catch(expr, expr, ...)
+        mixed catch(expr, expr, ...; modifiers)
 
 BESCHREIBUNG
         Wertet die Ausdruecke <expr> aus. Wenn kein Fehler auftritt, wird 0
@@ -34,24 +34,25 @@
                         ist 2 * __MASTER_EVAL_COST__ .
 
         catch() an sich ist nicht besonders laufzeit-intensiv: es braucht
-        nur etwas mehr Zeit als ein Intra-Objekt Funktionsaufruf.
+        nur etwas mehr Zeit als ein Intra-Objekt-Funktionsaufruf.
         
         throw() ist ebenfalls nicht sehr teuer, da lediglich einige
         interne Strukturen aufgeraeumt werden muessen.
 
-        Echte Laufzeitfehlers (ob nun mit oder ohne catch()) auf
-        der anderen Seite ist sehr zeitintensiv.
+        Echte Laufzeitfehler (ob nun mit oder ohne catch()) sind hingegen
+        sehr zeitintensiv.
 
         catch ist nicht im eigentlichen Sinne eine Efun, sondern eine Compiler
         Anweisung.
 
-BEISPIEL
+
+BEISPIELE
         object obj;
         string err;
         if(err = catch(obj = clone_object("/foo/bar/baz")))
             write("Kann das Objekt nicht clonen. Grund: "+err+"\n");
 
-AENDERUNGEN
+GESCHICHTE
         LDMud 3.2.9 fuehrte den 'nolog' catch() als experimentelles Feature
             ein.
         LDMud 3.2.10 implementierte 'nolog' als offizielle Form und fuehrte
diff --git a/doc/efun/ceil b/doc/efun/ceil
index dc44244..6989baa 100644
--- a/doc/efun/ceil
+++ b/doc/efun/ceil
@@ -1,17 +1,17 @@
 SYNOPSIS
-        float ceil(int|float arg);
+        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.
 
-BEISPIEL
+BEISPIELE
         ceil(4.5);      ergibt:  5.0
         ceil(-4.5);     ergibt: -4.0
         ceil(5);        ergibt:  5.0
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.7.
         LDMud 3.2.9 fuehrte neu Integer als moegliche Argumente ein.
 
diff --git a/doc/efun/clear_bit b/doc/efun/clear_bit
index 93f15ec..eddd69d 100644
--- a/doc/efun/clear_bit
+++ b/doc/efun/clear_bit
@@ -1,5 +1,5 @@
 SYNOPSIS
-        string clear_bit(string str, int n);
+        string clear_bit(string str, int n)
 
 BESCHREIBUNG
         Gibt einen neuen String zurueck, in dem das n-te Bit im String <str>
diff --git a/doc/efun/clone_object b/doc/efun/clone_object
index f622bef..3b6734f 100644
--- a/doc/efun/clone_object
+++ b/doc/efun/clone_object
@@ -1,23 +1,71 @@
-SYNOPSIS:
+SYNOPSIS
         object clone_object(string name)
+        object clone_object(object template)
 
-DESCRIPTION:
-        Clone a new object from definition name, and give it a new unique
-	name. Return the new object.
-        
-        The original, called blue print, used for cloning, should not be
-	used in the game, only be used for cloning. The cloned objects
-	contain only the data but the blue print also the function code.
-	The blue print is the one without a unique number at the end of
-	the object's object_name(). The clone_object() function never
-	returns a blue print.
-        
-        Note that the pathname must be complete, which means there are no
-        relative paths allowed.
+BESCHREIBUNG
+        Clont ein neues Objekt aus der Definiton <name> oder alternativ aus
+        dem Objekt <template>. In beiden Faellen wird dem Clon ein
+        individueller Name zugeordnet, dann wird der Clon zurueck gegeben.
 
-EXAMPLE:
-        object torch;
-        torch = clone_object("/obj/torch");
+        Das Original, Blueprint genannt, wird nur fuer das Clonen verwendet
+        und sollte deshalb nicht im Spiel genutzt werden. Die geclonten
+        Objekte enthalten nur Daten, der Blueprint hingegen auch den
+        Funktionscode.
 
-SEE ALSO:
-        destruct(E), move_object(E), uids(C)
+        Den Blueprint erkennt man daran, dass er keine Nummer im Objektnamen
+        traegt. clone_object() liefert niemals einen Blueprint zurueck.
+
+        Wenn der Blueprint existiert und einen heart_beat() aufweist, schaltet
+        clone_object() diesen aus.
+
+        Die Pfadangabe muss komplett sein. Relative Pfade sind nicht gestattet.
+        Wenn strikte EUIDs gefordert werden, muss das clonende Objekt eine
+        EUID != 0 haben.
+
+
+        -- Variablen Initialisierung --
+
+        Allgemein werden die Variablen in Blueprints und Clones gleichermassen
+        durch Aufruf der internen lfun __INIT() initialisiert.
+
+        Ist allerdings das #pragma share_variables in Effekt (entweder
+        explizit im Objekt angegeben, oder als allgemeine Laufzeitoption),
+        werden die Werte fuer die Klonvariable aus den _aktuellen_ Variablen
+        der Blueprint kopiert.
+
+        Variablen ohne explizite Initialisierung sind hiervon unbetroffen und
+        werden stets auf 0 gesetzt.
+
+
+BEISPIELE
+        // Clone eine Fackel (Name des Files nicht im Compat Format)
+        object fackel;
+        fackel = clone_object("/obj/fackel");
+
+        // Clone zwei Schluessel (Name des Files im Compat Format)
+        object key1, key2;
+        key1 = clone_object(load_object("obj/key"));
+        key2 = clone_object(key1);
+
+        // Create a specialized weapons blueprint.
+        --- std/weapon.c: --- 
+        #pragma share_variables
+        int weapon_class = 1;
+
+        --- broadsword.c: ---
+        inherit "/std/weapon";
+
+        int create() {
+            weapon_class = 2;
+            replace_program("/std/weapon");
+        }
+
+
+GESCHICHTE
+        Modifiziert in LDMud 3.2.6: es werden auch Objekte als Argument
+            akzeptiert.
+        LDMud 3.3.378 fuehrte das pragma share_variables ein.
+
+SIEHE AUCH
+        blueprint(E), clonep(E), destruct(E), clones(E), load_name(E),
+        load_object(E), move_object(E), uids(C), program_name(E), pragma(LPC)
diff --git a/doc/efun/clonep b/doc/efun/clonep
index afff71a..6e63cd2 100644
--- a/doc/efun/clonep
+++ b/doc/efun/clonep
@@ -1,18 +1,18 @@
 SYNOPSIS
-        int clonep ()
-        int clonep (object obj)
-        int clonep (string obj)
-        int clonep (mixed  arg)
+        int clonep()
+        int clonep(object obj)
+        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.
+        Liefert 0, wenn das Argument von einem anderen Typ ist.
         Ein Objekt, dessen Programm mittels replace_program() ersetzt wurde,
         zaehlt nicht als Klon.
 
-BEISPIEL
+BEISPIELE
         object o;
         o = clone_object("/obj/ding");
         write(clonep(o));                          --> schreibt "1"
@@ -20,7 +20,7 @@
 
         (Im COMPAT_MODE "obj/ding" als Dateinahmen benutzen)
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.6, geaendert in 3.2.7, so dass Objekte mit
         ersetzten Programmen nicht mehr als Klone zaehlen.
 
diff --git a/doc/efun/clones b/doc/efun/clones
index 23e20d2..f302287 100644
--- a/doc/efun/clones
+++ b/doc/efun/clones
@@ -1,7 +1,7 @@
 SYNOPSIS
-        *object clones();
-        *object clones(int what);
-        *object clones(string|object obj [, int what]);
+        object * clones()
+        object * clones(int what)
+        object * clones(string|object obj [, int what])
 
 BESCHREIBUNG
         Diese Efun liefert ein Array mit allen Clones eines bestimmten
@@ -22,9 +22,9 @@
         Wenn der Treiber mit DYNAMIC_COSTS kompiliert wurde, sind die Kosten
         fuer diese Funktion proportional zur Anzahl Objekte im Spiel.
 
-BEISPIEL
+BEISPIELE
         object o, p;
-        o = clone_object("/std/thing"); /* oder "std/thing" im COMPAT_MODE */
+        o = clone_object("/std/thing"); /* oder "std/thing" im COMPAT-Modus */
         destruct(find_object("/std/thing"));
         p = clone_object("/std/thing");
 
@@ -33,6 +33,6 @@
         clones("/std/thing", 1) --> ergibt ({ o })
         clones("/std/thing", 2) --> ergibt ({ o, p })
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.8.
         LDMud 3.2.9 fuehrte die dynamischen Kosten ein.
diff --git a/doc/efun/closurep b/doc/efun/closurep
index 25a2829..e93183a 100644
--- a/doc/efun/closurep
+++ b/doc/efun/closurep
@@ -4,7 +4,7 @@
 BESCHREIBUNG
         Liefert 1, wenn das Argument eine Closure ist, ansonsten 0.
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in 3.2@70.
 
 SIEHE AUCH
diff --git a/doc/efun/command b/doc/efun/command
index 09d6c0b..5058a14 100644
--- a/doc/efun/command
+++ b/doc/efun/command
@@ -1,50 +1,31 @@
-command()
-FUNKTION:
-     int command(string str)
-     int command(string str, object ob)
+GESCHUETZT
+SYNOPSIS
+        int command(string str)
+        int command(string str, object ob)
 
-BESCHREIBUNG:
-     Fuehrt str wie ein Kommando welches direkt vom Nutzer abgegeben wurde
-     aus. Alle Effekte des Kommandos wirken sich auf this_object() oder,
-     falls angegeben, auf das Objekt <obj> aus.
+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>.
 
-     Der Rueckgabewert ist >=1 fuer Erfolg und 0 fuer Misserfolg.
-     Rueckgabewert ist im Erfolgsfall die Hoehe der EvalCost in Ticks.
+        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.
 
-     Wenn command() auf ein anderes Objekt angewendet wird, koennen auf
-     diesem Wege keine "static" deklarierten Funktionen aufgerufen werden,
-     um etwas Schutz vor unerlaubten Aufrufen zu geben.
+        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.
 
-     Kommandi werden gestapelt, das heisst, nach der Ausfuehrung von <str>
-     werden die alten Werte fuer this_player(), query_verb() etc. wieder
-     hergestellt (ein Kommando kann dazu fuehren, dass ein Kommando
-     ausgefuehrt wird).
+        Kommandos werden gestapelt, das heisst, nach der Ausfuehrung von <str>
+        werden die alten Werte fuer this_player(), query_verb() etc. wieder
+        hergestellt.
 
-BEMERKUNGEN:
-     Die meisten in Lebewesen definierten Kommandofunktionen sind vor
-     aeusserem Aufrufen durch "static" oAe geschuetzt. Zum Ausfuehren dieser
-     Kommandos muss command_me(L) eingesetzt werden, um diesen Schutz zu
-     umgehen.
-
-BEISPIELE:
-     Siehe command_me(L) fuer einen Vergleich.
-	 
-     // #1 Ein NPC nimmt und zuendet eine herumliegende /std/lightsource an
-     object f = present("\nlichtquelle", environment());
-     if(f && command("nimm lichtquelle"))
-       if(command("zuende lichtquelle an"))
-         tell_room(environment(), Name(WER)+" freut sich.\n");
-       else
-         tell_room(environment(), Name(WER)+" schaut bedroeppelt.\n");
-     
-     // #2 Ein NPC traegt seine Sachen
-     clone_object("/ruestung/sommerkleid")->move(this_object(), 2);
-     command("trage kleid")
-     // aequivalent und besser ist hier:
-     AddItem("/ruestung/sommerkleid", REFRESH_REMOVE|CLONE_WEAR);
+GESCHICHTE
+        Bis 3.2.6 im Native-Modus konnten Kommandos nur auf das aktuelle 
+            Objekt angewendet werden.
+        Seit 3.2.7 werden Kommandos gestapelt.
 
 SIEHE AUCH
-     command_stack(E), notify_fail(E), enable_commands(E), get_eval_cost(E)
-     command_me(L)
-
-6 Sep 2012 Gloinson
+        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 d3a4e46..37e2f0b 100644
--- a/doc/efun/command_stack
+++ b/doc/efun/command_stack
@@ -1,13 +1,13 @@
 GESCHUETZT
 SYNOPSIS
-        #include <sys/commands.h>
+        #include <commands.h>
 
-        *mixed command_stack();
+        mixed * command_stack()
 
 BESCHREIBUNG
-        Liefert ein Array, das den Kommando Stack beschreibt. Das Array
-        umfasst command_stack_depth() Eintraege, der erste davon beschreibt
-        das Top-Level Kommando, der letze Eintrag das aktuelle Kommando.
+        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.
 
         Jeder Eintrag ist wiederum ein Array mit folgenden Eintraegen:
 
@@ -19,16 +19,16 @@
             mixed  [CMD_FAILOBJ]:   das Objekt, welches notify_fail() gesetzt
                                     hat
 
-        CMD_ORIGIN und CMD_PLAYER sind fuer gewohenlich das gleiche Objekt.
-        Es gibt nur einen Unterschied, wenn der modify_command Hook den
+        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.
 
-AENDERUNGEN
+ANMERKUNGEN
+        Jeder der Eintraege im Array kann 0 sein.
+
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.7.
         LDMud 3.2.8 fuegte den CMD_FAILOBJ Eintrag hinzu.
 
-ANMERKUNG
-        Jeder der Eintraege im Array kann 0 sein.
-
 SIEHE AUCH
         command(E), command_stack_depth(E), notify_fail(E)
diff --git a/doc/efun/command_stack_depth b/doc/efun/command_stack_depth
index 37205b5..b9b67c5 100644
--- a/doc/efun/command_stack_depth
+++ b/doc/efun/command_stack_depth
@@ -1,12 +1,12 @@
 GESCHUETZT
 SYNOPSIS
-        int command_stack_depth();
+        int command_stack_depth()
 
 BESCHREIBUNG
-        Liefert die Anzahl der verschachtelten Kommandi, also die Tiefe des
+        Liefert die Anzahl der verschachtelten Kommandos, also die Tiefe des
         Command Stacks.
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.7.
 
 SIEHE AUCH
diff --git a/doc/efun/copy b/doc/efun/copy
index 39f3752..be041ac 100644
--- a/doc/efun/copy
+++ b/doc/efun/copy
@@ -1,23 +1,24 @@
 SYNOPSIS
-     mixed copy(mixed arg);
+        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!
+        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!
 
-     Fuer andere Werte von <arg> bewirkt diese Funktion nichts.
+        Fuer andere Werte von <arg> bewirkt diese Funktion nichts.
 
-BEISPIEL
-     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 }) })
+BEISPIELE
+        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 }) })
+
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.6.
 
 SIEHE AUCH
-     deep_copy(E)
-
-10.Apr.2007 Gloinson
\ No newline at end of file
+        deep_copy(E)
diff --git a/doc/efun/copy_bits b/doc/efun/copy_bits
index ec68d51..c3a8eb2 100644
--- a/doc/efun/copy_bits
+++ b/doc/efun/copy_bits
@@ -1,6 +1,6 @@
 SYNOPSIS
         string copy_bits(string src, string dest [, int srcstart
-            [, int deststart [, int copylen]]]);
+            [, int deststart [, int copylen]]])
 
 BESCHREIBUNG
         Kopiert den Bitbereich [<srcstart> .. <srcstart> + <copylen>] aus dem
@@ -33,8 +33,8 @@
 
         (Die Notation src[] / dest[] dient nur der Illustration!)
 
-AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.9
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.9.
 
 SIEHE AUCH
         clear_bit(E), set_bit(E), test_bit(E), next_bit(E), last_bit(E),
diff --git a/doc/efun/copy_file b/doc/efun/copy_file
index 6e091ed..7f12111 100644
--- a/doc/efun/copy_file
+++ b/doc/efun/copy_file
@@ -1,19 +1,22 @@
 SYNOPSIS
         int copy_file(string from, string to)
 
-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.
-        
-        You must have read permission for <from> and write permission for
-        the target file to copy the file.
-        
-        On successful completion copy_file() will return 0. If any
-        occurs, 1 is returned, or a runtime is generated.
+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.
 
-EXAMPLE
+        Die Funktion erfordert Lesezugriff auf <from> und Schreibrechte fuer
+        <to>.
+
+        Bei Erfolg liefert die Funktion 0 zurueck, im Fehlerfalle einen
+        Wert ungleich Null.
+
+BEISPIELE
         copy_file("/players/wizard/obj.c", "/players/wizard/newobj.c");
 
-SEE ALSO
+GESCHICHTE
+        LDMud 3.2.9 beschraenkte die Fehlermeldungen auf Werte != 0.
+
+SIEHE AUCH
         mkdir(E), rmdir(E), rm(E), rename(E)
diff --git a/doc/efun/cos b/doc/efun/cos
index 85f3e92..1345404 100644
--- a/doc/efun/cos
+++ b/doc/efun/cos
@@ -4,7 +4,7 @@
 BESCHREIBUNG
         Liefert den Kosinus des Argumentes.
 
-AENDERUNGEN
+GESCHICHTE
         LDMud 3.2.9: Ganzzahlen (Integers) als Argument hinzugefuegt.
 
 SIEHE AUCH
diff --git a/doc/efun/crypt b/doc/efun/crypt
index 932089d..e6c183d 100644
--- a/doc/efun/crypt
+++ b/doc/efun/crypt
@@ -1,16 +1,18 @@
 SYNOPSIS
-     string crypt(string str, int seed);
-     string crypt(string str, string seed);
+        string crypt(string str, int seed)
+        string crypt(string 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.
+        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.
 
-     Das Resultat enthaelt den Schluessel als die ersten beiden Zeichen.
+        Das Resultat enthaelt den Schluessel als die ersten beiden Zeichen.
 
-     Fuer Passwortabfragen, die ohne Echo eingegeben werden koennen sollen,
-     bietet input_to() ein spezielles Flag.
+        Fuer Passwortabfragen, die ohne Echo eingegeben werden koennen sollen,
+        bietet input_to() ein spezielles Flag.
 
 SIEHE AUCH
-     md5_crypt(E), md5(E), sha1(E), hash(E), hmac(E)
\ No newline at end of file
+        md5_crypt(E), md5(E), sha1(E), hash(E), hmac(E)
diff --git a/doc/efun/ctime b/doc/efun/ctime
index 8db61f8..5bb3136 100644
--- a/doc/efun/ctime
+++ b/doc/efun/ctime
@@ -1,22 +1,25 @@
 SYNOPSIS
-     string ctime(int clock);
-     string ctime(int* uclock);
+        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.
+        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.
 
-     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.JAN.1970 an, das zweite Element
-     int[1] die Anzahl Millisekunden innerhalb dieser Sekunde.
+        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.
 
-BEISPIEL
-     write(ctime()+"\n");
+BEISPIELE
+        write(ctime()+"\n");
 
-     Dies gibt etwas aus wie "Sun Oct 26 19:28:30 2003".
+        Dies gibt etwas aus wie "Sun Oct 26 19:28:30 2003".
+
+GESCHICHTE
+        LDMud 3.2.9 fuehrte die zweite Variante ein.
 
 SIEHE AUCH
-     dtime(E), gmtime(E), localtime(E), strftime(E), time(E), utime(E)
+        gmtime(E), localtime(E), mktime(E), strftime(E), time(E), utime(E)
diff --git a/doc/efun/db_coldefs b/doc/efun/db_coldefs
index c135a11..bf08fc2 100644
--- a/doc/efun/db_coldefs
+++ b/doc/efun/db_coldefs
@@ -1,6 +1,6 @@
 OPTIONAL
 SYNOPSIS
-        string * db_coldefs (int handle)
+        string * db_coldefs(int handle)
 
 BESCHREIBUNG
         Resultat ist ein Array mit den Spaltennamen der Tabelle des
diff --git a/doc/efun/db_connect b/doc/efun/db_connect
index abe20c9..ffbd515 100644
--- a/doc/efun/db_connect
+++ b/doc/efun/db_connect
@@ -7,8 +7,9 @@
 BESCHREIBUNG
         Stelle eine Verbindung zur SQL-Datenbank <database> des
         lokalen SQL-Servers her. Das Ergebnis ist die Handle-Nummer fuer diese
-        Verbindung und muss fuer alle Anfragen zu dieser Datenbank verwendet
-        werden.
+        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).
 
         Existiert die Datenbank nicht, oder kann der lokale SQL-Server nicht
         gefunden werden, wird ein Laufzeitfehler erzeugt.
diff --git a/doc/efun/db_handles b/doc/efun/db_handles
index 1a304b5..99811a6 100644
--- a/doc/efun/db_handles
+++ b/doc/efun/db_handles
@@ -1,6 +1,6 @@
 OPTIONAL
 SYNOPSIS
-        int *db_handles()
+        int * db_handles()
 
 BESCHREIBUNG
         Result ist ein Array mit allen aktiven Verbindungshandles zum
diff --git a/doc/efun/db_insert_id b/doc/efun/db_insert_id
index 25e2a17..93159e2 100644
--- a/doc/efun/db_insert_id
+++ b/doc/efun/db_insert_id
@@ -1,6 +1,6 @@
 OPTIONAL
 SYNOPSIS
-        int db_insert_id (int handle)
+        int db_insert_id(int handle)
 
 BESCHREIBUNG
         Nach dem Einfuegen einer Zeile in eine Tabelle mit einem
diff --git a/doc/efun/debug_message b/doc/efun/debug_message
index 07e75e6..6b3b652 100644
--- a/doc/efun/debug_message
+++ b/doc/efun/debug_message
@@ -1,12 +1,12 @@
 SYNOPSIS
-        #include <sys/debug_message.h>
+        #include <debug_message.h>
 
-        void debug_message(string text);
-        void debug_message(string text, int flags);
+        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.
+        <host>.debug.log oder an eine beliebige Kombination dieser drei aus.
 
         Das Argument <flag> bezeichnet durch eine Kombination von Bitflags das
         Ziel und die Art, in der das Resultat geschrieben wird.
@@ -18,7 +18,8 @@
         Wenn <flags> 0 ist, weggelassen wird oder kein Ziel-Flag enthaelt,
         wird <text> standardmaessig an stdout und ins Logfile ausgegeben.
 
-BEISPIEL
+
+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
@@ -28,7 +29,7 @@
         debug_message("Die geht an stdout, mit vorangestelltem Timestamp.\n",
             DMSG_STDOUT | DMSG_STAMP);
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in 3.2.1@34.
         LDMud 3.2.9 fuehrte das Argument <flags> ein.
 
diff --git a/doc/efun/deep_copy b/doc/efun/deep_copy
index 1cef9a8..460d90a 100644
--- a/doc/efun/deep_copy
+++ b/doc/efun/deep_copy
@@ -1,5 +1,5 @@
 SYNOPSIS
-        mixed deep_copy(mixed arg);
+        mixed deep_copy(mixed arg)
 
 BESCHREIBUNG
         Erzeugt eine echte Kopie von <arg> und liefert diese zurueck. Fuer
@@ -14,7 +14,7 @@
         Mapping oder Array zu den Evaluationskosten sowohl in der Groesse als
         auch in der Einbettungstiefe.
 
-BEISPIEL
+BEISPIELE
         mixed *a, *b;
         a = ({ 1, ({ 21, 22 }) });
         b = deep_copy(a);
@@ -22,6 +22,6 @@
          --> a ist jetzt   ({ -1, ({ -21, 22 }) })
              b bleibt      ({  1, ({  21, 22 }) })
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.6.
         LDMud 3.2.9 fuegte die dynamischen Kosten zur Efun hinzu.
diff --git a/doc/efun/deep_inventory b/doc/efun/deep_inventory
index 51f4c66..05200f1 100644
--- a/doc/efun/deep_inventory
+++ b/doc/efun/deep_inventory
@@ -1,7 +1,7 @@
 SYNOPSIS
-        *object deep_inventory();
-        *object deep_inventory(object ob);
-        object *deep_inventory(object ob, int depth)
+        object * deep_inventory()
+        object * deep_inventory(object ob)
+        object * deep_inventory(object ob, int depth)
 
 BESCHREIBUNG
         Gibt ein Array der Objekte zurueck, die in <obj> enthalten sind.
@@ -17,7 +17,7 @@
           <depth> < 0: Nur die Objekte in der -<depth>ten Ebene werden
                        zurueckgegeben.
 
-BEISPIEL
+BEISPIELE 
         ob
         +- ob1
         +- ob2
diff --git a/doc/efun/destruct b/doc/efun/destruct
index f64de56..fd4ab2c 100644
--- a/doc/efun/destruct
+++ b/doc/efun/destruct
@@ -27,7 +27,7 @@
         es moeglich, dass ein Objekt noch lange nach seiner Zerstoerung
         Speicher belegt, obwohl es von ausserhalb nicht mehr gefunden wird.
 
-BEISPIEL
+BEISPIELE
         ob->remove();
         if(ob)        // es existiert noch, vielleicht ist die Lfun
                       // remove() nicht definiert?
@@ -36,7 +36,7 @@
         Dies ist die Standard-Methode, ein Objekt zu zerstoeren, ihm aber
         vorher noch die Chance zu geben, es selber zu tun.
 
-AENDERUNGEN
+GESCHICHTE
         LDMud 3.2.7: 0 (zerstoerte Objekt) als Argument annehmen.
 
 SIEHE AUCH
diff --git a/doc/efun/ed b/doc/efun/ed
index 8a8dc33..44c84ff 100644
--- a/doc/efun/ed
+++ b/doc/efun/ed
@@ -3,17 +3,17 @@
         void ed(string file)
         void ed(string file, string func)
 
-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.
+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.
 
-        The editor ed is almost ed(1) compatible.
+        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.
 
-SEE ALSO
+        Der LPC-Editor ist fast ed(1)-kompatibel.
+
+SIEHE AUCH
         enable_commands(E), query_editing(E), ed0(LPC)
diff --git a/doc/efun/efun b/doc/efun/efun
index 88cd3f5..1b52273 100644
--- a/doc/efun/efun
+++ b/doc/efun/efun
@@ -3,7 +3,7 @@
 
 BESCHREIBUNG
         Dieses Directory enthaelt die Beschreibungen fuer die Efuns in
-        LDMud 3.3 .
+        LDMud 3.3.
 
         Diese Funktionen werden vom Driver zur Verfuegung gestellt und koennen
         von jedem LPC-Objekt verwendet werden.
@@ -23,23 +23,35 @@
              process_string()
              rusage()
              set_is_wizard()
-             set_light()
              transfer()
+             tls_available()
+             tls_check_certificate()
+             tls_deinit_connection()
+             tls_error()
+             tls_init_connection()
+             tls_query_connection_info()
+             tls_query_connection_state()
+             tls_refresh_certs()
+             xml_generate()
+             xml_parse()
 
          - 'Vorlaeufig'
 
            Das Verhalten dieser Efuns kann sich in spaeteren Driverversionene
            aendern.
 
+             tls_*()
+             xml_*()
 
-         - 'Obsolet' or 'Veraltet'
+         - 'Obsolet' bzw. 'Veraltet'
 
              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
         efuns(LPC), applied(A), master(M), lpc(LPC), concepts(C), driver(D)
diff --git a/doc/efun/exec b/doc/efun/exec
index c86d3e0..10a320a 100644
--- a/doc/efun/exec
+++ b/doc/efun/exec
@@ -1,39 +1,40 @@
+GESCHUETZT
 SYNOPSIS
         int exec(object new, object old)
 
-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.
+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.
 
-        The result is 1 on success, and 0 on failure.
+        Das Resultat von exec() ist 1 bei Erfolg, 0 sonst.
 
-        exec() is used to load different "user objects" or to reconnect
-        link dead users.
+        exec() wird verwendet, um unterschiedliche "user objects" zu laden
+        oder um User mit totem Netz wieder zu verbinden.
 
-        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.
+        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.
 
-        After the exec(), if arg 2 was this_player(), this_player()
-        becomes arg 1, else vice versa. Ditto for this_interactive().
+        Wenn <old> this_player() war, enthaelt this_player() nach dem Aufruf
+        von exec() <new> und umgekehrt. Gleiches gilt fuer this_interactive().
 
-        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.
+        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.
 
-EXAMPLE
+BEISPIELE
         ob = clone_object("std/player");
         exec(ob, this_object());
         destruct(this_object());
 
-HISTORY
-        LDMud 3.2.9 added the switchover of this_interactive().
+GESCHICHTE
+        LDMud 3.2.9 fuehrte den Austauschprozess fuer this_interactive() ein.
 
-SEE ALSO
+SIEHE AUCH
         connect(M), disconnect(M), logon(A), interactive(E)
diff --git a/doc/efun/execute_command b/doc/efun/execute_command
index 0784c7e..1ef2343 100644
--- a/doc/efun/execute_command
+++ b/doc/efun/execute_command
@@ -1,6 +1,6 @@
 VORLAEUFIG, GESCHUETZT
 SYNOPSIS
-        int execute_command(string command, object origin, object player);
+        int execute_command(string command, object origin, object player)
 
 BESCHREIBUNG
         Diese Funktion bietet Low-Level Zugriff auf den Kommandoparser:
@@ -14,8 +14,8 @@
         H_NOTIFY_FAIL Hook. Zwar kann notify_fail() verwendet werden, die
         Verarbeitung muss jedoch durch das aufrufende Objekt erfolgen.
 
-AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.7
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.7.
 
 SIEHE AUCH
         hooks(C), command(E), notify_fail(E), command_stack(E)
diff --git a/doc/efun/exp b/doc/efun/exp
index c5746dc..584fc0b 100644
--- a/doc/efun/exp
+++ b/doc/efun/exp
@@ -1,8 +1,11 @@
 SYNOPSIS
-        float exp(int|float zahl);
+        float exp(int|float zahl)
 
 BESCHREIBUNG
         Die Exponentialfunktion. Liefert e^zahl.
 
+GESCHICHTE
+        LDMud 3.2.9 erlaubte Ganzzahlen als Argument.
+
 SIEHE AUCH
         log(E), pow(E)
diff --git a/doc/efun/expand_define b/doc/efun/expand_define
index c6ff189..5e2eca0 100644
--- a/doc/efun/expand_define
+++ b/doc/efun/expand_define
@@ -1,24 +1,24 @@
 SYNOPSIS
-        string expand_define (string name)
-        string expand_define (string name, string arg, ...)
+        string expand_define(string name)
+        string expand_define(string name, string arg, ...)
 
-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.
+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.
 
-        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.
+        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.
 
-EXAMPLE
-        While compiling 'foo.c':
-          expand_define("__FILE__") --> "foo.c"
+BEISPIELE
+        Waehrend dem Kompilieren von 'foo.c':
+            expand_define("__FILE__") --> "foo.c"
 
-HISTORY
-        Introduced in 3.2.1@93.
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.1@93.
 
-SEE ALSO
+SIEHE AUCH
         hooks(C), runtime_error(M)
diff --git a/doc/efun/explode b/doc/efun/explode
index 096eaa1..f004d41 100644
--- a/doc/efun/explode
+++ b/doc/efun/explode
@@ -1,10 +1,13 @@
 SYNOPSIS
-        string *explode(string str, string del)
+        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.
+        werden und so str in mehrere Zeichenketten zerlegt wird. Falls
+        eine Bytefolge uebergeben wurde, so wird diese in gleicher Weise
+        zerschnitten und zurueckgegeben.
 
         implode(explode(str, del), del) == str ist immer wahr.
 
@@ -13,16 +16,19 @@
         -------------------------------------------------------------------
         explode(" ab cd ef ", " ")  ({ "", "ab", "cd", "ef", "" })
         explode("abc", "abc")       ({ "", "" })
-        explode("", "")             ({})
+        explode("", "")             ({ "" })
+        explode("", <whatever>)     ({ "" })
         explode("abc", "xyz")       ({ "abc" })
         explode("abc", "")          ({ "a", "b", "c" })
 
-AENDERUNGEN
+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.
 
 SIEHE AUCH
-        sscanf(E), implode(E), regexplode(E)
+        sscanf(E), extract(E), implode(E), regexplode(E)
diff --git a/doc/efun/extern_call b/doc/efun/extern_call
index 03dca5f..b20bbf8 100644
--- a/doc/efun/extern_call
+++ b/doc/efun/extern_call
@@ -1,5 +1,5 @@
 SYNOPSIS
-        int extern_call();
+        int extern_call()
 
 BESCHREIBUNG
         Liefert 0, wenn die momentane ausgefuehrte Funktion durch eine lokale
@@ -8,5 +8,8 @@
         Funktion in all diesen Faellen 1 zurueck, in Zukunft koennte
         allerdings eine Unterscheidung der Aufrufe moeglich werden.
 
+GESCHICHTE
+        Eingefuehrt in 3.2@263 bzw. 3.2.1@12.
+
 SIEHE AUCH
-        call_other(E), previous_object(E)
\ No newline at end of file
+        call_other(E), previous_object(E)
diff --git a/doc/efun/filter_indices b/doc/efun/filter_indices
index 54fdadf..504effe 100644
--- a/doc/efun/filter_indices
+++ b/doc/efun/filter_indices
@@ -1,115 +1,27 @@
-filter_indices(E)
+VERALTET
+SYNOPSIS
+        mapping filter_indices(mapping map, string func, string|object ob,
+                                                          mixed extra ... )
+        mapping filter_indices(mapping map, closure cl, mixed extra ... )
 
-FUNKTION:
-     mapping filter_indices(mapping map, string fun, string|object ob
-                            [, mixed extra, ...])
-     mapping filter_indices(mapping map, closure cl [, mixed extra, ...])
+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.
 
-PARAMETER:
-     map	- zu filterndes Mapping
-     fun/cl	- zu rufende Methode/Closure
-     ob		- Objekt/Dateiname, an dem Methode gerufen werden soll
-     extra	- weitere Parameter fuer Methode/Closure
+        Wenn <func> TRUE liefert, wird das Element in das Resultat
+        uebernommen. Fuer <ob> kann man entweder ein Objekt oder den
+        Objektnamen uebergeben.
 
-BESCHREIBUNG:
-     Filtert die Elemente (jeweils Schluessel) aus 'map' durch die
-     Methode 'fun' oder die Closure 'cl' in ein neues Mapping.
-     Fuer jedes Element aus 'map' wird 'fun' oder 'cl' mit dem Schluessel als
-     erstem Parameter [und folgend den optionalen Extra-Parametern] gerufen.
+        Wird <ob> nicht angegeben oder weder ein String noch ein Objekt, so
+        wird standardmaessig this_object() verwendet.
 
-     Wenn der Aufruf
-      	ob->fun(element [, extra1, extra2, ...]) bzw.
-       	funcall(cl, element [, extra1, extra2, ...])
-     als Rueckgabewert !=0 zurueckgibt dann wird der Schluessel+Werte in das
-     neue Array aufgenommen, sonst nicht.
+GESCHICHTE
+        In LDMud 3.2.6 umbenannt aus filter_mapping() und verallgemeinert in
+            der Efun filter().
 
-     Wenn auf die Werte zugegriffen werden muss, kann das Mapping 'map'
-     zusaetzlich als 'extra'-Parameter uebergeben werden. Alternativ kann man
-     walk_mapping() benutzen und das Rueckgabemapping selbst erstellen.
-
-
-     Verwendung von Methoden:
-	Wenn bei der Angabe von 'fun' kein Objekt 'ob' in Form eines Strings
-	oder Objekts angegeben wird, wird this_object() angenommen.
-
-     Verwendung von Closures:
-	Es koennen sowohl Lfun-Closures als auch Lambda-Closures verwendet
-	werden. Lfun-Closures koennen, wenn im selben Objekt vorhanden auch
-	'private' oder/und 'static' deklariert sein, muessen aber zu dem
-	Zeitpunkt der Verwendung bekannt sein (Funktionsprototypen benutzen).
-
-RUeCKGABEWERT:
-     Gefiltertes Mapping mit Filterbedingung erfuellenden Elementen.
-
-BEMERKUNGEN:
-     (1) Achtung, die Elemente in 'map' werden nicht tief kopiert, sind sie
-     also selbst Arrays oder Mappings, so fuehrt eine spaetere Aenderung im
-     Rueckgabe-Mapping zur Aenderung im Ursprungsmapping:
-
-     mapping m,n;
-     m=([1:({1,2}),0:({2,3,4})]);
-     n=filter_indicdes(m, #'!);		// filtert alle Keys !=0 heraus
-     n[0][0]=8;
-
-     fuehrt zu: n=([0:({8,3,4})])
-  		m=([0:({8,3,4}),1:({1,2})])
-
-     (2) Das Kopieren in das Rueckgabemapping erfolgt fuer jedes Element nach
-     Ausfuehrung der Filtermethode. Aenderungen der Werte im Mapping in dieser
-     Methode (globale Variable/Uebergabe als Referenz an filter_indices)
-     schlagen sich also im Rueckgabemapping nieder.
-
-BEISPIELE:
-     ### erfundene Liste mit Spielern saeubern ... ###
-     mapping x=([ [/human:liafar]:  20,
-		  [/dwarf:mesirii]: 50,
-		  [/elf:zarniya]:   40,
-		  [/feline:turbo]:  30]);
-
-     int is_badguy(object who) {
-      if(who->InFight()) return 1;
-      return 0;
-     }
-
-     mapping result=filter_indices(x, #'is_badguy);
-     // 'result' enthaelt nur noch kaempfende Spieler
-
-     ### erfundene Liste ueber ihre Werte saeubern ###
-     int is_badguy(object who, mapping m) {
-      if(m[x]<30) return 1;
-      return 0;
-     }
-
-     mapping result=filter_indices(x, #'is_badguy, &x); // Referenz
-     // 'result' enthaelt nur Spieler mit Werten >= 30
-
-AeQUIVALENZCODE (nicht empfohlen, nur zum Verstaendnis!):
-     int i, width;
-     mapping ret; mapping input;
-     mixed *index;
-
-     width=get_type_info(input)[1];
-     ret=m_allocate(0, width);
-     index=m_indices(input);
-     i=sizeof(index);
-     while(i--)
-       if(ob->fun(index[i] [, extra1, extra2, ...]))
-       // if(funcall(cl, index[i] [, extra1, extra2, ...]))
-       {
-         int j;
-         j=width;
-
-         while(j--)
-           ret[index[i],j]=input[index[i],j];
-       }
-
-SIEHE AUCH:
-     Arrays:		filter(E), map(E)
-     Objektarrays:	filter_objects(E), map_objects(E)
-     Mappings:		map_indices(E)
-
-     Sonstiges:		walk_mapping(E), m_contains(E)
-			member()
-			m_indices(E), m_values(E)
-
-29.10.2006 Zesstra
+SIEHE AUCH
+        filter(E), map(E), map_indices(E), walk_mapping(E), member(E),
+        m_contains(E)
diff --git a/doc/efun/find_input_to b/doc/efun/find_input_to
index cb299c0..163637a 100644
--- a/doc/efun/find_input_to
+++ b/doc/efun/find_input_to
@@ -1,8 +1,8 @@
 SYNOPSIS
-        int find_input_to (object player, string fun);
-        int find_input_to (object player, closure fun);
-        int find_input_to (object player, object fun);
-        int find_input_to (object player, object ob, string fun);
+        int find_input_to(object player, string fun)
+        int find_input_to(object player, closure fun)
+        int find_input_to(object player, object fun)
+        int find_input_to(object player, object ob, string fun)
 
 BESCHREIBUNG
         Findet den zuletzt fuer <player> gestarteten input_to(), abhaengig vom
@@ -18,8 +18,8 @@
         die Position im input_to() Stack (wobei 0 den als letztes
         hinzugefuegten input_to() bezeichnet).
 
-AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.9
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.9.
 
 SIEHE AUCH
         input_to(E), input_to_info(E), remove_input_to(E),
diff --git a/doc/efun/find_object b/doc/efun/find_object
index 2a4f0d0..58e611a 100644
--- a/doc/efun/find_object
+++ b/doc/efun/find_object
@@ -1,23 +1,23 @@
-SYNOPSIS:
+SYNOPSIS
         object find_object(string str)
 
-DESCRIPTION:
-        Find an object with the object_name str. If the object isn't loaded,
-	it will not be found.
+BESCHREIBUNG
+        Liefert das Objekt mit dem Namen <str>. Wenn das Objekt nicht
+        geladen ist, wird es nicht gefunden.
 
-EXAMPLE:
+BEISPIELE
         object obj;
         obj = find_object("std/thing");
         obj = find_object("std/thing.c");
         obj = find_object("/std/thing");
         obj = find_object("/std/thing.c");
-        
-        All four statements are equal.
 
-	obj = find_object("/std/thing#42");
+        Alle vier Zeilen sind gleichwertig.
 
-	returns the clone whose object_name is "std/thing#42", if
-	it exists.
+        obj = find_object("/std/thing#42");
 
-SEE ALSO:
-        find_living(E), find_player(E), object_name(E)
+        Liefert den Clone, dessen object_name "std/thing#42" ist, wenn er
+        existiert.
+
+SIEHE AUCH
+        object_name(E), to_object(E)
diff --git a/doc/efun/first_inventory b/doc/efun/first_inventory
index 99be7fd..d571d8c 100644
--- a/doc/efun/first_inventory
+++ b/doc/efun/first_inventory
@@ -1,7 +1,7 @@
 SYNOPSIS
-        object first_inventory();
-        object first_inventory(string ob);
-        object first_inventory(object ob);
+        object first_inventory()
+        object first_inventory(string ob)
+        object first_inventory(object ob)
 
 BESCHREIBUNG
         Liefert das erste Objekt im Inventory von <obj>, wobei <obj> entweder
@@ -16,6 +16,19 @@
                 <irgendwelcher Code>
             }
 
+        Wer solche Aufrufe haeufig verwendet, findet es moeglicherweise
+        sinnvoll, ein Praeprozessor-Makro zu verwenden:
+
+            #define FORALL(x, y) for(x=first_inventory(y);x;
+                x=next_inventory(x))
+
+        Damit vereinfacht sich das obige Beispiel zu:
+
+            FORALL(obj, container)
+            {
+                <irgendwelcher Code>
+            }
+
         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
diff --git a/doc/efun/floatp b/doc/efun/floatp
index 109cace..43fe9ba 100644
--- a/doc/efun/floatp
+++ b/doc/efun/floatp
@@ -6,5 +6,5 @@
         ansonsten 0.
 
 SIEHE AUCH
-        intp(E), mappingp(E), stringp(E), closurep(E), objectp(E),
-        referencep(E), pointerp(E), symbolp(E), clonep(E)
+        intp(E), mappingp(E), stringp(E), bytesp(E), closurep(E),
+        objectp(E), referencep(E), pointerp(E), symbolp(E), clonep(E)
diff --git a/doc/efun/floor b/doc/efun/floor
index e7b85e6..9599a16 100644
--- a/doc/efun/floor
+++ b/doc/efun/floor
@@ -1,5 +1,5 @@
 SYNOPSIS
-        float floor(float arg);
+        float floor(float arg)
 
 BESCHREIBUNG
         Rundet das Argument <arg> ab auf die naechste ganze Zahl und gibt
@@ -11,7 +11,7 @@
         floor(-4.5) --> liefert -5.0
         floor(5)    --> liefert 5.0
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.7.
         LDMud 3.2.9 erlaubt auch Integer als Argumente.
 
diff --git a/doc/efun/funcall b/doc/efun/funcall
index 6bb9833..e507ad6 100644
--- a/doc/efun/funcall
+++ b/doc/efun/funcall
@@ -1,10 +1,15 @@
 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'
+        Wertet die Closure <cl> aus. Die Argumente <args> werden als Argumente
+        an die Closure uebergeben. Wenn <cl> keine Closure ist, wird <cl>
         zurueck gegeben.
 
+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.
+
 SIEHE AUCH
         apply(E), quote(E)
diff --git a/doc/efun/function_exists b/doc/efun/function_exists
index 43f2da2..c521360 100644
--- a/doc/efun/function_exists
+++ b/doc/efun/function_exists
@@ -1,14 +1,60 @@
 SYNOPSIS
-        string function_exists(string str, object ob)
+        #include <functionlist.h>
 
-DESCRIPTION
-        Return the file name of the object that defines the function
-        str in object ob. The returned value can be other than
-        object_name(ob) if the function is defined in an inherited
-        object. In !compat mode, the returned name always begins with a
-        '/' (absolute path). 0 is returned if the function was not
-        defined, or was defined as static (protected function on the
-        other hand are found).
+        mixed function_exists(string str)
+        mixed function_exists(string str, int flags)
+        mixed function_exists(string str, object ob)
+        mixed function_exists(string str, object ob, int flags)
 
-SEE ALSO
-        call_other(E), call_resolved(E), functionlist(E)
+BESCHREIBUNG
+        Sucht eine Funktion <str> im aktuellen Objekt bzw. im Objekt <ob>. Je
+        nach den angegeben <flags> werden folgende Informationen angezeigt:
+
+        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 '/'.
+
+        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 '/'.
+
+        FEXISTS_LINENO (2):
+        Liefert die Zeilennummer im Quellcode, in der die Funktion definiert
+        wird.
+
+        FEXISTS_ALL (3):
+          Liefert ein Array mit der gesamten Information der anderen Flags,
+          sowie zusaetzlichen Informationen ueber die Funktion:
+          
+            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
+
+        <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.
+
+        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.
+
+
+BEISPIELE
+        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.
+
+SIEHE AUCH
+        call_other(E), call_resolved(E), functionlist(E), variable_exists(E)
diff --git a/doc/efun/functionlist b/doc/efun/functionlist
index 46f2cba..63ecdc1 100644
--- a/doc/efun/functionlist
+++ b/doc/efun/functionlist
@@ -1,9 +1,9 @@
 GESCHUETZT
 SYNOPSIS
-        #include <sys/functionlist.h>
-        #include <sys/lpctypes.h>
+        #include <functionlist.h>
+        #include <lpctypes.h>
 
-        mixed *functionlist(object ob, int flags = RETURN_FUNCTION_NAME)
+        mixed * functionlist(object ob, int flags)
 
 BESCHREIBUNG
         Liefert ein Array mit Informationen zu den Lfuns von <ob>. Fuer jede
@@ -11,7 +11,7 @@
         eingetragen, und zwar in folgender Reihenfolge:
           - der Name der Funktion
           - die Flags der Funktion (vergleiche weiter unten)
-          - den Rueckgabetyp (aufgelistet in mudlib/sys/lpctypes.h)
+          - den Rueckgabetyp (aufgelistet in <lpctypes.h>)
           - die Anzahl Argumente, die die Funktion akzeptiert.
 
         <ob> kann als echtes Objekt oder als Objektname uebergeben werden. Im
@@ -20,11 +20,11 @@
         <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 mudlib/sys/functionlist.h festgelegt:
+        Konstanten aus <functionlist.h> festgelegt:
 
         Festlegen der gesammelten Information:
             RETURN_FUNCTION_NAME        liefert den Funktionsnamen
-            RETURN_FUNCTION_FLAGS       liefert die Flas der Funktion
+            RETURN_FUNCTION_FLAGS       liefert die Flags der Funktion
             RETURN_FUNCTION_TYPE        liefert den Rueckgabetyp der Funktion
             RETURN_FUNCTION_NUMARG      liefert die Anzahl moeglicher
                                         Argumente.
diff --git a/doc/efun/garbage_collection b/doc/efun/garbage_collection
index 5c6a738..86a87c4 100644
--- a/doc/efun/garbage_collection
+++ b/doc/efun/garbage_collection
@@ -1,7 +1,7 @@
 GESCHUETZT
 SYNOPSIS
-        void garbage_collection();
-        void garbage_collection(string filename);
+        void garbage_collection()
+        void garbage_collection(string filename)
 
 BESCHREIBUNG
         Befiehlt dem Treiber, nach Ende der aktuellen Ausfuehrung eine
@@ -18,5 +18,12 @@
         Fuer andere Memory Allocators erzeugt garbage_collection() keinen
         Output. Ein allfaelliges Argument <filename> wird ignoriert.
 
+        Diese efun verursacht den Aufruf von privilege_violation().
+
+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.
+
 SIEHE AUCH
-        rusage(E), valid_write(M)
+        rusage(E), valid_write(M), privilege_violation(M)
diff --git a/doc/efun/get_dir b/doc/efun/get_dir
index b14288a..d0bdf5a 100644
--- a/doc/efun/get_dir
+++ b/doc/efun/get_dir
@@ -1,8 +1,8 @@
 SYNOPSIS
         #include <files.h>
 
-        mixed *get_dir(string str)
-        mixed *get_dir(string str, int mask)
+        mixed * get_dir(string str)
+        mixed * get_dir(string str, int mask)
 
 BESCHREIBUNG
         Benoetigt einen Pfad als erstes Argument und liefert ein Feld
@@ -57,6 +57,14 @@
         Die Eintraege in der Bitmaske koennen miteinander kombiniert
         werden.
 
+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 /.
+
 BEISPIELE
         Funktion                         Rueckgabewert
         -------------------------------------------------------------------
@@ -64,8 +72,8 @@
                                          /obj enthalten sind.
         get_dir("/obj/")                 Wie get_dir("/obj/").
 
-        get_dir("/obj/fackel.c")        ({ "fackel.c" }), sofern
-                                         /obj/fackel.c existiert (als
+        get_dir("/obj/schwert.c")        ({ "schwert.c" }), sofern
+                                         /obj/schwert.c existiert (als
                                          Datei oder Verzeichnis), ansonsten
                                          ({}), sofern /obj ein Verzeichnis
                                          ist, ansonsten 0.
@@ -77,9 +85,9 @@
                                          Verzeichnisse in /obj, sofern /obj
                                          ein Verzeichnis ist, ansonsten 0.
 
-        get_dir("/obj/fackel.c", GETDIR_SIZES)
-                                         ({ <Groesse von /obj/fackel.c> }),
-                                         sofern /obj/fackel.c existiert.
+        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.
@@ -90,24 +98,30 @@
                                          jede Datei in /obj den Namen, die
                                          Groesse und den Zeitpunkt der
                                          letzten Aenderung enthaelt, z.B.
-                                         ({
-                                             "axt.c"    ,  927, 994539583,
-                                             "fackel.c", 1283, 998153903,
-                                             }).
+                                           ({
+                                              "axt.c"    ,  927, 994539583,
+                                              "schwert.c", 1283, 998153903,
+                                           }).
 
-        get_dir("/obj/fackel.c", GETDIR_NAMES|GETDIR_PATH)
-                                         ({ "/obj/fackel.c" }), sofern
+        get_dir("/obj/schwert.c", GETDIR_NAMES|GETDIR_PATH)
+                                         ({ "/obj/sword.c" }), sofern
                                          vorhanden.
-        get_dir("/obj/fackel.c", GETDIR_PATH)  Kurzform dafuer.
+        get_dir("/obj/schwert.c", GETDIR_PATH)  Kurzform dafuer.
 
         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.
-        ({
-            ({ "fackel.c", 1283, 998153903 }),
-            ({ "axt.c"    ,  927, 994539583 }),
-            }).
+          ({
+             ({ "schwert.c", 1283, 998153903 }),
+             ({ "axt.c"    ,  927, 994539583 }),
+          }).
+
+GESCHICHTE
+        LDMud 3.2.9: GETDIR_PATH eingefuehrt.
+        LDMud 3.2.11: GETDIR_ACCESS und GETDIR_MODES eingefuehrt.
+
 SIEHE AUCH
-        cat(E), mkdir(E), rmdir(E), file_size(E)
+        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 797e523..d97a1a5 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)
 
-DESCRIPTION
-        Return information about the last error which occured for
-        <name> (where <name> is a valid name from the wiz list).
+BESCHREIBUNG
+        Liefert Informationen ueber den letzten Fehler, der fuer <name>
+        aufgetreten ist, wobei <name> ein gueltiger Eintrag in der Wizlist
+        sein muss.
 
-        Result is an array of four elements: the filename of the
-        program where the error occured, 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.
+        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.
 
-        If there is no error stored for the given <name>, 0 is
-        returned.
+        Wenn es keinen Fehler fuer <name> gibt, wird 0 zurueckgegeben.
 
-        If <set_forget_flag> is non-zero, the 'forget' flag is set
-        for the error message after it has been returned.
+        Wenn <set_forget_flag> ungleich 0 ist, wird das 'forget flag' gesetzt,
+        nachdem die Fehlermeldung ausgegeben wurde.
 
-SEE ALSO
+SIEHE AUCH
         ed(E), valid_read(M)
diff --git a/doc/efun/get_extra_wizinfo b/doc/efun/get_extra_wizinfo
index c356fba..757d9cf 100644
--- a/doc/efun/get_extra_wizinfo
+++ b/doc/efun/get_extra_wizinfo
@@ -1,19 +1,16 @@
+GESCHUETZT
 SYNOPSIS
-        mixed get_extra_wizinfo (object wiz)
-        mixed get_extra_wizinfo (string wiz)
-        mixed get_extra_wizinfo (int    wiz)
+        mixed get_extra_wizinfo(object|string|int wiz)
 
-DESCRIPTION
-        Returns the 'extra' information that was set for the given
-        wizard <wiz> in the wizlist.
+BESCHREIBUNG
+        Liefert die <extra> Information, die in der Wizlist fuer den
+        angegebenen Gott <wiz> angegeben wurde.
 
-        If <wiz> is an 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.
+        Ist <wiz> ein 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.
 
-        The function causes a privilege violation.
-
-SEE ALSO
+SIEHE AUCH
         wizlist_info(E), set_extra_wizinfo(E)
diff --git a/doc/efun/get_type_info b/doc/efun/get_type_info
index 81b1f8b..09e1e4e 100644
--- a/doc/efun/get_type_info
+++ b/doc/efun/get_type_info
@@ -1,5 +1,5 @@
 SYNOPSIS
-        mixed get_type_info(mixed arg, int flag);
+        mixed get_type_info(mixed arg, int flag)
 
 BESCHREIBUNG
         Liefert Informationen uber den Typ von <arg>, wie von <flag>
@@ -37,14 +37,14 @@
           - fuer structs der eindeutige Identifizierungsstring
           - -1 fuer alle anderen Datentypen
 
-BUGS
+FEHLER
         Diese Funktion unterliegt haeufigen Veraenderungen im Zug der
         Treiberentwicklung.
 
-AENDERUNGEN
-        Eingefuehrt in 3.2@127
-        Flagwert 2 eingefuehrt in 3.2.1@84
-        Zusatzinformationen zu Strings eingefuehrt in 3.2.7
+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
diff --git a/doc/efun/geteuid b/doc/efun/geteuid
index 75cc3d1..0af0cbc 100644
--- a/doc/efun/geteuid
+++ b/doc/efun/geteuid
@@ -1,12 +1,17 @@
 SYNOPSIS
-        string geteuid(object ob);
+        string geteuid(object ob)
 
 BESCHREIBUNG
         Liefert die effektive User-ID des Objekts <obj> (normalerweise ein
-        Magier oder eine Domain). Objekte, die durch <obj> geclonet werden,
+        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.
 
+GESCHICHTE
+        Seit 3.2.1@47 war diese Efun nur verfuegbar, wenn EUIDs verwendet
+            wurden.
+        Seit 3.2.7 ist diese Efun immer verfuegbar.
+
 SIEHE AUCH
-        seteuid(E), getuid(E), getuuid(E), export_uid(E)
\ No newline at end of file
+        getuid(E), configure_object(E)
diff --git a/doc/efun/getuid b/doc/efun/getuid
index bf38fe8..08679cd 100644
--- a/doc/efun/getuid
+++ b/doc/efun/getuid
@@ -1,17 +1,16 @@
 SYNOPSIS
-        string getuid(object ob);
+        string getuid(object ob)
 
 BESCHREIBUNG
-        User-IDs werden im Compat Modus nicht verwendet.
-
-        Die Funktion liefert die UID des Objekts, also den Namen des Magiers
+        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.
 
-AENDERUNGEN
-        Seit 3.2.1@47 ist diese Efun ein Alias fuer creator()
+GESCHICHTE
+        Seit 3.2.1@47 ist diese Efun ein Alias fuer creator().
 
 SIEHE AUCH
-        seteuid(E), geteuid(E), export_uid(E), creator(E), getuuid(E)
+        geteuid(E), configure_object(E), creator(E)
diff --git a/doc/efun/gmtime b/doc/efun/gmtime
index ab12eff..ff0303f 100644
--- a/doc/efun/gmtime
+++ b/doc/efun/gmtime
@@ -1,8 +1,8 @@
 SYNOPSIS
-        #include <sys/time.h>
+        #include <time.h>
 
-        int *gmtime(int clock);
-        int *gmtime(int *uclock);
+        int * gmtime(int clock)
+        int * gmtime(int *uclock)
 
 BESCHREIBUNG
         Interpretiert <clock> als Anzahl Sekunden seit dem 01. Januar 1970,
@@ -11,7 +11,7 @@
 
         Alternativ kann auch ein Array mit zwei Elementen angegeben werden,
         wie es von uclock() geliefert wird: das erste Element wird
-        interpretiert wie <clock>, das zweite Element bezeichnet die
+        wie <clock> interpretiert, das zweite Element bezeichnet die
         Mikrosekunden in der aktuellen Sekunde. Dieses zweite Element wird
         ignoriert.
 
@@ -26,13 +26,13 @@
             int TM_YDAY  (7) : Tag im Jahr (0..365)
             int TM_ISDST (8) : TRUE: Daylight saving time
 
-BEISPIEL
+BEISPIELE
         printf("Heute ist %s\n", ({ "Sonntag", "Montag", "Dienstag",
             "Mittwoch",        "Donnerstag", "Freitag", "Samstag"})
             [gmtime()[TM_WDAY]]);
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.9.
 
 SIEHE AUCH
-    ctime(E), localtime(E), time(E), utime(E)
+        ctime(E), localtime(E), time(E), utime(E)
diff --git a/doc/efun/hash b/doc/efun/hash
index e3457c1..72b432a 100644
--- a/doc/efun/hash
+++ b/doc/efun/hash
@@ -1,13 +1,16 @@
 SYNOPSIS
-        #include <sys/tls.h>
+        #include <tls.h>
 
         string hash(int method, string arg [, int iterations ] )
+        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.
+        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.
 
         <method> ist eine der TLS_HASH_-Konstanten in tls.h; nicht jede
         beschriebene Methode ist in einem gegebenen Driver vorhanden:
@@ -20,8 +23,11 @@
           TLS_HASH_MD5       (6)
           TLS_HASH_RIPEMD160 (7)
 
-        Diese Funktion ist nur verfuegbar wenn der Driver mit OpenSSL
-        compiliert wurde.
+        Wenn der Driver ohne OpenSSL- oder GCrypt-Unterstuetzung compiliert
+        wurde, sind nur TLS_HASH_SHA1 und TLS_HASH_MD5 verfuegbar.
+
+        Jede Iteration kostet 10 Evalution-Ticks.
+
 
 BEISPIELE
         string s;
@@ -30,7 +36,8 @@
         s = hash(TLS_HASH_SHA1, ({ 'H', 'e', 'l', 'l', 'o' }) )
 
 GESCHICHTE
-        Eingefuehrt in LDMud 3.3.714
+        Eingefuehrt in LDMud 3.3.714.
+        LDMud 3.3.719 fuehrte die iterationsbasierten Evaluationskosten ein.
 
 SIEHE AUCH
         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 dee8d52..a640b2c 100644
--- a/doc/efun/heart_beat_info
+++ b/doc/efun/heart_beat_info
@@ -1,5 +1,5 @@
 SYNOPSIS
-        object *heart_beat_info()
+        object * heart_beat_info()
 
 BESCHREIBUNG
         Resultat ist ein Array mit allen Objekten, die einen aktiven
diff --git a/doc/efun/hmac b/doc/efun/hmac
index d41d6d5..1c712fa 100644
--- a/doc/efun/hmac
+++ b/doc/efun/hmac
@@ -1,12 +1,17 @@
 SYNOPSIS
-        #include <sys/tls.h>
+        #include <tls.h>
 
         string hmac(int method, string key, string arg )
+        string hmac(int method, string key, bytes  arg )
         string hmac(int method, string key, int *  arg )
+        string hmac(int method, bytes  key, string arg )
+        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>.
+        nach Methode <method> und fuer das Password <key>. Strings
+        werden zuvor in eine UTF-8-Bytefolge konvertiert.
 
         <method> ist eine der TLS_HASH_-Konstanten in tls.h; nicht jede
         beschriebene Methode ist in einem gegebenen Driver vorhanden:
@@ -19,8 +24,9 @@
           TLS_HASH_MD5       (6)
           TLS_HASH_RIPEMD160 (7)
 
-        Diese Funktion ist nur verfuegbar wenn der Driver mit OpenSSL
-        compiliert wurde.
+        Wenn der Driver ohne OpenSSL- oder GCrypt-Unterstuetzung compiliert
+        wurde, erzeugt diese Funktion einen Fehler.
+
 
 BEISPIELE
         string s;
diff --git a/doc/efun/idna_stringprep b/doc/efun/idna_stringprep
index 7001140..5ec1a44 100644
--- a/doc/efun/idna_stringprep
+++ b/doc/efun/idna_stringprep
@@ -1,22 +1,22 @@
 OPTIONAL
 SYNOPSIS
-        #include <sys/idn.h>
+        #include <idn.h>
 
-        string idna_stringprep (string str, int profile, int flags = 0)
+        string idna_stringprep(string str, int profile, int flags)
 
 BESCHREIBUNG
-        Prepariere den UTF-8 String <str> passend zum Profil <profile>
+        Prepariere den UTF-8-String <str> passend zum Profil <profile>
         (siehe auch libidn stringprep(3)).
 
-        <profile> und <flags> sind definiert in idn.h .
+        <profile> und <flags> sind definiert in <idn.h>.
 
         Sollte ein Fehler auftreten, wird eine Exception geworfen.
 
-        Diese Efun is nur verfuegbar auf Systemen mit libidn
-        installiert - in diesem Fall ist das Makro __IDNA__ definiert.
+        Diese Efun is nur auf Systemen mit einer installierten libidn 
+        verfuegbar -- in diesem Fall ist das Makro __IDNA__ definiert.
 
 GESCHICHTE
         Introduced in LDMud 3.3.713.
 
 SIEHE AUCH
-        convert_charset(E), idna_to_ascii(E), idna_to_unicode(E)
+        idna_to_ascii(E), idna_to_unicode(E)
diff --git a/doc/efun/idna_to_ascii b/doc/efun/idna_to_ascii
index 63c66b9..3d6236e 100644
--- a/doc/efun/idna_to_ascii
+++ b/doc/efun/idna_to_ascii
@@ -1,20 +1,20 @@
 OPTIONAL
 SYNOPSIS
-        #include <sys/idn.h>
+        #include <idn.h>
 
-        string idna_to_ascii (string name)
+        string idna_to_ascii(string name)
 
 BESCHREIBUNG
-        Wandle den String <name> von UTF-8 to IDNA Darstellung (8z
-        punycode).
+        Wandelt den String <name> von UTF-8 to IDNA Darstellung
+        (8z punycode).
 
         Sollte ein Fehler auftreten, wird eine Exception geworfen.
 
-        Diese Efun is nur verfuegbar auf Systemen mit libidn
-        installiert - in diesem Fall ist das Makro __IDNA__ definiert.
+        Diese Efun is nur auf Systemen mit installierter libidn
+        verfuegbar - in diesem Fall ist das Makro __IDNA__ definiert.
 
 GESCHICHTE
         Introduced in LDMud 3.3.713.
 
 SIEHE AUCH
-        convert_charset(E), idna_to_unicode(E), idna_stringprep(E)
+        idna_to_unicode(E), idna_stringprep(E)
diff --git a/doc/efun/idna_to_unicode b/doc/efun/idna_to_unicode
index 183dce8..23f6f9c 100644
--- a/doc/efun/idna_to_unicode
+++ b/doc/efun/idna_to_unicode
@@ -1,8 +1,8 @@
 OPTIONAL
 SYNOPSIS
-        #include <sys/idn.h>
+        #include <idn.h>
 
-        string idna_to_unicode (string name)
+        string idna_to_unicode(string name)
 
 BESCHREIBUNG
         Wandle den String <name> von IDNA Darstellung (8z punycode)
@@ -10,11 +10,11 @@
 
         Sollte ein Fehler auftreten, wird eine Exception geworfen.
 
-        Diese Efun is nur verfuegbar auf Systemen mit libidn
-        installiert - in diesem Fall ist das Makro __IDNA__ definiert.
+        Diese Efun is nur auf Systemen mit installierter libidn
+        verfuegbar - in diesem Fall ist das Makro __IDNA__ definiert.
 
 GESCHICHTE
         Introduced in LDMud 3.3.713.
 
 SIEHE AUCH
-        convert_charset(E), idna_to_ascii(E), idna_stringprep(E)
+        idna_to_ascii(E), idna_stringprep(E)
diff --git a/doc/efun/implode b/doc/efun/implode
index 85a723b..6d11762 100644
--- a/doc/efun/implode
+++ b/doc/efun/implode
@@ -1,11 +1,13 @@
 SYNOPSIS
         string implode(mixed *arr, string del)
+        bytes  implode(mixed *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.
+        keine Zeichenketten sind, werden ignoriert. Mit Bytefolgen wird
+        analog verfahren.
 
 BEISPIELE
 	Funktion                                        Rueckgabewert
@@ -18,8 +20,8 @@
         implode(explode("a short text", " "), "_")      "a_short_text"
 
 	Heutzutage kann man stattdessen auch
-	regreplace("a short text", " ", "_", 1)
+	    regreplace("a short text", " ", "_", 1)
 	verwenden.
 
 SIEHE AUCH
-        explode(E)
+        explode(E), regreplace(E)
diff --git a/doc/efun/include_list b/doc/efun/include_list
index cc44fa9..46c5c4c 100644
--- a/doc/efun/include_list
+++ b/doc/efun/include_list
@@ -1,9 +1,9 @@
 SYNOPSIS
-        #include <sys/include_list.h>
+        #include <include_list.h>
 
-        string *include_list();
-        string *include_list(object ob);
-        string *include_list(object ob, int flags);
+        string * include_list()
+        string * include_list(object ob)
+        string * include_list(object ob, int flags)
 
 BESCHREIBUNG
         Diese Funktion liefert Informationen ueber alle Dateien, die bei der
@@ -38,7 +38,7 @@
             in [i+0], [i+1] und [i+2] sind 0). Diese Untervektoren haben
             die gleiche Struktur wie das Resultatarray.
 
-        Wenn ein Objekt, inklusive <ob>, einem replace_programm() unterworfen
+        Wenn ein Objekt inklusive <ob> einem replace_program() unterworfen
         war, spiegeln die gelieferten Dateinamen das effektiv aktive Programm
         wider.
 
@@ -47,7 +47,8 @@
         Trotzdem beginnt der tatsaechliche Dateiname nicht mit einem '/',
         wenn der Treiber im COMPAT Modus laeuft.
 
-BEISPIEL
+
+BEISPIELE
         Dieser Code erzeugt (mit /sys als Includeverzeichnis des Systems):
 
             a.c:  #include "b.h"
@@ -73,8 +74,8 @@
                  , "<c.h>",   "/sys/c.h", 1
                  })
 
-AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.9, 3.3.128
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.9, 3.3.128.
 
 SIEHE AUCH
         debug_info(E), inherit_list(E)
diff --git a/doc/efun/inherit_list b/doc/efun/inherit_list
index 97c738e..b17e5b0 100644
--- a/doc/efun/inherit_list
+++ b/doc/efun/inherit_list
@@ -1,9 +1,9 @@
 SYNOPSIS
-        #include <sys/inherit_list.h>
+        #include <inherit_list.h>
 
-        string *inherit_list();
-        string *inherit_list(object ob);
-        string *inherit_list(object ob, int flags);
+        string * inherit_list()
+        string * inherit_list(object ob)
+        string * inherit_list(object ob, int flags)
 
 BESCHREIBUNG
         Liefert die Namen von allen Dateien, die von <ob> geerbt werden,
@@ -30,14 +30,15 @@
         Alle Flags koennen mit einem binaeren Oder | verbunden werden, wobei
         INHLIST_FLAT und INHLIST_TREE sich gegenseitig ausschliessen.
 
-        Wenn ein Objekt, inklusive <ob>, einem replace_programm() unterworfen
+        Wenn ein Objekt inklusive <ob> einem replace_program() unterworfen
         war, spiegeln die gelieferten Dateinamen das effektiv aktive Programm
         wider.
 
         Die Inheritpfade, die geliefert werden, beginnen immer mit '/'
         (absolute Pfade), auch wenn der Treiber im COMPAT Modus laeuft.
 
-BEISPIEL
+
+BEISPIELE
         Gegeben folgende Vererbungsstruktur:
 
             / c - d
@@ -51,7 +52,7 @@
             inherit_list(a, 1) -> ({ "a", ({ "c", "d" }), "b" })
             inherit_list(a, 3) -> ({ "  a", ({ " c", "v d" }), "  b" })
 
-AENDERUNGEN
+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.
diff --git a/doc/efun/input_to b/doc/efun/input_to
index 11cbd97..87748d5 100644
--- a/doc/efun/input_to
+++ b/doc/efun/input_to
@@ -1,9 +1,9 @@
 SYNOPSIS
-        #include <sys/input_to.h>
+        #include <input_to.h>
 
-        void input_to(string|closure fun);
-        void input_to(string|closure fun, int flag, ...);
-        void input_to(string|closure fun, int flag, string|closure prompt, ...);
+        void input_to(string|closure fun)
+        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
@@ -82,16 +82,16 @@
             input_tos angehaengt.
 
         INPUT_IGNORE_BANG (128):
-            Eingaben, die mit ! beginnen, werden NICHT als Kommandi geparset,
+            Eingaben, die mit ! beginnen, werden NICHT als Kommandos geparst,
             sondern auch als Argument an die Funkion <fun> uebergeben. Die
             Verwendung dieses Flags ist eingeschraenkt.
 
         Alle nachfolgenden Argumente werden als zweites bzw. drittes usw.
         Argument an <fun> uebergeben.
 
-BEISPIEL
-        void func()
-        {
+
+BEISPIELE
+        void func() {
             ...
             input_to("enter_name", INPUT_PROMPT, "Wie lautet dein Name?:");
             /* Frueher erledigte man dies mit:
@@ -101,8 +101,7 @@
              ...
          }
 
-         enter_name(string str)
-         {
+        void enter_name(string str) {
             write("Heisst du wirklich '"+str+"'?? *kicher*\n");
             ...
         }
@@ -126,9 +125,9 @@
         (einschliesslich etwaiger eigener non-INPUT_APPEND input_tos), geht
         die naechste Eingabe an enter_lastname().
 
-AENDERUNGEN
+GESCHICHTE
         Die Bedeutung von <flag> wurde in 3.2.1@93 erweitert.
-        Die Limitierung fuer das "stapeln" von input_to()s aus !-Kommandi
+        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
@@ -136,7 +135,7 @@
         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.
 
-BUGS
+FEHLER
         Im Zeichenmodus sollten Zeilenumbrueche eigentlich als "\n" zurueck
         gegeben werden. Dies allerdings kann existierenden Code zerstoeren.
 
diff --git a/doc/efun/input_to_info b/doc/efun/input_to_info
index 8dac3d3..7a8cb28 100644
--- a/doc/efun/input_to_info
+++ b/doc/efun/input_to_info
@@ -1,9 +1,9 @@
 SYNOPSIS
-        *mixed input_to_info(object player);
+        mixed * input_to_info(object player)
 
 BESCHREIBUNG
-        Liefert ein Array aller fuer <player> haengigen input_to()s. Der
-        erste Eintrag im Array ist der aelteste haengige input_to()
+        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().
 
@@ -13,7 +13,7 @@
             1:   Die Funktion (String oder Closure)
             2ff: Die Argumente
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.9.
 
 SIEHE AUCH
diff --git a/doc/efun/interactive b/doc/efun/interactive
index c326f8a..f3c19f1 100644
--- a/doc/efun/interactive
+++ b/doc/efun/interactive
@@ -1,9 +1,10 @@
 SYNOPSIS
-        int interactive(object obj);
+        int interactive()
+        int interactive(object obj)
 
 BESCHREIBUNG
         Liefert 1 zurueck, wenn <obj> ein interaktiver User (ein Spieler)
-        ist. Wird <obj> weggelassen, dann wird this_object() verwendet.
+        ist, sonst 0. Wird <obj> weggelassen, so wird this_object() verwendet.
 
 SIEHE AUCH
         query_once_interactive(E), query_ip_number(E), query_ip_name(E),
diff --git a/doc/efun/intp b/doc/efun/intp
index 6a6a0f2..49de69f 100644
--- a/doc/efun/intp
+++ b/doc/efun/intp
@@ -2,9 +2,8 @@
         int intp(mixed arg)
 
 BESCHREIBUNG
-        Liefert 1, wenn das Argument eine Ganzzahl (Integer) ist, ansonsten
-        0.
+        Liefert 1, wenn das Argument eine Ganzzahl (Integer) ist, sonst 0.
 
 SIEHE AUCH
         closurep(E), floatp(E), mappingp(E), objectp(E), pointerp(E),
-        referencep(E), stringp(E), symbolp(E), clonep(E)
+        referencep(E), stringp(E), bytesp(E), symbolp(E), clonep(E)
diff --git a/doc/efun/invert_bits b/doc/efun/invert_bits
index 27bbe6d..0836df7 100644
--- a/doc/efun/invert_bits
+++ b/doc/efun/invert_bits
@@ -1,12 +1,12 @@
 SYNOPSIS
-        string invert_bits(string str);
+        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.
 
-BEISPIEL
+BEISPIELE
         string s;
         s = set_bit("", 3); s = set_bit(s, 4); s = set_bit(s, 15);
         --> s ist nun  "8 ("
diff --git a/doc/efun/last_bit b/doc/efun/last_bit
index d0d2471..f0467c0 100644
--- a/doc/efun/last_bit
+++ b/doc/efun/last_bit
@@ -1,5 +1,5 @@
 SYNOPSIS
-        int last_bit(string str);
+        int last_bit(string str)
 
 BESCHREIBUNG
         Liefert die Nummer des letzten gesetzten Bits im Bitstring <str>.
@@ -9,7 +9,7 @@
         Leerschlag " " mit dem Wert 0. Das erste Zeichen im String ist jenes
         mit den niedrigsten Bits (0-5).
 
-BEISPIEL
+BEISPIELE
         string s;
         s = set_bit("", 4); s = set_bit(s, 2);
         last_bit(s) --> liefert 4
diff --git a/doc/efun/last_instructions b/doc/efun/last_instructions
index ca447d9..2b4b2bc 100644
--- a/doc/efun/last_instructions
+++ b/doc/efun/last_instructions
@@ -1,6 +1,6 @@
 GESCHUETZT
 SYNOPSIS
-        string *last_instructions(int lenght, int verbose);
+        string * last_instructions(int lenght, int verbose)
 
 BESCHREIBUNG
         Liefert ein Array mit der "Laenge" der zuletzt ausgefuehrten
diff --git a/doc/efun/living b/doc/efun/living
index 6f0a886..7434104 100644
--- a/doc/efun/living
+++ b/doc/efun/living
@@ -1,12 +1,12 @@
 SYNOPSIS
-        int living(object ob);
+        int living(object ob)
 
 BESCHREIBUNG
-        Liefert 1 zurueck, wenn <ob> ein lebendiges Objekt (living) ist.
-        <ob> ist living, wenn enable_commands() aus <obj> aufgerufen wurde.
-        <ob> kann auch 0 sein.
+        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.
 
-BEISPIEL
+BEISPIELE
         living(this_player());  -> Dies liefert (hoffentlich) 1 zuerueck.
 
 SIEHE AUCH
diff --git a/doc/efun/load_object b/doc/efun/load_object
index 847d0b8..b2c2b21 100644
--- a/doc/efun/load_object
+++ b/doc/efun/load_object
@@ -1,23 +1,23 @@
 SYNOPSIS
-        object load_object(string name)
+        object load_object(string file)
 
-DESCRIPTION
-        Load the object from the file <name> and return it. If the
-        object already exists, just return it.
+BESCHREIBUNG
+        Laedt und liefert das Objekt aus der Datei <file>. Wenn das Objekt
+        bereits existiert, wird es nur zurueckgeliefert.
 
-        This efun can be used only to load blueprints - for clones, use
-        the efun clone_object().
+        Diese Efun laedt nur Blueprints. Fuer Clone muss clone_object()
+        verwendet werden.
 
-        If strict euids are enforced, the cloning object must have
-        a non-zero euid.
+        Werden strikte EUIDs verlangt, muss das ladende Objekt eine EUID != 0
+        haben.
 
-EXAMPLE
-        // Update and reload the standard player object
+BEISPIELE
+        // Erneuere das Standard Player-Objekt
         destruct(find_object("/std/player"));
         load_object("/std/player");
 
-HISTORY
-        Introduced in LDMud 3.2.6.
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.6.
 
-SEE ALSO
+SIEHE AUCH
         clone_object(E)
diff --git a/doc/efun/localtime b/doc/efun/localtime
index a522dc4..cebc838 100644
--- a/doc/efun/localtime
+++ b/doc/efun/localtime
@@ -1,8 +1,8 @@
 SYNOPSIS
-        #include <sys/time.h>
+        #include <time.h>
 
-        int *localtime(int clock);
-        int *localtime(int *uclock);
+        int * localtime(int clock)
+        int * localtime(int *uclock)
 
 BESCHREIBUNG
         Interpretiert das Argument <clock> als Anzahl Sekunden seit dem
@@ -27,13 +27,13 @@
             int TM_YDAY   (7):  Tag im Jahr (0..365)
             inz TM_ISDST  (8):  TRUE: Daylight Saving Time
 
-BEISPIEL
-        printf("Today is %s\n", ({ "Sonntag", "Montag", "Dienstag",
+BEISPIELE
+        printf("Heute ist %s\n", ({ "Sonntag", "Montag", "Dienstag",
             "Mittwoch", "Donnerstag", "Freitag", "Samstag"})
             [localtime()[TM_WDAY]]);
 
-AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.9
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.9.
 
 SIEHE AUCH
-    ctime(E), gmtime(E), time(E), utime(E)
+        ctime(E), gmtime(E), time(E), utime(E)
diff --git a/doc/efun/log b/doc/efun/log
index 1b2abff..fc8c7eb 100644
--- a/doc/efun/log
+++ b/doc/efun/log
@@ -1,8 +1,11 @@
 SYNOPSIS
-        float log(int|float arg);
+        float log(int|float arg)
 
 BESCHREIBUNG
         Liefert den natuerlichen Logarithmus von <arg>.
 
+GESCHICHTE
+        LDMud 3.2.9 fuehrte Integers als Argumente ein.
+
 SIEHE AUCH
         exp(E), pow(E)
diff --git a/doc/efun/lower_case b/doc/efun/lower_case
index 9701e20..1dcde99 100644
--- a/doc/efun/lower_case
+++ b/doc/efun/lower_case
@@ -1,11 +1,11 @@
 SYNOPSIS
-        string lower_case(string str);
+        string lower_case(string str)
 
 BESCHREIBUNG
         Konvertiert alle Zeichen in <str> in Kleinbuchstaben und liefert den
         neuen String.
 
-BEISPIEL
+BEISPIELE
         lower_case("Hallo WeLT!") -> "hallo welt!"
 
 SIEHE AUCH
diff --git a/doc/efun/m_add b/doc/efun/m_add
index 624f4b9..6314c88 100644
--- a/doc/efun/m_add
+++ b/doc/efun/m_add
@@ -1,5 +1,5 @@
 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
@@ -21,7 +21,7 @@
         apply(#'m_add, m, "baz", ({ 4, 5 }))
         --> ([ "foo":1;2, "bar":1;0, "baz":4;5 ])
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.9.
 
 SIEHE AUCH
diff --git a/doc/efun/m_contains b/doc/efun/m_contains
index e941ff3..d0b1e54 100644
--- a/doc/efun/m_contains
+++ b/doc/efun/m_contains
@@ -1,5 +1,5 @@
 SYNOPSIS
-        int m_contains(mixed &data1, ... , &dataN, mapping map, mixed key);
+        int m_contains(mixed &data1, ... , &dataN, mapping map, mixed key)
 
 BESCHREIBUNG
         Wenn <map> den Key <key> enthaelt, werden die entsprechenden Werte
@@ -11,7 +11,7 @@
         Man kann diese Funktion auch fuer 0-Wert Mappings verwenden, wobei
         sie den gleichen Effekt wie member(E) hat.
 
-AENDERUNGEN
+GESCHICHTE
         Umbenannt von 'mapping_contains' in LDMud 3.2.6.
 
 SIEHE AUCH
diff --git a/doc/efun/m_indices b/doc/efun/m_indices
index 4d84c4e..b80f32c 100644
--- a/doc/efun/m_indices
+++ b/doc/efun/m_indices
@@ -1,9 +1,9 @@
-SYNOPSIS:
-	mixed *m_indices(mapping map)
+SYNOPSIS
+        mixed * m_indices(mapping map)
 
-DESCRIPTION:
-	Return an array containing the indices of mapping 'map'.
+BESCHREIBUNG
+        Liefert ein Array mit den Indizes von <map>.
 
-SEE ALSO:
-	mappingp(E), mkmapping(E), m_values(E), m_delete(E),
-	sizeof(E), widthof(E)
+SIEHE AUCH
+        mappingp(E), mkmapping(E), m_add(E), m_values(E), m_delete(E),
+        sizeof(E), widthof(E), unmkmapping(E)
diff --git a/doc/efun/m_reallocate b/doc/efun/m_reallocate
index 627bc97..550e12b 100644
--- a/doc/efun/m_reallocate
+++ b/doc/efun/m_reallocate
@@ -1,5 +1,5 @@
 SYNOPSIS
-        mapping m_reallocate(mapping m, int width);
+        mapping m_reallocate(mapping m, int width)
 
 BESCHREIBUNG
         Erzeugt ein neues Mapping mit <width> Werten pro Key und fuellt das
@@ -10,14 +10,14 @@
 
         Das urspruengliche Mapping <m> wird nicht veraendert.
 
-BEISPIEL
+BEISPIELE
         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 ])
 
-AENDERUNGEN
-    Eingefuehrt in LDMud 3.2.6, auf Vorschlag von TubMud.
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.6, auf Vorschlag von Tubmud.
 
 SIEHE AUCH
         m_allocate(E), m_values(E), widthof(E)
diff --git a/doc/efun/m_values b/doc/efun/m_values
index 4b94154..153aef1 100644
--- a/doc/efun/m_values
+++ b/doc/efun/m_values
@@ -1,14 +1,24 @@
-SYNOPSIS:
-        mixed *m_values(mapping map)
-        mixed *m_values(mapping map, int index)
+SYNOPSIS
+        mixed * m_values(mapping map)
+        mixed * m_values(mapping map, int index)
 
-DESCRIPTION:
-       If index is 0 or not given, return an array with the first values of 
-       mapping 'map'.
-       For values of index >0, return an array with the corresponding higher
-       values of mapping 'map', i.e. m_values(map,2) returns the third 
-       values.
+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.
 
-SEE ALSO:
-       mappingp(E), mkmapping(E), m_indices(E), m_delete(E),
-       sizeof(E), widthof(E), mappings(LPC)
+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)
+
+        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.
+
+SIEHE AUCH
+        mappingp(E), mkmapping(E), m_add(E), m_indices(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 3bb6732..b39c6f6 100644
--- a/doc/efun/make_shared_string
+++ b/doc/efun/make_shared_string
@@ -1,6 +1,7 @@
 VERALTET
 SYNOPSIS
-        string make_shared_string (string str);
+        string make_shared_string(string str)
+        bytes make_shared_string(bytes str)
 
 BESCHREIBUNG
         Fuegt <str> in die Tabelle der gemeinsam verwendeten String des Spiels
@@ -15,10 +16,10 @@
         Driver wandelt untablierte Strings nach einiger Zeit automatisch in
         tablierte Strings um um
 
-BUGS
+FEHLER
         Ein besseres Stringhandling im Driver sollte diese Efun ueberfluessig
         machen.
 
-AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.6, auf Vorschlag von TubMud.
-        Veraltet seit LDMud 3.3 .
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.6, auf Vorschlag von Tubmud.
+        Veraltet seit LDMud 3.3.
diff --git a/doc/efun/mappingp b/doc/efun/mappingp
index fef2ac7..5ab4ed2 100644
--- a/doc/efun/mappingp
+++ b/doc/efun/mappingp
@@ -1,9 +1,10 @@
-SYNOPSIS:
-	int mappingp(mixed arg)
+SYNOPSIS
+        int mappingp(mixed arg)
 
-DESCRIPTION:
-	Return 1 if the argument is a mapping, or 0 if it is not. 
+BESCHREIBUNG
+        Liefert 1, wenn das Argument ein Mapping ist, ansonsten 0.
 
-SEE ALSO:
-	intp(E), stringp(E), objectp(E), pointerp(E), mkmapping(E),
-	m_indices(E), m_values(E), m_delete(E), sizeof(E)
+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).
diff --git a/doc/efun/master b/doc/efun/master
index cdf55b6..aa14001 100644
--- a/doc/efun/master
+++ b/doc/efun/master
@@ -1,6 +1,6 @@
 SYNOPSIS
-        object master();
-        object master(int dont_load);
+        object master()
+        object master(int dont_load)
 
 BESCHREIBUNG
         Die Funktion liefert das Masterobjekt.
@@ -10,8 +10,8 @@
         master() nur das Masterobjekt oder 0, falls das aktuelle Masterobjekt
         zerstoert wurde.
 
-AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.10
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.10.
 
 SIEHE AUCH
         master(M)
diff --git a/doc/efun/max b/doc/efun/max
index 189f4a5..bd4f870 100644
--- a/doc/efun/max
+++ b/doc/efun/max
@@ -1,23 +1,23 @@
 SYNOPSIS
-        string max(string arg, ...);
-        string max(string *arg);
+        string|bytes max(string|bytes arg, ...)
+        string|bytes max(string|bytes *arg)
 
-        int|float max(int|float arg, ...);
-        int|float max(int|float *arg);
+        int|float    max(int|float arg, ...)
+        int|float    max(int|float *arg)
 
 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>.
 
-BEISPIEL
+BEISPIELE
         max(1)                     - liefert 1
         max(1, 1.1)                - liefert 1.1
         max("foo", "bar")          - liefert "foo"
         max( ({ "foo", "bar" }) )  - liefert "foo"
 
-AENDERUNGEN
-        Eingefuehrt in LDMued 3.2.9.
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.9.
 
 SIEHE AUCH
         min(E)
diff --git a/doc/efun/md5_crypt b/doc/efun/md5_crypt
index d91ba18..2dffbdc 100644
--- a/doc/efun/md5_crypt
+++ b/doc/efun/md5_crypt
@@ -1,6 +1,8 @@
 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)
 
 BESCHREIBUNG
         Verschluesselt den String <str> mit dem Schluessel <seed>.
diff --git a/doc/efun/member b/doc/efun/member
index 9f0e66a..2ef5b42 100644
--- a/doc/efun/member
+++ b/doc/efun/member
@@ -1,12 +1,13 @@
 SYNOPSIS
-        int member(mixed *array, mixed elem [, int start]);
-        int member(string s, int elem [, int start]);
-        int member(mapping map, mixed key);
+        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)
 
 BESCHREIBUNG
-        Fuer Arrays und String liefert member() den Index des ersten
-        Auftretens von <elem> in <arg>. Ist <elem> nicht in <arg> enthalten,
-        wird -1 zurueck gegeben.
+        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.
 
         Ist <start> als Zahl >= 0 gegeben, beginnt die Suche ab der
         angegebenen Position. Eine Startposition groesser als die
@@ -15,10 +16,8 @@
         Fuer Mapping prueft member(), ob <key> in <map> enthalten ist und
         liefert 1 zurueck falls ja, 0 sonst.
 
-BEISPIELE
-        member( ({ "abc", "defg" }), "defg" ) = 1
-        member( ({ "abc", "defg" }), "x" ) = -1
-        member( "abcdefg", 100 ) = member( "abcdefg", 'd' ) = 3
+GESCHICHTE
+        LDMud 3.3.556 fuegte den <start>-Parameter hinzu.
 
 SIEHE AUCH
-        rmember(E), mappings(LPC)
\ No newline at end of file
+        rmember(E), mappings(LPC)
diff --git a/doc/efun/min b/doc/efun/min
index c11f9b5..3ec81a7 100644
--- a/doc/efun/min
+++ b/doc/efun/min
@@ -1,21 +1,21 @@
 SYNOPSIS
-        string min(string arg, ... );
-        string min(string *arg_array);
-        int|float min(int|float arg, ...);
-        int|flaot min(int|float *arg_array);
+        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.
 
-BEISPIEL
+BEISPIELE
         min(1)                      -> liefert 1
         min(1, -1.1)                -> liefert -1.1
         min("bla", "fasel")         -> liefert "bla"
         min( ({ "bla", "fasel" }) ) -> liefert "bla"
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.9.
 
 SIEHE AUCH
diff --git a/doc/efun/mkdir b/doc/efun/mkdir
index 8c7a683..1562498 100644
--- a/doc/efun/mkdir
+++ b/doc/efun/mkdir
@@ -1,5 +1,5 @@
 SYNOPSIS
-        int mkdir(string path);
+        int mkdir(string path)
 
 BESCHREIBUNG
         Erstellt ein Verzeichnis <path> und liefert 1, wenn das Verzeichnis
diff --git a/doc/efun/mkmapping b/doc/efun/mkmapping
index 75cf827..477d471 100644
--- a/doc/efun/mkmapping
+++ b/doc/efun/mkmapping
@@ -1,37 +1,30 @@
 SYNOPSIS
-        mapping mkmapping(mixed *arr1, mixed *arr2, mixed *arr3, ...);
-        mapping mkmapping(struct st);
+        mapping mkmapping(mixed *arr1, mixed *arr2, mixed *arr3, ...)
+        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,
+        ungleich gross sind, enthaelt das Mapping nur so viele Eintraege
         wie im kleinsten Datenarray enthalten sind.
 
         Die zweite Form konvertiert die angegebene struct <st> in ein Mapping.
         Hierbei werden die Namen des jeweiligen Elementes in der struct als
-        als Schluessel.
+        Schluessel verwendet.
 
-        Gewoehnlich werden Mappings erweitert, indem einfach neue Elemente
-        eingefuegt werden. Diese Funktion ist nuetzlich, wenn der
-        ungefaehr benoetigte Speicherplatz bereits vorher bekannt ist,
-        um so den Overhead bei der Speicherallokation zu minimieren.
-        Allenfalls zu viel allozierter Speicher wird freigegeben, sobald
-        die Funktion, die die mkmapping() Anweisung enthaelt, beendet ist.
-
-BESIPIEL
-        mkmapping( ({ 1, 2 }), ({ 10, 11 }), ({ 20, 21, 22}));
+BEISPIELE
+        mkmapping( ({ 1, 2 }), ({ 10, 11 }), ({ 20, 21, 22}))
           liefert ([ 1:10;20, 2:11;21 ])
 
-        struct s { int a, b, c; };
-        mkmapping( (<s> 1, ({ 2, 3 }), 3 )
+        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 ])
 
-AeNDERUNGEN
+GESCHICHTE
         LDMud 3.3.433 ermoeglichte die Konversion von structs.
 
-VERGLEICHE
+SIEHE AUCH
         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 b71227b..e750e37 100644
--- a/doc/efun/mktime
+++ b/doc/efun/mktime
@@ -1,11 +1,11 @@
 SYNOPSIS
-        #include <sys/time.h>
+        #include <time.h>
 
-        int mktime(int *ts);
+        int mktime(int *ts)
 
 BESCHREIBUNG
-        Ist das Argument <ts> ein Array mit 9 Elementen (int), entsprechend
-        des Rueckgabewertes von local_time()/gm_time(), liefert die Funktion
+        Ist das Argument <ts> ein Array mit 9 Elementen (int) entsprechend
+        des Rueckgabewertes von local_time()/gm_time(), so liefert die Funktion
         die Anzahl Sekunden seit dem 01. Januar 1970, 00:00:00 zurueck.
         Dies ist von Nutzen, wenn man ein Datum/Uhrzeit hat, diese aber als
         Ganzzahl-Wert speichern will oder eine Zeitdifferenz zwischen zwei
@@ -22,17 +22,17 @@
             int TM_YDAY   (7):  Tag im Jahr (0..365)
             inz TM_ISDST  (8):  TRUE: Daylight Saving Time
 
-      TM_YDAY und TM_WDAY werden ignoriert und koennen beliebige Zahlen
-      enthalten.
+        TM_YDAY und TM_WDAY werden ignoriert und koennen beliebige Zahlen
+        enthalten.
 
-BEISPIEL
-      Man hat ein Datum/Uhrzeit (z.B. Benutzereingabe), welches als
-      Unix-Zeitstmepel 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}) );
+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}));
       
-AENDERUNGEN
-        Eingefuehrt in LDMud 3.3.71x
+GESCHICHTE
+        Eingefuehrt in LDMud 3.3.718.
 
 SIEHE AUCH
-    ctime(E), gmtime(E), local_time(E), time(E), utime(E)
+        ctime(E), gmtime(E), local_time(E), time(E), utime(E)
diff --git a/doc/efun/move_object b/doc/efun/move_object
index 48b23e9..f8d4572 100644
--- a/doc/efun/move_object
+++ b/doc/efun/move_object
@@ -1,18 +1,18 @@
-SYNOPSIS:
+GESCHUETZT
+SYNOPSIS
         void move_object(mixed item, mixed dest)
 
-        item->move(object dest, string methods)
+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 a object_name or an object, is moved into
-	it's new environment dest, which can also be object_name or an
-	object.  In native mode, the only object that can be moved
-	with move_object() is the calling object itself. This function
-	is only used to implement the lfun move().
-        
-        Use the lfun move() instead by inheriting standard objects.
-	move() must be called in the object to be moved. This gives
-	the moved object full control over its movement.
+        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.
 
-SEE ALSO:
-        move(L), remove(L), init(L), transfer(E), native(C)
+        In der traditionellen Implemenierung war <item> im COMPAT-Modus auf
+        das aufrufende Objekt beschraenkt.
+
+SIEHE AUCH
+        remove(A), init(A), transfer(E), native(C), hooks(C),
+        set_environment(E)
diff --git a/doc/efun/negate b/doc/efun/negate
index b1f0bdf..a496966 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 arg)
+        float negate(float arg)
 
 BESCHREIBUNG
         Liefert den negativen Wert von <arg>.
diff --git a/doc/efun/net_connect b/doc/efun/net_connect
index f3aae2f..41c9dd9 100644
--- a/doc/efun/net_connect
+++ b/doc/efun/net_connect
@@ -1,4 +1,5 @@
 SYNOPSIS
+        #include <comm.h>
         int net_connect(string host, int port)
 
 BESCHREIBUNG
@@ -7,7 +8,19 @@
         aufrufenden Objekt gebunden und die lfun logon() wird in dem
         Objekt aufgerufen.
 
-        Resultat ist 0 bei Erfolg, und eine Unix ERRNO bei Misserfolg.
+        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)
 
         Ist der Driver fuer IPv6 konfiguriert, wird <host> erst als
         IPv6-Name interpretiert, und wenn das fehlschlaegt, als
diff --git a/doc/efun/next_bit b/doc/efun/next_bit
index 31fb90a..b96f539 100644
--- a/doc/efun/next_bit
+++ b/doc/efun/next_bit
@@ -1,6 +1,6 @@
 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
@@ -16,7 +16,7 @@
         ist der Leerschlag " " mit dem Wert 0. Das erste Zeichen im String
         ist jenes mit den niedrigsten Bits (0-5).
 
-BEISPIEL
+BEISPIELE
         string s;
         int p;
 
diff --git a/doc/efun/next_inventory b/doc/efun/next_inventory
index 61370a0..7062ba1 100644
--- a/doc/efun/next_inventory
+++ b/doc/efun/next_inventory
@@ -1,17 +1,14 @@
 SYNOPSIS
-        object next_inventory();
-        object next_inventory(object ob);
+        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.
 
-        Diese Efun wird meistens zusammen mit first_inventory() verwendet
-        um ueber Raum- und Containerinhalte zu iterieren.
+        Diese Efun wird meistens zusammen mit first_inventory() verwendet.
         Fuer ein Beispiel siehe dort.
 
 SIEHE AUCH
         first_inventory(E), all_inventory(E), environment(E),
         deep_inventory(E)
-
-7.Aug 2007 Gloinson
\ No newline at end of file
diff --git a/doc/efun/notify_fail b/doc/efun/notify_fail
new file mode 100644
index 0000000..a18da94
--- /dev/null
+++ b/doc/efun/notify_fail
@@ -0,0 +1,36 @@
+SYNOPSIS
+        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.
+
+        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.
+
+        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.
+
+BEISPIELE
+        Verwendet man
+
+                return notify_fail(message);
+
+        anstelle von 
+
+                write(message); return 1;
+
+        erhalten andere Objekte ihre Chance, das Kommando
+        (erfolgreich) auszufuehren.
+
+SIEHE AUCH
+        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 4a773fc..89263f0 100644
--- a/doc/efun/object_info
+++ b/doc/efun/object_info
@@ -1,202 +1,126 @@
+GESCHUETZT
 SYNOPSIS
-        #include <object_info.h>
+        #include <objectinfo.h>
 
-        mixed object_info(object ob, int what)
+        mixed * object_info(object ob, int what)
+        mixed * object_info(object ob, int what, int index)
 
-DESCRIPTION
-        Returns some internal information about object <ob>. The
-        Argument <what> determines which information is returned.
+BESCHREIBUNG
+        Liefert einige interne Informationen ueber das Objekt <ob> in Form
+        eines Arrays. Das Argument <what> gibt an, welche Informationen
+        geliefert werden.
 
-        It can be either a configuration option as given to
-        configure_object() or one of the following options:
+        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:
 
-        Object Flags:
+        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> == OI_ONCE_INTERACTIVE:
-           1 if <ob> was once (or still is) interactive, 0 else.
+        <what> == OINFO_POSITION:
 
-        <what> == OI_RESET_STATE:
-           1 if <ob> is (still) reset, 0 else.
+        Dieser Aufruf liefert Informationen ueber die Position von <ob> in der
+        globalen Objektliste:
 
-        <what> == OI_WILL_CLEAN_UP:
-           1 if <ob>'s clean_up() will be called, 0 else.
+        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.
 
-        <what> == OI_LAMBDA_REFERENCED:
-           1 if <ob> has lambdas (and there replace_program()
-           is not allowed anymore), 0 else.
+        Dieser Aufruf kann aufwendig an Rechenzeit sein.
 
-        <what> == OI_REPLACED:
-           1 if the program for <ob> was replaced, 0 else.
+        <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.
 
-        Program Flags:
+        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.
 
-        <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.
+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
 
-        <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), interactive_info(E), driver_info(E)
+SIEHE AUCH
+        debug_info(E)
diff --git a/doc/efun/object_name b/doc/efun/object_name
index 6ba82ed..b329ca9 100644
--- a/doc/efun/object_name
+++ b/doc/efun/object_name
@@ -1,26 +1,35 @@
-SYNOPSIS:
-    string object_name()
-    string object_name(object ob)
+SYNOPSIS
+        string object_name()
+        string object_name(object ob)
 
-DESCRIPTION:
-    Get the file name of an object or if no argument is given of the current
-    object. If the object is a cloned object, then it will not have a
-    corresponding file name, but rather a new name based on the original
-    file name.
-        
-    The returned name always begins with '/' (absolute path),
-  	except when the parser runs in COMPAT (-o) mode.
+BESCHREIBUNG
+        Liefert den Namen des Objekts <ob> oder des aktuellen Objekts, wenn
+        <ob> nicht angegeben wurde.
 
-EXAMPLES:
-    find_object(object_name(ob)) == ob    
-    This is guaranteed to be true for all objects ob that are not
-   	destructed.
-        
-    sizeof(explode(object_name(ob), "#")) == 1  
-    This is always true if ob is a blue print.
-        
-SEE ALSO:
-        find_object(E)
+        Als Spezialfall liefert die Funktion 0, wenn <ob> 0 ist.
 
-29.10.2006 Zesstra
+        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.
 
+        Der Name eines Objekts kann mit rename_object() geaendert werden.
+        object_name() beruecksichtigt alle diese Aenderungen.
+
+        Der zurueck gegebene Name beginnt immer mit '/' (absoluter Pfad),
+        ausser wenn der Driver im COMPAT-Modus laeuft.
+
+BEISPIELE
+        find_object(object_name(ob)) == ob
+
+        Dies ist immer wahr fuer alle Objekte <ob>, die nicht zerstoert sind.
+
+GESCHICHTE
+        0 als Argument wird seit 3.2.9 akzeptiert.
+
+SIEHE AUCH
+        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 db4d91c..3100dbc 100644
--- a/doc/efun/object_time
+++ b/doc/efun/object_time
@@ -1,6 +1,6 @@
 SYNOPSIS
-        int object_time();
-        int object_time(object ob);
+        int object_time()
+        int object_time(object ob)
 
 BESCHREIBUNG
         Liefert die Zeit, zu der das Objekt <ob> erstellt wurde. Wird <obj>
diff --git a/doc/efun/objectp b/doc/efun/objectp
index 2b0758c..4183fba 100644
--- a/doc/efun/objectp
+++ b/doc/efun/objectp
@@ -1,9 +1,9 @@
 SYNOPSIS
-        int objectp(mixed arg);
+        int objectp(mixed arg)
 
 BESCHREIBUNG
         Liefert 1, wenn <arg> ein Objekt ist.
 
 SIEHE AUCH
-        clonep(E), intp(E), stringp(E), pointerp(E), symbolp(E),
-        referencep(E), symbolp(E)
+        clonep(E), intp(E), stringp(E), bytesp(E), pointerp(E),
+        symbolp(E), referencep(E), symbolp(E)
diff --git a/doc/efun/or_bits b/doc/efun/or_bits
index 25406e4..98a558d 100644
--- a/doc/efun/or_bits
+++ b/doc/efun/or_bits
@@ -1,5 +1,5 @@
 SYNOPSIS
-        string or_bits(string str1, string str2);
+        string or_bits(string str1, string str2)
 
 BESCHREIBUNG
         <str1> und <str2> sind beides Bitstrings. Das Resultat von or_bits()
@@ -12,7 +12,7 @@
         ist der Leerschlag " " mit dem Wert 0. Das erste Zeichen im String
         ist jenes mit den niedrigsten Bits (0-5).
 
-BEISPIEL
+BEISPIELE
         string s1, s2, s3;
 
         s1 = set_bit("", 3); s1 = set_bit(s1, 15);  -> s1 is "( ("
diff --git a/doc/efun/pow b/doc/efun/pow
index f0ff586..c069690 100644
--- a/doc/efun/pow
+++ b/doc/efun/pow
@@ -1,16 +1,16 @@
 SYNOPSIS
-        float pow(int|flaot base, int|flaot exp);
+        float pow(int|float base, int|float exp)
 
 BESCHREIBUNG
         Die Potenzfunktion. Sie liefert das Resultat von "<base> hoch <exp>".
 
-BEISPIEL
-        pow(-2, 3) -> liefert -8.0
+BEISPIELE
+        pow(-2, 3)      -> liefert -8.0
         pow(8, 1.0/3.0) -> liefert 2.0
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.7.
-        LDMud 3.2.9. erlaubte neu Integer als Argumente.
+        LDMud 3.2.9 erlaubte Integer als Argumente.
 
 SIEHE AUCH
         exp(E), log(E)
diff --git a/doc/efun/present b/doc/efun/present
index 7b7d8d3..2a9d0be 100644
--- a/doc/efun/present
+++ b/doc/efun/present
@@ -19,21 +19,14 @@
         Ist <n> nicht gegeben, aber <str> hat die Form "<id> <n>" , wird
         ebenfalls das n-te Objekt mit Namen <id> zurueckgeliefert.
 
-        Es ist: id(str) { return str == <name>; }
+        <str> kann auch ein Objekt (anstatt einer Id) sein, was den Test
+        schneller und einfacher macht.
 
-        <str> kann auch ein Objekt (anstatt einem object_name()) sein, was den
-        Test schneller und einfacher macht.
+        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.
 
-        Das Argument <env> ist optional. <env> gibt an, wo nach <str> gesucht
-        wird. Nur das Inventory von <env> wird durchsucht, nicht jedoch dessen
-        Umgebung. Oftmals wird fuer <env> this_player() gesetzt.
-
-
-ANMERKUNG
-        Diese efun kann u.U. _sehr_ teuer sein! Bitte schaut euch auf jeden
-        Fall auch die efun present_clone() an und schaut, ob die evtl. das
-        kann, was ihr machen wollt. present_clone() ist erheblich billiger.
-
+ANMERKUNGEN
         Wenn die efun sowohl in this_object() als auch dessen Umgebung
         sucht, werden, soweit es die Numerierung betrifft, die beiden
         Umgebungen zusammenhaengend betrachtet.
@@ -70,7 +63,7 @@
                 }
             }
 
-HISTORY
+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
diff --git a/doc/efun/present_clone b/doc/efun/present_clone
index cd64488..e061237 100644
--- a/doc/efun/present_clone
+++ b/doc/efun/present_clone
@@ -1,41 +1,53 @@
 VORLAEUFIG
 SYNOPSIS
-        object present_clone(string str [, object env] );
-        object present_clone(object obj [, object env] );
+        object present_clone(string str)
+        object present_clone(string str, int n)
+        object present_clone(string str, object env)
+        object present_clone(string str, object env, int n)
+
+        object present_clone(object obj)
+        object present_clone(object obj, int n)
+        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
+        einem bestimmten Blueprint. Wird <env> nicht angegeben, wird in
         this_object() gesucht. Der Blueprint kann entweder mit seinem Namen
-        <str> angegeben werden, oder als Blueprint des Objekts <obj>. Gesucht
+        <str> angegeben oder als Blueprint des Objekts <obj> werden. Gesucht
         wird in beiden Faellen aufgrund von load_name().
-        Wird kein passendes Objekt gefunden, liefert die Efun 0 zurueck.
+        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.
 
 BEISPIELE
-        Angenommen, das Objekt <env> enthalte die Objekte /items/money#8,
+        Angenommen, das Objekt <env> enthalte die Objekte /obj/money#8,
         /std/weapon#9, /std/weapon#12 und /obj/key in der angegeben
         Reihenfolge.
 
         +--------------------------------------------------+---------------+
         | Funktion                                         | Liefert       |
         +--------------------------------------------------+---------------+
-        | present_clone("/items/money", env)               | /items/money#8|
+        | present_clone("/obj/money", env)                 | /obj/money#8  |
         | present_clone("/std/weapon#12", env)             | /std/weapon#9 |
-        | present_clone(find_object("/items/money#1"), env)| /items/money#8|
+        | present_clone(find_object("/obj/money#14"), env) | /obj/money#8  |
         | present_clone("/obj/key#18", env)                | /obj/key      |
+        | present_clone("/std/weapon#12", env, 2)          | /std/weapon#12|
+        | present_clone("/std/weapon#12", env, 3)          | 0             |
         +--------------------------------------------------+---------------+
 
         Fuer Driver im Compat Modus liefert die Funktion keine '/' am Anfang.
 
-AENDERUNGEN
-        Eingefuehrt in 3.2.7.
-
-ANMERKUNG
+ANMERKUNGEN
         Im Unterschied zu present() sucht present_clone() niemals in der
         Umgebung von <env>.
 
+GESCHICHTE
+        Eingefuehrt in 3.2.7.
+        Die Suche nach dem <n>-ten Objekt wurde in 3.3.718 ergaenzt.
+
 SIEHE AUCH
         load_name(E), present(E)
diff --git a/doc/efun/previous_object b/doc/efun/previous_object
index 6a712ad..086c2fa 100644
--- a/doc/efun/previous_object
+++ b/doc/efun/previous_object
@@ -1,14 +1,12 @@
 SYNOPSIS
-        object previous_object();
-        object previous_object(int i);
+        object previous_object()
+        object 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.
-        Bei einem Aufruf einer eigenen Funktion durch ein Objekt bleibt das
-        bisherige previous_object() unveraendert.
 
         Wird das Argument <i> angegeben, so verfolgt previous_object() den
         Aufruf <i> Stufen zurueck. Zum Beispiel liefert previous_object(1) das
@@ -18,23 +16,22 @@
 
         Es gibt einen wichtigen Spezialfall: in Funktionen, die vom Gamedriver
         auf Grund eines externen Ereignises aufgerufen wurden (zum Beispiel
-        Kommandi, die mit add_action() definiert wurden), liefert
-        previous_object() this_object(), previous_object(0) hingegen 0.
+        Kommandos, die mit add_action() definiert wurden), liefert
+        previous_object() den Wert von this_object(), previous_object(0)
+        hingegen 0.
 
-BEISPIEL
-        int sicherheitscheck()
-        {
+BEISPIELE
+        int sicherheitscheck() {
             object prev;
-            if(!(prev=previous_object()));
-            else if(getuid(prev)!=getuid(this_object()));
-            else if(geteuid(prev)!=geteuid(this_object()));
+            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())
-            return;
+        void sensible_funktion() {
+            if (!sicherheitscheck())
+                return;
             ...
         }
 
@@ -46,5 +43,5 @@
         Werte von <i> < 0 werden wie <i> == 0 behandelt - dies ist historisch.
 
 SIEHE AUCH
-        call_other(E), this_object(E), this_player(E)
-        caller_stack(E), caller_stack_depth(E), extern_call(E)
\ No newline at end of file
+        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 d58233b..f0e1eda 100644
--- a/doc/efun/printf
+++ b/doc/efun/printf
@@ -1,5 +1,5 @@
 SYNOPSIS
-        void printf(string format, ...);
+        void printf(string format, ...)
 
 BESCHREIBUNG
         Eine Mischung aus sprintf() und write(). Gibt void zurueck und den
diff --git a/doc/efun/program_name b/doc/efun/program_name
index 44162d5..2b76917 100644
--- a/doc/efun/program_name
+++ b/doc/efun/program_name
@@ -8,7 +8,7 @@
         verwendet.
 
         Der Name ist fuer Clones der Name des Files, aus dem der Blueprint
-        kompliert wurde. Der Name wechselt, wenn ein Objekt sein Programm
+        kompiliert wurde. Der Name wechselt, wenn ein Objekt sein Programm
         durch replace_program() aendert.
 
         Fuer den Spezialfall, dass <obj> als 0 uebergeben wird, liefert
@@ -17,7 +17,7 @@
         Der Name endet immer mit '.c'. Er beginnt mit einem '/', wenn der
         Driver sich nicht im Compat Modus befindet.
 
-BEISPIEL
+BEISPIELE
         object o;
         o = clone_object("/std/dings");
         write(program_name(o));
@@ -26,13 +26,13 @@
         --> "/std/dings.c", wenn der Driver nicht im Compat Modus laeuft.
         --> "std/dings.c", wenn der Driver im Compat Modus laeuft.
 
-AENDERUNGEN
+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.
 
-ANMERKUNG
-        Die Efun swapt zum Programm, wenn dieses geswapt ist.
-
 SIEHE AUCH
         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 62a6297..782d8d7 100644
--- a/doc/efun/program_time
+++ b/doc/efun/program_time
@@ -1,17 +1,14 @@
 SYNOPSIS
         int program_time()
-        int program_time(object ob)
+        int program_time(object obj)
 
-DESCRIPTION
-        Returns the creation (compilation) time of the object's
-        program. In other words, this is the object_time() of
-        the blueprint.
+BESCHREIBUNG
+        Gibt den Zeitpunkt an, zu dem das Objekt <obj> (bzw. this_object(),
+        wenn nichts angegeben wurde) erzeugt, d.h. kompiliert wurde.
 
-        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.
-
-SEE ALSO
+SIEHE AUCH
         object_time(E), program_name(E)
diff --git a/doc/efun/query_actions b/doc/efun/query_actions
index 90acaba..688ddc3 100644
--- a/doc/efun/query_actions
+++ b/doc/efun/query_actions
@@ -1,7 +1,8 @@
 SYNOPSIS
-        #include <sys/commands.h>
+        #include <commands.h>
+        #include <sent.h>
 
-        mixed *query_actions(object|string ob, mixed mask_or_verb);
+        mixed * query_actions(object|string ob, mixed mask_or_verb)
 
 BESCHREIBUNG
         Das erste Argument von query_actions() ist entweder ein Objekt
@@ -22,8 +23,8 @@
             QA_OBJECT       ( 8):   das Objekt,
             QA_FUNCTION     (16):   die Funktion.
 
-        Der Typ ist ein Wert wie in <sent.h> (bzw. /sys/sent.h) definiert,
-        der vom Parser Quellcode geliefert wird.
+        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
diff --git a/doc/efun/query_command b/doc/efun/query_command
index bbabdbd..e42e4da 100644
--- a/doc/efun/query_command
+++ b/doc/efun/query_command
@@ -1,5 +1,5 @@
 SYNOPSIS
-        string query_command();
+        string query_command()
 
 BESCHREIBUNG
         Liefert den Text des aktuellen Kommandos oder 0, wenn keines
@@ -9,20 +9,19 @@
         modify_command() ausgefuehrt und nachfolgende Leerzeichen
         abgeschnitten wurden.
 
-        query_command() liefert 0, wenn es von einer Funktion gestartet wurde,
-        die wiederum von einem call_out() oder dem heart_beat() aufgerufen
-        wurde. Auch Kommandi, die beim Userlogin aufgerufen werden, liefern 0.
+        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.
 
-BEISPIEL
-        void init()
-        {
+BEISPIELE
+        void init() {
             ...
             add_action("sing","sing");
             ...
         }
 
-        int sing(string str)
-        {
+        int sing(string str) {
             write("Dein Kommando war:"+query_command()+"\n");
             return 1;
         }
diff --git a/doc/efun/query_notify_fail b/doc/efun/query_notify_fail
index 3d98423..ef3a521 100644
--- a/doc/efun/query_notify_fail
+++ b/doc/efun/query_notify_fail
@@ -1,6 +1,6 @@
 SYNOPSIS
-        mixed query_notify_fail();
-        mixed query_notify_fail(int flag);
+        mixed query_notify_fail()
+        mixed query_notify_fail(int flag)
 
 BESCHREIBUNG
         Wenn <flag> nicht angegeben oder 0 ist, liefert die Funktion den String
@@ -9,10 +9,7 @@
 
         Wurde keine Meldung gesetzt, wird 0 geliefert.
 
-        Ist <flag> != 0 wird das Objekt zurueckgeliefert, was das letzte
-        Notify-Fail gesetzt hat.
-
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.7.
         LDMud 3.2.8 fuegte den Paramter <flag> hinzu.
 
diff --git a/doc/efun/query_verb b/doc/efun/query_verb
index f216591..2890174 100644
--- a/doc/efun/query_verb
+++ b/doc/efun/query_verb
@@ -1,36 +1,24 @@
 SYNOPSIS
-        string query_verb();
-        string query_verb(int flag);
+        string query_verb()
+        string query_verb(int flag)
 
 BESCHREIBUNG
         Liefert das Verb des aktuellen Kommandos oder 0, wenn kein Kommando
-        bearbeitet wird.
+        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.
 
-        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.
-
-        Innerhalb einer add_action()-Funktion, die von mehreren Kommandos
-        aufgerufen wird kann man so zwischen diesen Kommandos unterscheiden.
-
-BEMERKUNGEN
-        Die fruehere Einschraenkung, dass bei geschachtelten Kommandos
-        query-verb() nach dem inneren Kommando 0 zurueck gibt ist jetzt
-        entfallen.
-
-BEISPIEL
-        void init()
-        {
+BEISPIELE
+        void init() {
             ...
             add_action("sing","singe");
             add_action("sing","jodel", 1);
             ...
         }
 
-        int sing(string str)
-        {
+        int sing(string str) {
             write("Das Kommando war:"+query_verb()+(str ? str : "")+"\n");
             write("Das Verb war:"+query_verb(1)+(str ? str : "")+"\n");
         }
@@ -47,7 +35,8 @@
             Das Kommando war: jodele
             Das Verb war: jodel
 
-SIEHE AUCH
-        query_command(E), add_action(E), AddCmd(L), AddAction(L)
+GESCHICHTE
+        LDMud 3.2.9. fuehrte das optionale Argument <flag> ein.
 
-7.Aug 2007 Gloinson
\ No newline at end of file
+SIEHE AUCH
+        add_action(E), query_command(E)
diff --git a/doc/efun/quote b/doc/efun/quote
index ce01fd7..926d71f 100644
--- a/doc/efun/quote
+++ b/doc/efun/quote
@@ -1,13 +1,16 @@
 SYNOPSIS
-        mixed quote(mixed arg);
+        mixed quote(mixed arg)
 
 BESCHREIBUNG
         Konvertiert ein Array zu einem quoted Array und Strings zu Symbolen.
         Symbole und quoted Arrays werden erneut gequoted.
 
-BEISPIEL
+BEISPIELE
         quote("foo") -> 'foo
         quote(({1,2,3})) -> '({1,2,3})
 
+GESCHICHTE
+        Eingefuehrt in 3.2@70.
+
 SIEHE AUCH
         sympolp(E), unquote(E)
diff --git a/doc/efun/read_bytes b/doc/efun/read_bytes
index 95cabbd..c42109c 100644
--- a/doc/efun/read_bytes
+++ b/doc/efun/read_bytes
@@ -1,5 +1,5 @@
 SYNOPSIS
-        string read_bytes(string file, int start, int anzahl)
+        bytes read_bytes(string file, int start, int anzahl)
 
 BESCHREIBUNG
         Liest eine bestimmte Anzahl Bytes aus dem File <file>. Wenn <start>
diff --git a/doc/efun/read_file b/doc/efun/read_file
index 7f1ccfc..3c58ec1 100644
--- a/doc/efun/read_file
+++ b/doc/efun/read_file
@@ -1,5 +1,5 @@
 SYNOPSIS
-        string read_file(string file, int start, int anzahl)
+        string read_file(string file, int start, int anzahl, string encoding)
 
 BESCHREIBUNG
         Liest Zeilen aus einem File <file>. Wenn <start> angegeben ist und
@@ -9,11 +9,18 @@
         Wenn <anzahl> nicht angegeben oder 0 ist, wird das gesamte File
         gelesen, sonst nur <anzahl> Zeilen.
 
+        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.
+
         Wenn <start> ausserhalb der Groesse des Files liegt, liefert
         read_file() anstelle eines Strings 0 zurueck.
 
         Die max. Anzahl einzulesender Bytes (nicht Zeilen!) pro Aufruf dieser
         Funktion betraegt LIMIT_FILE (s. query_limits()).
 
+GESCHICHTE
+        LDMud 3.6.0 fuegte den <encoding>-Parameter hinzu.
+
 SIEHE AUCH
-        read_bytes(E), write_file(E)
+        read_bytes(E), write_file(E), hooks(C)
diff --git a/doc/efun/referencep b/doc/efun/referencep
index 5c2c0df..fa4bdda 100644
--- a/doc/efun/referencep
+++ b/doc/efun/referencep
@@ -9,5 +9,5 @@
         uebergeben werden muss, z. B. referencep(&x).
 
 SIEHE AUCH
-        closurep(E), floatp(E), mappingp(E), objectp(E), intp(E),
+        bytesp(E), closurep(E), floatp(E), mappingp(E), objectp(E), intp(E),
         pointerp(E), stringp(E), symbolp(E), clonep(E), references(LPC)
diff --git a/doc/efun/regexp b/doc/efun/regexp
index 354e6a6..c8f8910 100644
--- a/doc/efun/regexp
+++ b/doc/efun/regexp
@@ -1,41 +1,62 @@
 SYNOPSIS
-        #include <regexp.h>
+        string * regexp(string *list, string pattern)
 
-        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.
 
-EXAMPLE
+        $ 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
         string strs;
-        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 (strs = regexp(({ "Bitte helfen sie mir, Sir John." }),
+                          "\\<helfen\\>.*\\<mir\\>")) {
            if (sizeof(strs)
-              write("It matches.\n");
+              write("Es passt.\n");
         }
 
-        The regular expression will test the given string (which is
-        packed into an array) if there is something like "help ... me"
-        inside of it.
+        Der regulaere Ausdruck wird den uebergebenen String (welcher in
+	einem Array verpackt wurde) daraufhin ueberpruefen, ob
+	sowas wie "helfen ... mir" darin vorkommt.
 
-HISTORY
-        LDMud 3.3 added the optional <opt> argument.
+GESCHICHTE
+        LDMud 3.2.9 fuegte das Sonderzeichen '+' hinzu.
 
-SEE ALSO
-        regexplode(E), regmatch(E), regreplace(E), regexp_package(E), sscanf(E),
-        regexp(C)
+SIEHE AUCH
+        regexplode(E), regreplace(E), sscanf(E)
diff --git a/doc/efun/regreplace b/doc/efun/regreplace
index d459bb2..e0e7cf3 100644
--- a/doc/efun/regreplace
+++ b/doc/efun/regreplace
@@ -1,57 +1,51 @@
-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
-     // ersetzt @@wer@@ durch den Namen des Objektes
-     regreplace(str,"@@wer@@",(string)obj->name(WER,2),1)
-
-     // ersetze alle doppelten Leerzeichen durch ein einzelnes
-     regreplace(str, "  *", " ", 1);
-
-     // 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", #'lower_case, 1);
-
-BUGS:
-     I have written that efun. It doesn't have BUGS. By definition.
-     Well, in fact it crashed as I first tried it on running TAPPMud.
-     *sigh*
-     Marcus@TAPPMud
-
-SIEHE AUCH
-     Verwandt: regexp(E), regexplode(E), sscanf(E)
-     Aehnlich: replace_personal(L)
+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)
diff --git a/doc/efun/remove_action b/doc/efun/remove_action
index b939a51..8dee7bf 100644
--- a/doc/efun/remove_action
+++ b/doc/efun/remove_action
@@ -1,6 +1,6 @@
 SYNOPSIS
-        int remove_action(int|string verb);
-        int remove_action(int|string verb, object obj);
+        int remove_action(int|string verb)
+        int remove_action(int|string verb, object obj)
 
 BESCHREIBUNG
         Wenn <verb> ein String ist: entferne das erste im Objekt <obj> durch
@@ -10,12 +10,14 @@
         sonst 0.
 
         Wenn <verb> ein Integer ist: wenn verb nicht 0 ist, entferne alle
-        durch das Objekt <obj> definierten Kommandi. Wenn <obj> nicht
+        durch das Objekt <obj> definierten Kommandos. Wenn <obj> nicht
         angegeben wird, wird standardmaessig this_player() verwendet. Gibt
-        die Anzahl der entfernten Kommandi zurueck.
+        die Anzahl der entfernten Kommandos zurueck.
+
+GESCHICHTE
+        Eingefuehrt seit 3.2.1.
+        LDMud 3.2.10 fuehrte zusaetzlich die Moeglichkeit ein, alle Kommandos
+        auf einmal zu entfernen.
 
 SIEHE AUCH
-     Verwandt:      add_action(E), init(E)
-     Alternativ:	AddAction(L), AddCmd(L)
-
-7.Aug 2007 Gloinson
+        add_action(E), move_object(E)
diff --git a/doc/efun/remove_call_out b/doc/efun/remove_call_out
index d5a22db..38f0795 100644
--- a/doc/efun/remove_call_out
+++ b/doc/efun/remove_call_out
@@ -1,21 +1,21 @@
 SYNOPSIS
-        int remove_call_out(string fun);
-        int remove_call_out(closure fun);
+        int remove_call_out(string fun)
+        int remove_call_out(closure fun)
 
-BESCHREIBUNG:
-        Entfernt den naechsten laufenden call_out() auf die Funktion <fun>
-        im aktuellen Objekt bzw. den naechsten laufenden call_out() auf die
-        Closure <fun>. Die verbleibende Zeit wird zurueckgeliefert.
+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.
 
-        Wenn es keine laufenden call_out()s auf gibt, wird -1 zurueck
-        geliefert.
+        Wenn es keine anhaengigen call_out()s auf <fun> gibt, wird -1
+        zurueckgeliefert.
 
-BEISPIEL
+BEISPIELE
         Um alle call_out()s auf MeineFunktion() zu entfernen:
 
-        while(remove_call_out("MeineFunktion") != -1);      /* wiederhole */
+        while (remove_call_out("MeineFunktion") != -1);      /* wiederhole */
 
-BUGS
+FEHLER
         Das Entfernen von call_out()s auf Closures funktioniert nur, wenn der
         exakt gleiche Wert fuer die Closure verwendet wird.
 
@@ -28,5 +28,9 @@
             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
         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 7cd9393..40dbd68 100644
--- a/doc/efun/remove_input_to
+++ b/doc/efun/remove_input_to
@@ -1,12 +1,12 @@
 SYNOPSIS
-        int remove_input_to (object player);
-        int remove_input_to (object player, string fun);
-        int remove_input_to (object player, closure fun);
-        int remove_input_to (object player, object fun);
-        int remove_input_to (object player, object obj, string fun);
+        int remove_input_to(object player)
+        int remove_input_to(object player, string fun)
+        int remove_input_to(object player, closure fun)
+        int remove_input_to(object player, object fun)
+        int remove_input_to(object player, object obj, string fun)
 
 BESCHREIBUNG
-        Entfernt ein haengiges input_to() aus dem interaktiven Playerobjekt.
+        Entfernt ein anhaengiges input_to() aus dem interaktiven Playerobjekt.
         Wenn <fun> nicht angegeben ist, wird der zuletzt aufgerufen input_to()
         entfernt.
 
@@ -26,12 +26,12 @@
         kein haengiges input_to() auf dem Objekt).
 
 BEISPIELE
-        Entfernt alle haengigen input_to()s des aktuellen Spielers, falls
-        vorhanden:
-            while(remove_input_to(this_interactive()));
+        Entfernt alle anhaengigen input_to()s des aktuellen Spielers,
+        falls vorhanden:
+            while (remove_input_to(this_interactive()));
 
-AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.9.
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.9 / 3.3.119.
 
 SIEHE AUCH
         input_to(E), find_input_to(E), input_to_info(E),
diff --git a/doc/efun/remove_interactive b/doc/efun/remove_interactive
index 0d6d200..269bac3 100644
--- a/doc/efun/remove_interactive
+++ b/doc/efun/remove_interactive
@@ -1,13 +1,14 @@
 SYNOPSIS
-        void remove_interactive(object ob)
+        void remove_interactive(object obj)
 
-DESCRIPTION
-        Close the connection to the interactive object ob.
+BESCHREIBUNG
+        Schliesst die Verbindung zum interaktiven Objekt <obj>.
 
-        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.
+        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.
 
-SEE ALSO
+SIEHE AUCH
         connect(M), logon(A), disconnect(M)
diff --git a/doc/efun/rename b/doc/efun/rename
index 2f74492..39c083d 100644
--- a/doc/efun/rename
+++ b/doc/efun/rename
@@ -1,5 +1,5 @@
 SYNOPSIS
-        int rename(string from, string to);
+        int rename(string from, string to)
 
 BESCHREIBUNG
         Die Efun rename() verschiebt <from> nach <to>. Wenn <from> ein File
@@ -18,7 +18,7 @@
 
         Bei Erfolg liefert rename() 0, bei Fehlschlag einen Wert ungleich 0.
 
-BEISPIEL
+BEISPIELE
         rename("/players/wizard/obj.c", "/players/wizard/newobj.c");
 
 SIEHE AUCH
diff --git a/doc/efun/rename_object b/doc/efun/rename_object
index 2d31674..bbde744 100644
--- a/doc/efun/rename_object
+++ b/doc/efun/rename_object
@@ -1,10 +1,14 @@
-SYNOPSIS:
-	void rename_object (object ob, string new_name);
+GESCHUETZT
+SYNOPSIS
+        void rename_object(object obj, string neuer_name)
 
-DESCRIPTION:
-	Give the current object a new object_name. Causes a privilege
-	violation. The new name must not contain a # character, except
-	at the end, to avoid confusion with clone numbers.
+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.
 
-SEE ALSO:
-	creator(E), object_name(E)
+GESCHICHTE
+        Eingefuehrt in 3.2@55.
+
+SIEHE AUCH
+        creator(E), object_name(E), load_name(E)
diff --git a/doc/efun/restore_object b/doc/efun/restore_object
index fa991d6..3103e7d 100644
--- a/doc/efun/restore_object
+++ b/doc/efun/restore_object
@@ -1,6 +1,6 @@
 SYNOPSIS
-        int restore_object(string name);
-        int restore_object(string str);     (VORLAEUFIG)
+        int restore_object(string name)
+        int restore_object(string str)
 
 BESCHREIBUNG
         Laedt Werte von Variablen fuer das aktuelle Objekt aus der Datei
@@ -12,8 +12,9 @@
 
         Wenn Variablen aus einer Datei geladen werden, kann <name> mit .c
         enden. Diese Dateiendung wird vom Treiber entfernt. Das Masterobjekt
-        fuegt dem Dateinamen ein .o hinzu. Die Gueltigkeit des Dateinamens
-        wird mit der Funktion check_valid_path() automatisch ueberprueft.
+        fuegt vermutlich dem Dateinamen ein .o hinzu. Die Gueltigkeit des
+        Dateinamens wird mit der Funktion check_valid_path() automatisch
+        ueberprueft.
 
         Die Funktion gibt 1 zurueck, wenn die Variablen erfolgreich geladen
         wurden und 0, wenn es nichts zu laden gab.
@@ -21,7 +22,7 @@
         Variablen mit dem Typenvermerk nosave werden nicht geladen, zum
         Beispiel nosave int xxx;
 
-        Closures aus Lfuns, Variablne und simul_efuns werden nur geladen,
+        Clousers aus Lfuns, Variablne und simul_efuns werden nur geladen,
         wenn sie gefunden werden. Falls nicht, werden sie mit dem Wert '0'
         geladen.
 
@@ -33,13 +34,15 @@
         einzigartigen Namen bei nicht-statischen Variablen. So wird auch das
         manuelle Lesen oder Editieren des Savefiles einfacher.
 
-AENDERUNGEN
+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.
 
 SIEHE AUCH
         save_object(E), restore_value(E), valid_read(M)
diff --git a/doc/efun/restore_value b/doc/efun/restore_value
index fa44b18..773613a 100644
--- a/doc/efun/restore_value
+++ b/doc/efun/restore_value
@@ -1,17 +1,23 @@
 SYNOPSIS
-        mixed restore_value(string str);
+        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.
+        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.
 
-AENDERUNGEN
+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
         save_value(E), restore_object(E), save_object(E)
diff --git a/doc/efun/reverse b/doc/efun/reverse
index 90c7890..af81403 100644
--- a/doc/efun/reverse
+++ b/doc/efun/reverse
@@ -1,31 +1,32 @@
 SYNOPSIS
-        inti    reverse (int arg)
+        int     reverse (int arg)
         string  reverse (string arg)
+        bytes   reverse (bytes arg)
         mixed * reverse (mixed * arg)
         mixed * reverse (mixed * & arg)
 
-DESCRIPTION
-        Kehrt die Reihenfolge des Inhaltes von Array oder String <arg>
-        um und liefert den neuen Wert als Resultat.
+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.
 
         Wenn in der Referenz-Variante verwendet, wird das Argumentarray selber
         invertiert und auch zurueckgegeben.
 
-EXAMPLES
-        reverse (0x306a) - return 0x560c0000
+BEISPIELE
+        reverse (0x306a) - gibt 0x560c0000 zurueck
 
-        reverse ("test") - return "tset"
+        reverse ("test") - gibt "tset" zurueck
 
         mixed * a = ({ 1, 2 });
-        reverse(a)  - returns ({ 2, 1 }), a ist unveraendert.
-        reverse(&a) - returns ({ 2, 1 }), a ist nun ({ 2, 1 })
+        reverse(a)  - gibt ({ 2, 1 }) zurueck, a bleibt unveraendert.
+        reverse(&a) - gibt ({ 2, 1 }) zurueck, a ist nun ({ 2, 1 })
 
-BUGS
-        Referenz-Teilarrays wie reverse(&(a[1..2])) sind nicht unterstuetzt.
+FEHLER
+        Referenz-Teilarrays wie reverse(&(a[1..2])) werden nicht unterstuetzt.
 
 GESCHICHTE
         Eingefuehrt in LDMud 3.3.529.
         LDMud 3.3.532 fuegte die Bitumkehr von Zahlen ein.
 
-SEE ALSO
+SIEHE AUCH
diff --git a/doc/efun/rm b/doc/efun/rm
index d1b59e3..cc4e5cf 100644
--- a/doc/efun/rm
+++ b/doc/efun/rm
@@ -1,5 +1,5 @@
 SYNOPSIS
-        int rm(string file);
+        int rm(string file)
 
 BESCHREIBUNG
         Loescht die Datei <file>. Gibt 0 zurueck, wenn etwas nicht geklappt
diff --git a/doc/efun/rmdir b/doc/efun/rmdir
index 19af329..93c7a37 100644
--- a/doc/efun/rmdir
+++ b/doc/efun/rmdir
@@ -1,5 +1,5 @@
 SYNOPSIS
-        int rmdir(string dir);
+        int rmdir(string dir)
 
 BESCHREIBUNG
         Loescht das Verzeichnis <dir>. Liefert 1 bei Erfolg, 0 bei Misserfolg.
diff --git a/doc/efun/rmember b/doc/efun/rmember
index dc1962c..5709efe 100644
--- a/doc/efun/rmember
+++ b/doc/efun/rmember
@@ -1,18 +1,19 @@
 SYNOPSIS
-        int rmember(mixed *array, mixed elem [, int start]);
-        int rmember(string str, int elem [, int start]);
+        int rmember(mixed *array, mixed elem [, int start])
+        int rmember(string str, int elem [, int start])
+        int rmember(bytes str, int elem [, int start])
 
 BESCHREIBUNG
-        Liefert fuer Arrays und Strings den Index des letzten Auftretens des
-        Arguments <elem> im Array <*array>  bzw. im String <str>. Wenn <elem>
-        nicht gefunden wird, liefert die Funktion -1 zurueck.
+        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.
 
         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.
 
-
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.10.
         LDMud 3.3.556 fuegte den <start>-Parameter hinzu.
 
diff --git a/doc/efun/rusage b/doc/efun/rusage
index 8dc2523..4de6179 100644
--- a/doc/efun/rusage
+++ b/doc/efun/rusage
@@ -1,6 +1,6 @@
 OPTIONAL
 SYNOPSIS
-        int *rusage();
+        int * rusage()
 
 BESCHREIBUNG
         Liefert ein Array mit Informationen ueber den momentanen
@@ -11,8 +11,8 @@
             rus.ru_oublock, rus.ru_msgsnd, rus.ru_msgrcv, rus.ru_nsignals,
             rus.ru_nvcsw, rus.ru_nivcsw
 
-ANMERKUNG
-    Diese Funktion ist optional.
+ANMERKUNGEN
+        Diese Funktion ist optional.
 
 SIEHE AUCH
         sys/resource.h(Unix)
diff --git a/doc/efun/save_value b/doc/efun/save_value
index d9e1486..11de053 100644
--- a/doc/efun/save_value
+++ b/doc/efun/save_value
@@ -1,5 +1,6 @@
 SYNOPSIS
-        string save_value(mixed wert [, int format]);
+        string save_value(mixed wert)
+        string save_value(mixed wert, int format)
 
 BESCHREIBUNG
         Schreibt <wert> in einen String, der sich mit restore_value()
@@ -11,6 +12,12 @@
              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.
 
         Der erzeugte String besteht aus zwei Zeilen, die jeweils mit einem
         Zeilenumbruch enden. Die erste Zeile beschreibt das Format, in dem der
@@ -20,12 +27,13 @@
         Das Format zum Schreiben des Wertes in den String entspricht dem von
         save_object() und restore_object() verwendeten Format.
 
-AENDERUNGEN
+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
         restore_value(E), restore_object(E), save_object(E)
diff --git a/doc/efun/send_erq b/doc/efun/send_erq
index d3521e1..fd1d521 100644
--- a/doc/efun/send_erq
+++ b/doc/efun/send_erq
@@ -1,6 +1,8 @@
 GESCHUETZT
 SYNOPSIS
-        int send_erq(int request, string|int *data, closure callback);
+        #include <erq.h>
+
+        int send_erq(int request, bytes|int *data, closure callback)
 
 BESCHREIBUNG
         Eine Anfrage vom Typ <request> (standardmaessig 0) wird mit Inhalt
@@ -11,14 +13,19 @@
 
             void <closure>(int *response_data, int len);
 
-        <data> kann entweder ein String oder ein Array von Integers sein,
-        wobei im zweiten Fall die Zahlen als Zeichen interpretiert werden.
-        Die unterschiedlichen Anfragen sind in /sys/erq.h definiert.
+        <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.
 
         Die Funktion liefert 0 zurueck, wenn das Senden fehlgeschlagen ist,
         etwas anderes sost.
 
         Die Funktion verursacht eine Schutzverletzung "erq".
 
+GESCHICHTE
+        Eingefuehrt in 3.2.1@61.
+        Geschuetzt in 3.2.1@84.
+        LDMud 3.3.318 fuehrte das ERQ_CB_STRING-Flag ein.
+
 SIEHE AUCH
         attach_erq_demon(E), erq(C)
diff --git a/doc/efun/send_udp b/doc/efun/send_udp
index 8ad0c33..dd5d2bc 100644
--- a/doc/efun/send_udp
+++ b/doc/efun/send_udp
@@ -1,12 +1,39 @@
-SYNOPSIS:
-	int send_udp(string host, int port, string message)
+GESCHUETZT
+SYNOPSIS
+        int send_udp(string host, int port, bytes message)
+        int send_udp(string host, int port, int *message)
 
-DESCRIPTION:
-	Sends The message in an UDP packet to the given host and port
-	number. Causes a privilege violation.
-	Returns 1 on success, 0 on failure.
+BESCHREIBUNG
+        Sendet die Nachricht <message> als UDP Paket an den angegebenen Host
+        bzw. Port.
 
-SEE ALSO:
-	receive_udp(M)
+        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.
 
-29.10.2006 Zesstra
+        Die Funktion liefert 1 bei Erfolg, sonst 0.
+
+        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.
+
+FEHLER
+        Ist <host> ein qualifizierter Hostname (anstelle einer IP Adresse),
+        blockiert die Ausfuehrung fuer die Dauer der Namensaufloesung.
+
+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.
+
+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
+        query_udp_port(E), receive_udp(M)
diff --git a/doc/efun/set_auto_include_string b/doc/efun/set_auto_include_string
index 247e50d..7faeb9c 100644
--- a/doc/efun/set_auto_include_string
+++ b/doc/efun/set_auto_include_string
@@ -1,19 +1,21 @@
-DEPRECATED
-SYNOPSIS:
-	void set_auto_include_string(string arg)
+GESCHUETZT, VERALTET
+SYNOPSIS
+        void set_auto_include_string(string arg)
 
-DESCRIPTION:
+BESCHREIBUNG
+        <arg> wird automatisch in jedes neu kompilierte LPC-Objekt
+        eingebunden. Das ist nuetzlich, um globale Definitionen, z.B.
+        #pragma combine_string oder #pragma strict_types durchzusetzen.
+        Das aufrufende Objekt muss durch das Masterobjekt privilegiert
+        sein.
 
-	The arg will be automatically included into every compiled LPC
-	object. This is useful to enforce global definitions, e.g.
-	``#pragma combine_strings'' or ``#pragma strict_types''.  The
-	calling objectneeds to be privileged by the master object.
+        Der auto_include_string wird geloescht, wenn das Masterobjekt
+        neu geladen wird.
 
-NOTE:
-  Not available in LDMud 3.3.x
-  Please use the driver hook H_AUTO_INCLUDE in LDMud > 3.2.9
+GESCHICHTE
+        LDMud 3.2.9 ersetzte set_auto_include_string() durch den Driver
+            Hook H_AUTO_INCLUDE. Diese alte Version ist nur verfuegbar,
+            wenn der Treiber mit USE_DEPRECATED kompiliert wurde.
 
-SEE ALSO:
-	privilege_violation(M), pragma(LPC)
-  
-29.10.2006 Zesstra
+SIEHE AUCH
+        set_driver_hook(E), privilege_violation(M), pragma(LPC), master(M)
diff --git a/doc/efun/set_bit b/doc/efun/set_bit
index 847c6b5..758bdc6 100644
--- a/doc/efun/set_bit
+++ b/doc/efun/set_bit
@@ -1,5 +1,5 @@
 SYNOPSIS
-        string set_bit(string str, int n);
+        string set_bit(string str, int n)
 
 BESCHREIBUNG
         Liefert einen neuen String, bei dem das Bit <n> in <str> gesetzt
@@ -12,7 +12,7 @@
 
         Der neue String wird automatisch verlaengert, falls noetig.
 
-BEISPIEL
+BEISPIELE
         string s;
         s=set_bit("?",5);
 
diff --git a/doc/efun/set_environment b/doc/efun/set_environment
index fe3a969..507a46d 100644
--- a/doc/efun/set_environment
+++ b/doc/efun/set_environment
@@ -1,20 +1,18 @@
+GESCHUETZT
 SYNOPSIS
-	void set_environment(object item, object env)
+        void set_environment(objet was, object env)
 
-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.
+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.
 
-	Don't use it in your own objects!
+        Sprich: nicht in eigenen Objekten verwenden!
 
-HISTORY
-  Introduced in 3.2.1@1 as 'efun308()', renamed to 'set_environment()'
-                in 3.2.6 and LP "03.02.1@150".
+GESCHICHTE
+        Eingefuehrt in 3.2.1.@1 als 'efun308()'.
+        In 3.2.6 umbenannt zu 'set_environment()'.
 
-SEE ALSO
-	remove(A), init(A), move_object(E), transfer(E), hooks(C),
-	native(C)
-
-29.10.2006 Zesstra
-
+SIEHE AUCH
+        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 f0095c9..69efe15 100644
--- a/doc/efun/set_extra_wizinfo
+++ b/doc/efun/set_extra_wizinfo
@@ -1,22 +1,25 @@
+GESCHUETZT
 SYNOPSIS
-        void set_extra_wizinfo (object wiz, mixed extra)
-        void set_extra_wizinfo (string wiz, mixed extra)
-        void set_extra_wizinfo (int    wiz, mixed extra)
+        void set_extra_wizinfo(object wiz, mixed extra)
+        void set_extra_wizinfo(string wiz, mixed extra)
+        void set_extra_wizinfo(int    wiz, mixed extra)
 
-DESCRIPTION
-        Set the value <extra> as the 'extra' information for the wizlist
-        entry of <wiz>.
+BESCHREIBUNG
+        Setzt den Wert <extra> als Eintrag im 'Extra' Feld in der Wizlist fuer
+        den Gott <wiz>.
 
-        If <wiz> is an 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.
+        Ist <wiz> ein Objekt, 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.
 
-        The <extra> argument may be any value.
+        Das Argument <extra> kann jeden Wert enthalten.
 
-        The function causes a privilege violation.
+        Die Funktion verursacht eine Schutzverletzung.
 
-SEE ALSO
+SIEHE AUCH
         get_extra_wizinfo(E), set_extra_wizinfo_size(E), wizlist_info(E)
diff --git a/doc/efun/set_this_object b/doc/efun/set_this_object
index 2afda56..5c4a42d 100644
--- a/doc/efun/set_this_object
+++ b/doc/efun/set_this_object
@@ -1,6 +1,6 @@
 GESCHUETZT
 SYNOPSIS
-        void set_this_object(object objekt-an-stelle-von-originalobjekt);
+        void set_this_object(object objekt-an-stelle-von-originalobjekt)
 
 BESCHREIBUNG
         Dies ist eine geschuetzte Funktion, die nur vom Master-Objekt und im
@@ -12,11 +12,12 @@
         anderen Objekten, die einen call_other() Aufruf machen.
 
         Der Effekt von set_this_object() bleibt bestehen, bis ein externer
-        Funktionsaufruf abgeschlossen ist oder bis zu einem erneuten
-        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 inheritet werden.
+        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.
 
         Diese Funktion darf nur mit hoechster Sorgfalt verwendet werden, um
         Inkonsistenzen zu vermeiden. Nach einem Aufruf von set_this_object()
@@ -26,10 +27,10 @@
         durch call_other()) ist unzulaessig und wird aktiv verhindert.
 
         Erlaubt sind call_other(), map(), der Zugriff auf lokale Variablen
-        (die auch Pointer auf globale Arrays enthalten duerfen), einfache
+        (die auch Pointers auf globale Arrays enthalten duerfen), einfache
         Arithmetik und der Zuweisungs-Operator.
 
-BUGS
+FEHLER
         Es ist momentan nicht moeglich, das originale gueltige Objekt wieder
         herzustellen. Anstelle von:
 
@@ -41,8 +42,7 @@
 
         muss das ueber einen Umweg geloest werden:
 
-            private void tuwas(object dings)
-            {
+            private void tuwas(object dings) {
                 set_this_object(dings);
                 <irgendwelcher code>
             }
@@ -52,9 +52,9 @@
 
         Manche Leute bezeichnen das als Feature.
 
-AENDERUNGEN
+GESCHICHTE
         LDMud 3.2.10 verhindert aktiv die Referenz auf globale Variablen und
-            Funktionsaufrufe nach Adresse, waehren set_this_object() gilt.
+            Funktionsaufrufe nach Adresse, waehrend set_this_object() gilt.
 
 SIEHE AUCH
         this_object(E), set_this_player(E)
diff --git a/doc/efun/set_this_player b/doc/efun/set_this_player
index 085c529..91b4124 100644
--- a/doc/efun/set_this_player
+++ b/doc/efun/set_this_player
@@ -1,6 +1,6 @@
 GESCHUETZT
 SYNOPSIS
-        void set_this_player(object ob);
+        void set_this_player(object ob)
 
 BESCHREIBUNG
         Aendert den momentanen Kommandogeber zu <ob>. Dabei kann <ob> auch
@@ -12,18 +12,7 @@
         Es ist sonst einfach, die Sicherheit eines Muds mit Hilfe dieser
         Efun zu untergraben.
 
-        Die Efun ist nur in 3.2.1 verfuegbar. Eine moegliche Simulation fuer
-        3.2 koennte etwa so aussehen:
-
-            void set_this_player(object ob)
-            {
-                /* Insert your privilege checks here */
-                if (living(ob))
-                    funcall(bind_lambda(#'enable_commands, ob));
-            }
-            (suggested by Mark Lewis (Nostradamus@Zebedee))
-
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.1.
         LDMud 3.2.6 fuehrte die 0 als moeglichen Parameter ein.
 
diff --git a/doc/efun/sgn b/doc/efun/sgn
index 2331c0d..938ecf6 100644
--- a/doc/efun/sgn
+++ b/doc/efun/sgn
@@ -1,5 +1,5 @@
 SYNOPSIS
-        int sgn (int|float arg)
+        int sgn(int|float arg)
 
 BESCHREIBUNG
         Liefert das Vorzeichen des Argumentes.
@@ -10,7 +10,7 @@
           0   0
         < 0  -1
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.9.
 
 SIEHE AUCH
diff --git a/doc/efun/sha1 b/doc/efun/sha1
new file mode 100644
index 0000000..4fe4f06
--- /dev/null
+++ b/doc/efun/sha1
@@ -0,0 +1,33 @@
+SYNOPSIS
+        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.
+
+        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.
+
+BEISPIELE
+        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().
+
+SIEHE AUCH
+        crypt(E), md5(E)
diff --git a/doc/efun/shadow b/doc/efun/shadow
new file mode 100644
index 0000000..16ab11e
--- /dev/null
+++ b/doc/efun/shadow
@@ -0,0 +1,119 @@
+SYNOPSIS
+        object shadow(object obj, int flag)
+
+BESCHREIBUNG
+        Damit wird das aktuelle Objekt dem Objekt <obj> als Shadow
+        uebergeworfen. Bei Erfolg liefert es 1, sonst 0 zurueck.
+
+        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.
+
+        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.
+
+        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.
+
+BEISPIELE
+        Mit drei Objekten a.c, b.c und c.c:
+
+        --- a.c ---
+            void fun() {
+                debug_message(sprintf("%O [a] fun()\n", this_object()));
+            }
+            void fun3() {
+                debug_message(sprintf("%O [a] fun3()\n", this_object()));
+            }
+
+        --- b.c ---
+            int fun() {
+                debug_message(sprintf("%O [b] fun()\n", this_object()));
+                find_object("a")->fun();
+            }
+            void fun2() {
+                debug_message(sprintf("%O [b] fun2()\n", this_object()));
+                find_object("a")->fun3();
+                this_object()->fun3();
+            }
+
+            void do_shadow(object target) { shadow(target, 1); }
+
+        --- c.c ---
+            int fun() {
+                debug_message(sprintf("%O [c] fun()\n", this_object()));
+                find_object("a")->fun();
+            }
+            void fun3() {
+                debug_message(sprintf("%O [c] fun3()\n", this_object()));
+            }
+            void do_shadow(object target) { shadow(target, 1); }
+
+        Es wird nun folgender Code aufgerufen:
+
+            object a, b, c;
+
+            a = load_object("a");
+            b = load_object("b");
+            c = load_object("c");
+            b->do_shadow(a);
+            c->do_shadow(a);
+            debug_message("--- a->fun() ---\n");
+            a->fun();
+            debug_message("--- b->fun() ---\n");
+            b->fun();
+            debug_message("--- c->fun() ---\n");
+            c->fun();
+            debug_message("--- b->fun2() ---\n");
+            b->fun2();
+
+        Das ergibt diesen Output:
+
+        --- a->fun() ---
+            /c [c] fun()
+            /b [b] fun()
+            /a [a] fun()
+        --- b->fun() ---
+            /c [c] fun()
+            /b [b] fun()
+            /a [a] fun()
+        --- c->fun() ---
+            /c [c] fun()
+            /b [b] fun()
+            /a [a] fun()
+        --- 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.
+
+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.
+
+SIEHE AUCH
+        query_shadowing(E), unshadow(E), query_allow_shadow(M)
diff --git a/doc/efun/shutdown b/doc/efun/shutdown
index 46ef0af..03e7ec5 100644
--- a/doc/efun/shutdown
+++ b/doc/efun/shutdown
@@ -1,6 +1,6 @@
 SYNOPSIS
-        void shutdown();
-        void shutdown(int exit_code);
+        void shutdown()
+        void shutdown(int exit_code)
 
 BESCHREIBUNG
         Faehrt das Mud herunter. Diese Funktion darf nie verwendet werden!
@@ -14,5 +14,10 @@
         wenn man sie nicht verwenden darf. Sorry, das darf hier nicht
         bekannt gegeben werden. Streng geheim.
 
+        Diese efun ist privilegiert.
+
+GESCHICHTE
+        LDMud 3.2.11 fuehrte das 'exit_code' Argument ein.
+        LDMud 3.5.0 machte die efun privilegiert.
 SIEHE AUCH
-        break_point(E), swap(E)
+        break_point(E), swap(E), privilege_violation(M)
diff --git a/doc/efun/sin b/doc/efun/sin
index 6eab7ec..cf8f981 100644
--- a/doc/efun/sin
+++ b/doc/efun/sin
@@ -4,5 +4,8 @@
 BESCHREIBUNG
         Liefert den Sinus des Argumentes.
 
+GESCHICHTE
+        LDMud 3.2.9: Ganzzahlen (Integers) als Argument hinzugefuegt.
+
 SIEHE AUCH
         asin(E), cos(E), acos(E), tan(E), atan(E), atan2(E)
diff --git a/doc/efun/sizeof b/doc/efun/sizeof
index ad99af2..247d834 100644
--- a/doc/efun/sizeof
+++ b/doc/efun/sizeof
@@ -1,13 +1,14 @@
 SYNOPSIS
         int sizeof(mixed * val)
         int sizeof(string  val)
+        int sizeof(bytes   val)
         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> oder die Anzal Keys in einem Mapping
-        <val>.
+        Zeichen in einem String <val>, die Anzahl an Bytes in der
+        Bytefolge <val> oder die Anzal Keys in einem Mapping <val>.
 
         Als Spezialfall kann <val> auch 0 sein. In diesem Fall liefert die
         Funktion 0 zurueck.
diff --git a/doc/efun/sl_exec b/doc/efun/sl_exec
index e8c4a8f..406c741 100644
--- a/doc/efun/sl_exec
+++ b/doc/efun/sl_exec
@@ -1,6 +1,6 @@
 OPTIONAL
 SYNOPSIS
-        mixed* sl_exec(string statement, ...)
+        mixed * sl_exec(string statement, ...)
 
 BESCHREIBUNG
         Fuehrt den SQL-Befehl <statement> in der aktuell geoeffneten
@@ -14,6 +14,10 @@
         Array aus den einzelnen Zeilen (welche wieder Arrays der einzelnen
         Felder sind) zurueck.
 
+        Pragma-Befehle erzeugen eine privilege_violation ("sqlite_pragma",
+        ob, name, wert). Wird das Privileg verneint, wird ein Fehler
+        ausgeloest.
+
         Diese Funktion ist nur verfuegbar, wenn der Driver mit SQLite-
         Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
         __SQLITE__ definiert.
diff --git a/doc/efun/snoop b/doc/efun/snoop
index 484b202..bda2cd5 100644
--- a/doc/efun/snoop
+++ b/doc/efun/snoop
@@ -1,7 +1,7 @@
 GESCHUETZT
 SYNOPSIS
-        int snoop(object snooper);
-        int snoop(object snooper, object snoopee);
+        int snoop(object snooper)
+        int snoop(object snooper, object snoopee)
 
 BESCHREIBUNG
         Beginnt die Beobachtung des Objekts <snoopee> durch <snooper>. Wenn
@@ -15,7 +15,7 @@
         Es wird auch ein Fehler verursacht, wenn eine Beobachtung zu einer
         Rekursion fuehren wuerde.
 
-ANMERKUNG
+ANMERKUNGEN
         Diese Funktion ist geschuetzt.
 
 SIEHE AUCH
diff --git a/doc/efun/sprintf b/doc/efun/sprintf
index 3cb6970..41a7c0e 100644
--- a/doc/efun/sprintf
+++ b/doc/efun/sprintf
@@ -1,147 +1,147 @@
-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.
-
-        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.
-
-        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.
-
-        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).
-
-        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.
-
-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)"
-
-        sprintf("Du drehst den Knopf um %.3f Umdrehungen", 12.3456);
-        => "Du drehst den Knopf um 12.345 Umdrehungen"
-
-        sprintf("Du liest %|'*':9s", "Fiona");
-        => "Du liest **Fiona**"
-
-        sprintf("Auf dem Zettelstueck steht: %-.*s...", 7, "Hallo Du da");
-        => "Auf dem Zettelstueck steht: Hallo D...
-
-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.
-
-SIEHE AUCH:
-        printf(E)
+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.
+
+        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.
+
+        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.
+
+        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).
+
+        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.
+
+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)"
+
+        sprintf("Du drehst den Knopf um %.3f Umdrehungen", 12.3456);
+        => "Du drehst den Knopf um 12.345 Umdrehungen"
+
+        sprintf("Du liest %|'*':9s", "Fiona");
+        => "Du liest **Fiona**"
+
+        sprintf("Auf dem Zettelstueck steht: %-.*s...", 7, "Hallo Du da");
+        => "Auf dem Zettelstueck steht: Hallo D...
+
+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.
+
+SIEHE AUCH
+        printf(E)
diff --git a/doc/efun/sqrt b/doc/efun/sqrt
index 44c4805..d1bccdd 100644
--- a/doc/efun/sqrt
+++ b/doc/efun/sqrt
@@ -1,9 +1,9 @@
 SYNOPSIS
-        float sqrt(int value);
-        float sqrt(floag value);
+        float sqrt(int value)
+        float sqrt(floag value)
 
 BESCHREIBUNG
         Liefert die Quadratwurzel von <value>.
 
-SIEHE AUCH
-        log(E), pow(E)
\ No newline at end of file
+GESCHICHTE
+        LDMud 3.2.9 fuehrte integer als moegliche Argumente ein.
diff --git a/doc/efun/sscanf b/doc/efun/sscanf
index a616bf2..a927b70 100644
--- a/doc/efun/sscanf
+++ b/doc/efun/sscanf
@@ -1,115 +1,78 @@
-FUNKTION:
- int sscanf(string str,string fmt,mixed var1,mixed var2,...)
+SYNOPSIS
+        int sscanf(string str, string fmt, mixed var1, mixed var2, ...)
 
-ARGUMENTE:
-      str
-        - String, der nach einem Muster zu durchsuchen ist
-        - darf nicht NULL sein
-      fmt
-        - Format-String, nach dessen Muster untersucht wird
-      var1,var2,...
-        - Argumente die mit %d oder %s korrespondieren
+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.
 
-RUeCKGABEWERT:
-     Anzahl der gefundenen Argumente.
+        Die Operatoren im Format-String <fmt> haben eines der folgenden
+        Formate:
 
-BESCHREIBUNG:
-     Wertet einen String <str> unter Beruecksichtigung des Formats <fmt>
-     aus. <fmt> kann Strings beinhalten, die durch %d und %s getrennt
-     werden. Jedes %d und %s entspricht einer der Variablen <var1>, <var2>,
-     etc. in die gespeichert werden soll.
-
-     Die Operatoren im Format-String <fmt> haben eines der folgenden
-     Formate:
-
-         %[+][!|~][<size>[.<minmatch>]]<type>
+            %[+][!|~][<size>[.<minmatch>]]<type>
 
         <type> kann folgendes sein:
-            d: steht fuer eine Zahl
-            D: steht fuer eine Zahl
+            d: meldet eine Zahl
+            D: meldet eine Zahl
             U:
-            s: steht fuer eine Zeichenkette
-            %: steht fuer das %-Zeichen
-            t: steht fuer Whitespaces (also Leerschlaege und Tabulatoren),
+            s: meldet eine Zeichenkette
+            %: meldet das %-Zeichen
+            t: meldet Whitespaces (also Leerschlaege und Tabulatoren),
                speichert diese aber nicht.
 
-     <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.
+        <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.
 
-     Wird + angegeben, muessen die Zeichen nach dem Feld ebenfalls
-     matchen. Ist dies nicht der Fall, wird auch dieses Feld als
-     Misserfolg in der Rueckgabe betrachtet (auch wenn der Wert
-     bereits an die zugehoerige Variable zugewiesen wurde).
+        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).
 
-     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.
+        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.
 
-     Wenn ein %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.
-     Bei einem %d allerdings muss dieses Verhalten mit einem '+'
-     erzwungen werden.
+        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.
 
-     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.
+        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.
 
-     Die Funktion sscanf() ist insofern ein Spezialfall, als dass
-     Argumente automatisch nach Referenz uebergeben werden.
+        Zurueck gegeben wird die Anzahl Treffer.
 
-BEISPIELE:
-     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+".\n");
+        Die Funktion sscanf() ist insofern ein Spezialfall, als dass
+        Argumente automatisch nach Referenz uebergeben werden.
 
-     sscanf("ab", "%s%s", who, what)
-     ==> liefert 2, who = "", what = "ab"
+BEISPIELE
+        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");
 
-     sscanf("ab", "%s %s", who, what)
-     ==> liefert 0, who = 0, what = 0
+        sscanf("ab", "%s%s", who, what)
+            ==> liefert 2, who = "", what = "ab"
 
-     sscanf("ab ", "%s %s", who, what)
-     ==> liefert 2, who = "ab", what = ""
+        sscanf("ab", "%s %s", who, what)
+            ==> liefert 0, who = 0, what = 0
 
+        sscanf("ab ", "%s %s", who, what)
+            ==> liefert 2, who = "ab", what = ""
 
-     // Achtung bei %d
-     sscanf("12 ","%d xyz", num1);
-     ==> liefert 1, num1 = 12
+GESCHICHTE
+        LDMud 3.3.713/3.2.13 fuehrte den '+'-Modifizierer ein.
 
-     sscanf("12 ","%s xyz", num1);
-     ==> liefert 0, num1 = 0
-
-     // mit '+' wird das Parsen des Restformats erzwungen:
-     sscanf("12 ","%+d xyz", num1);
-     ==> liefert 0, num1 = 12
-
-
-     // Weiteres Beispiel zu %d:
-     sscanf("get 12 coins","get %d rubys",num)
-     ==> ergibt 1, weil 'rubys' ignoriert wird
-
-     // Beispiel Format-Ignore 2
-     sscanf("get 12 coins","get %+d rubys",num);
-     ==> ergibt 0, da mit dem '+' das Parsen des Restformats erzwungen wird
-     ==> ergibt 1 bei 'get 12 rubys'
-
-     // Beispiel Format-Ignore 3 [alte Variante]
-     sscanf("get 12 coins","get %d rubys%s", num, dummy)
-     ==> ergibt 1
-     ==> ergibt 2 bei "get 12 rubys"
-
-SIEHE AUCH:
+SIEHE AUCH
         explode(E), regexp(E)
-
-8.Aug 2007 Gloinson
diff --git a/doc/efun/strftime b/doc/efun/strftime
index c167afb..d437bcd 100644
--- a/doc/efun/strftime
+++ b/doc/efun/strftime
@@ -24,10 +24,10 @@
      0: Ausgabe im klassischen "C" locale (english)
      1: Ausgabe in Landessprache des Mudrechners.
 
-BEMERKUNGEN:
+ANMERKUNGEN
      Der zurueckgebene Ergebnisstring ist max. 511 Zeichen lang.
 
-PLATZHALTER:
+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.
@@ -101,12 +101,18 @@
               %H:%M:%S %z').
        %Z     Die Zeitzone oder der Name oder die Abkuerzung.
        %+     Datum und Zeit im Format von date(1).
-       %%     Das Zeichen '%'.
-     
-BEISPIEL
+       %%     Das Zeichen '%'.                                                            
+    
+FEHLER
+     Es gibt keinen Platzhalter fuer die Mondphase.
+
+BEISPIELE
      write(strftime("Heute ist %A, der %d. %B %Y.\n"))
      ergibt z.B.
      "Heute ist Montag, der 24. September 2007.\n"
 
+GESCHICHTE
+    Eingefuehrt in LDMud 3.3.718.
+
 SIEHE AUCH
      ctime(E), gmtime(E), localtime(E), mktime(E), time(E), utime(E)
diff --git a/doc/efun/stringp b/doc/efun/stringp
index 97d82b0..d67c090 100644
--- a/doc/efun/stringp
+++ b/doc/efun/stringp
@@ -6,5 +6,5 @@
         ansonsten 0.
 
 SIEHE AUCH
-        closurep(E), floatp(E), mappingp(E), objectp(E), intp(E),
-        referencep(E), pointerp(E), symbolp(E), clonep(E)
+        bytesp(E), closurep(E), floatp(E), mappingp(E), objectp(E),
+        intp(E), referencep(E), pointerp(E), symbolp(E), clonep(E)
diff --git a/doc/efun/strrstr b/doc/efun/strrstr
index bc039b6..8e39b79 100644
--- a/doc/efun/strrstr
+++ b/doc/efun/strrstr
@@ -1,6 +1,8 @@
 SYNOPSIS
-        int strrstr(string str, string muster);
-        int strrstr(string str, string muster, int pos);
+        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)
 
 BESCHREIBUNG:
         Liefert den Index des ersten Auftretens von <muster> im String <str>,
@@ -18,8 +20,8 @@
         Strings aus gezaehlt. Dabei wird die Suche aber dennoch rueckwaerts
         im String <str> durchgefuehrt.
 
-AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.10
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.10.
 
 SIEHE AUCH
         strstr(E), strlen(E), sscanf(E), sprintf(E), explode(E)
diff --git a/doc/efun/strstr b/doc/efun/strstr
index ea5cb83..2d93006 100644
--- a/doc/efun/strstr
+++ b/doc/efun/strstr
@@ -1,6 +1,8 @@
 SYNOPSIS
-        int strstr(string str, string muster);
-        int strstr(string str, string muster, int pos);
+        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)
 
 BESCHREIBUNG
         Liefert den Index des ersten Auftretens von <muster> in <str>,
@@ -8,7 +10,7 @@
         wird. Wird <pos> nicht angegeben, wird als Standardwert 0 gesetzt,
         also vom Beginn von <str> her gesucht.
 
-        Wenn <muster> nicht gefunden wird, wird -1 zurueck geliefert.
+        Wenn <muster> nicht gefunden wird, wird -1 zurueckgeliefert.
 
         Wenn <pos> negativ ist, bezeichnet <pos> die Startposition der Suche
         relativ zum Ende von <str>, es wird aber weiterhin vorwaerts gesucht.
diff --git a/doc/efun/swap b/doc/efun/swap
index fd242e4..4ab426d 100644
--- a/doc/efun/swap
+++ b/doc/efun/swap
@@ -1,6 +1,6 @@
 GESCHUETZT
 SYNOPSIS
-        void swap(object obj);
+        void swap(object obj)
 
 BESCHREIBUNG
         Lagert ein Objekt aus. Diese Efun ist nur fuer systeminternes
diff --git a/doc/efun/symbol_variable b/doc/efun/symbol_variable
index b3a66d4..9a6089a 100644
--- a/doc/efun/symbol_variable
+++ b/doc/efun/symbol_variable
@@ -1,7 +1,7 @@
 SYNOPSIS
-        closure symbol_variable(string arg);
-        closure symbol_variable(symbol arg);
-        closure symbol_variable(int arg);
+        closure symbol_variable(string arg)
+        closure symbol_variable(symbol arg)
+        closure symbol_variable(int arg)
 
 BESCHREIBUNG
         Erzeugt eine Identifier (Lfun) Closure aus der globalen Variablen
@@ -16,14 +16,14 @@
         bezieht, die im geerbten Objekt "private" deklariert ist (d.h.
         versteckt), fuehrt dies zu einer Schutzverletzung.
 
-AENDERUNGEN
-        Eingefuehrt in 3.2.1@8
-
 BEISPIELE
         int base;
         int var;
         symbol_variable("var");         ergibt: #'<this_object>->var
         symbol_variable(0);             ergibt: #'<this_object>->base
 
+GESCHICHTE
+        Eingefuehrt in 3.2.1@8.
+
 SIEHE AUCH
         lambda(E), quote(E), symbol_function(E)
diff --git a/doc/efun/symbolp b/doc/efun/symbolp
index 92c64b7..d3eec65 100644
--- a/doc/efun/symbolp
+++ b/doc/efun/symbolp
@@ -4,10 +4,10 @@
 BESCHREIBUNG
         Liefert 1, wenn das Argument ein Symbol ist, ansonsten 0.
 
-BEISPIEL
+BEISPIELE
         symbolp('foo) liefert 1.
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in 3.2@70.
 
 SIEHE AUCH
diff --git a/doc/efun/tan b/doc/efun/tan
index f99a085..695522a 100644
--- a/doc/efun/tan
+++ b/doc/efun/tan
@@ -4,7 +4,7 @@
 BESCHREIBUNG
         Liefert den Tangens des Argumentes.
 
-AENDERUNGEN
+GESCHICHTE
         LDMud 3.2.9: Ganzzahlen (Integers) als Argument hinzugefuegt.
 
 SIEHE AUCH
diff --git a/doc/efun/terminal_colour b/doc/efun/terminal_colour
index 6cd1bce..4d51a33 100644
--- a/doc/efun/terminal_colour
+++ b/doc/efun/terminal_colour
@@ -1,7 +1,7 @@
 SYNOPSIS
         varargs string terminal_colour(string str,
                                        null | mapping | closure map,
-                                       int wrap, int indent);
+                                       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
@@ -63,8 +63,7 @@
         und versucht dann jeden Teilstring als Farbschluessel zu behandeln.
         Dieses Verhalten laesst sich auch unter LPC erreichen:
 
-          string mudos_terminal_colour(string str, mapping ext, int w, int i)
-          {
+          string mudos_terminal_colour(string str, mapping ext, int w, int i) {
             return terminal_colour("%^"+implode(explode(str, "%^")-({""})
                                                ,"%^%^")
                                   , ext, w, i);
@@ -113,7 +112,7 @@
 
             "dies ist die erste Zeile\n   und dies ist die zweite Zeile"
 
-AENDERUNGEN
+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
diff --git a/doc/efun/test_bit b/doc/efun/test_bit
index af82c95..d493357 100644
--- a/doc/efun/test_bit
+++ b/doc/efun/test_bit
@@ -1,5 +1,5 @@
 SYNOPSIS
-        int test_bit(string str, int n);
+        int test_bit(string str, int n)
 
 BESCHREIBUNG
         Gibt 0 oder 1 des <n>-ten Bits im String <str> zurueck.
diff --git a/doc/efun/this_interactive b/doc/efun/this_interactive
index 92938bb..2b872df 100644
--- a/doc/efun/this_interactive
+++ b/doc/efun/this_interactive
@@ -1,9 +1,9 @@
 SYNOPSIS
-        object this_interactive();
+        object this_interactive()
 
 BESCHREIBUNG
         Die Funktion gibt das momentane interaktive Objekt zurueck, falls
-        vorhanden, also dasjenige welches "die Entertaste gedrueckt hat".
+        vorhanden, also dasjenige, welches "die Entertaste gedrueckt hat".
 
 SIEHE AUCH
         this_player(E), previous_object(E), interactive(E), living(E)
diff --git a/doc/efun/this_object b/doc/efun/this_object
index 5b60276..fa51f1c 100644
--- a/doc/efun/this_object
+++ b/doc/efun/this_object
@@ -1,10 +1,10 @@
-SYNOPSIS:
-        object this_object(void)
+SYNOPSIS
+        object this_object()
 
-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.
+BESCHREIBUNG
+        Liefert den Objektpointer auf dieses Objekt. Der Pointer darf nicht
+        mit dem internen Namen des Objekts verwechselt werden, welcher von
+        id() verwendet wird.
 
-SEE ALSO:
+SIEHE AUCH
         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 5ab6420..4017a64 100644
--- a/doc/efun/this_player
+++ b/doc/efun/this_player
@@ -1,16 +1,15 @@
 SYNOPSIS
-        object this_player();
+        object this_player()
 
 BESCHREIBUNG
         Liefert den momentanen Kommandogeber. Das kann ein interaktiver
-        Benutzer oder ein lebendiges Objekt sein, zum Beispiel ein NPC.
+        Bentzer oder ein lebendiges Objekt sein, zum Beispiel ein NPC.
 
-        Wenn die Funktion von innerhalb des heart_beat() eines nicht
+        Wenn die Funktion innerhalb von heart_beat() eines nicht
         lebendigen Objekts aufgerufen wird, wird 0 zurueck gegeben.
 
-BEISPIEL
-        if(this_player() != this_interactive())
-        {
+BEISPIELE
+        if (this_player() != this_interactive()) {
             write("Hey, jemand zwingt uns, Kommandos auszufuehren!\n");
         }
 
diff --git a/doc/efun/throw b/doc/efun/throw
index 2a21cde..d0b518e 100644
--- a/doc/efun/throw
+++ b/doc/efun/throw
@@ -1,14 +1,14 @@
 SYNOPSIS
-        void throw(mixed arg);
+        void throw(mixed arg)
 
 BESCHREIBUNG
         Bricht die Programmverarbeitung ab. Wenn die Verarbeitung mit catch()
         gestartet wurde, gibt dieses catch() <arg> als Fehlermeldung aus.
 
-        Der Aufruf von throw() ohne vorheriges catch() ist sinnlos und
+        Der Aufruf von throw() ohne vorheriges catch() macht keinen Sinn und
         erzeugt einen "throw without catch" Fehler.
 
-BEISPIEL
+BEISPIELE
         catch(throw("Verarbeitung abgebrochen!"));
         Das macht nichts als "Verarbeitung abgebrochen!" auszugeben.
 
diff --git a/doc/efun/time b/doc/efun/time
index f7016a4..d9e9ed2 100644
--- a/doc/efun/time
+++ b/doc/efun/time
@@ -1,18 +1,18 @@
 SYNOPSIS
-        int time();
+        int time()
 
 BESCHREIBUNG
         Liefert die Anzahl Sekunden, die seit dem 01. Januar 1970,
         00:00:00 GMT verstrichen sind.
 
-        Die Zeitangabe basiert auf der Systemzeit des Hosts, der Driver
+        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).
 
         Das Resultat von time() veraendert sich nicht waehrend dem Abarbeiten
         eines Kommandos.
 
-BEISPIEL
+BEISPIELE
         Um das aktuelle Datum und die aktuelle Zeit anzuzeigen:
 
             write(ctime(time())+"\n");
diff --git a/doc/efun/to_float b/doc/efun/to_float
index 7b989ce..2d6f8d6 100644
--- a/doc/efun/to_float
+++ b/doc/efun/to_float
@@ -1,7 +1,7 @@
 SYNOPSIS
-        float to_float(int arg);
-        float to_float(string arg);
-        float to_flaot(float arg);
+        float to_float(int    arg)
+        float to_float(string arg)
+        float to_float(float  arg)
 
         (float)<value>
 
@@ -10,7 +10,7 @@
         konvertiert bis zum ersten Zeichen, das nicht mehr zum Float
         gehoert. Floats werden direkt zurueck gegeben.
 
-BUGS
+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.
diff --git a/doc/efun/to_int b/doc/efun/to_int
index 6c648e4..75c1992 100644
--- a/doc/efun/to_int
+++ b/doc/efun/to_int
@@ -1,8 +1,8 @@
 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  arg)
+        int to_int(float   arg)
+        int to_int(int     arg)
+        int to_int(closure arg)
 
         (int)<value>
 
@@ -19,13 +19,13 @@
      
         Diese Funktion unterstuetzt die Basisprefixe '0x', '0o' und '0b'.
 
-BUGS
+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.
 
-AENDERUNGEN
-        Eingefuehrt in 3.2.1@2
+GESCHICHTE
+        Eingefuehrt in 3.2.1@2.
         LDMud 3.2.11 fuehrte die Basisprefixe ein.
 
 SIEHE AUCH
diff --git a/doc/efun/to_object b/doc/efun/to_object
index bb577f0..1ca88da 100644
--- a/doc/efun/to_object
+++ b/doc/efun/to_object
@@ -1,15 +1,29 @@
 SYNOPSIS
-	object to_object(string arg)
-	object to_object(closure arg)
-	object to_object(object arg)
+        object to_object(string arg)
+        object to_object(closure arg)
+        object to_object(object arg)
 
-DESCRIPTION
-	The argument is converted into an object, if possible.
-	For strings, the object with a matching object_name() is
-	returned, or 0 if there is none, as find_object() does.
-	For (bound!) closures, the object holding the closure is
-	returned.
-	Objects and the number 0 return themselves.
+        (object)<value>
 
-SEE ALSO
-	find_object(E), to_array(E), to_int(E), to_string(E)
+BESCHREIBUNG
+        Das Argument <arg> wird in ein Objekt umgewandelt, wenn dies
+        moeglich ist.
+
+        Fuer Strings wird das Objekt mit entsprechendem object_name(<arg>)
+        zurueck gelierfert, oder 0, wenn es kein entsprechendes Objekt gibt.
+        Dies entspricht find_object().
+
+        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.
+
+        Objekte und die Zahl 0 werden unveraendert zurueck gegeben.
+
+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.
+
+SIEHE AUCH
+        find_object(E), to_array(E), to_int(E), to_string(E), get_type_info(E)
diff --git a/doc/efun/trace b/doc/efun/trace
index 36edc79..330fcf1 100644
--- a/doc/efun/trace
+++ b/doc/efun/trace
@@ -1,8 +1,8 @@
 GESCHUETZT
 SYNOPSIS
-        #include <sys/trace.h>
+        #include <trace.h>
 
-        int trace(int traceflags);
+        int trace(int traceflags)
 
 BESCHREIBUNG
         Setzt die Trace Flags und liefert die alten Trace Flags zurueck.
@@ -35,20 +35,20 @@
         Die Master-Lfun valid_trace() wird mit ("trace", traceflags)
         aufgerufen, um die Erlaubnis fuer die Nutzung von trace() zu erhalten.
 
-BEISPIEL
+BEISPIELE
         object obj;
         string prefix;
-        obj=find_player("thomas");
-        prefix=objec_name(obj);
-        prefix=prefix[1..strlen(prefix)-1];  /* entfernt den Praefix "/" */
+        obj = find_player("thomas");
+        prefix = object_name(obj);  /* z.B. /std/player#69         */
+        prefix = prefix[1..];       /* entfernt den fuehrenden "/" */
         traceprefix(prefix);
         /* Von hier an wird nur Code im Objekt std/player#69 getracet */
         trace(TRACE_CALL|TRACE_CALL_OTHER|TRACE_RETURN|TRACE_ARGS);
         ...
         trace(TRACE_NOTHING);
 
-AENDERUNGEN
-        LDMud 3.2.9 uebergibt auch <traceflags> an valid_trace()
+GESCHICHTE
+        LDMud 3.2.9 uebergibt auch <traceflags> an valid_trace().
 
 SIEHE AUCH
         traceprefix(E)
diff --git a/doc/efun/traceprefix b/doc/efun/traceprefix
index 0f46f45..24802ef 100644
--- a/doc/efun/traceprefix
+++ b/doc/efun/traceprefix
@@ -1,25 +1,38 @@
-SYNOPSIS:
+GESCHUETZT
+SYNOPSIS
         string traceprefix(string prefix)
         string traceprefix(int dummy)
 
-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.
+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.
 
-EXAMPLE:
+        Die Funktion liefert das alte Praefix zurueck oder 0, wenn keines
+        gefunden wurde.
+
+        Die Master-Lfun valid_trace() wird mit ("traceprefix", prefix)
+        aufgerufen, um die Erlaubnis fuer die Benutzung dieser Funktion zu
+        erhalten.
+
+BEISPIELE
         object obj;
         string prefix;
-        obj = find_player("deepthought");
-        prefix = object_name(obj);
-        prefix = prefix[1..strlen(prefix)-1]; /* cut off the leading "/" */
+        obj=find_player("thomas");
+        prefix = object_name(obj);  /* z.B. /std/player#69         */
+        prefix = prefix[1..];       /* entfernt den fuehrenden "/" */
         traceprefix(prefix);
-        trace(1|2|4|8);
+        /* Von hier an wird nur Code im Objekt std/player#69 getracet */
+        trace(TRACE_CALL|TRACE_CALL_OTHER|TRACE_RETURN|TRACE_ARGS);
         ...
-        trace(0);
-        
-SEE ALSO:
+        trace(TRACE_NOTHING);
+
+GESCHICHTE
+        Ab LDMud 3.2.9 wird das Argument <prefix> an valid_trace() uebergeben.
+
+SIEHE AUCH
         trace(E)
diff --git a/doc/efun/transfer b/doc/efun/transfer
deleted file mode 100644
index b413f02..0000000
--- a/doc/efun/transfer
+++ /dev/null
@@ -1,25 +0,0 @@
-VERALTET
-SYNOPSIS
-        int transfer(object item, object dest)
-
-BESCHREIBUNG
-        Diese Funktion existiert lediglich aus Kompatibilitaetsgrunden, und
-        dann auch nur, wennn der Driver mit USE_DEPRECATED kompiliert wird.
-
-        Das Object <item> wird in Objekt <dest> bewegt. Verschiedene Tests
-        werden durchgefuehrt, und das Resultat beschreibt den (Miss)Erfolg:
-
-        0: Erfolg.
-        1: Zu schwer fuer <dest>
-        2: Kann nicht fallen gelassen werden.
-        3: Kann nicht aus seinem  Behaelter genommen werden.
-        4: <item> kann in keinen Behaelter gesteckt werden.
-        5: <dest> akzeptiert <item> nicht.
-        6: <item> kann nicht aufgenommen werden.
-
-        Die Funktion ruft die lfuns add_weight(), drop(), get(),
-        prevent_insert(), add_weight(), und can_put_and_get() nach Bedarf..
-
-SIEHE AUCH
-         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 68e2a78..58654c1 100644
--- a/doc/efun/transpose_array
+++ b/doc/efun/transpose_array
@@ -1,22 +1,23 @@
-SYNOPSIS:
-	mixed *transpose_array (mixed *arr);
+SYNOPSIS
+        mixed * transpose_array(mixed *arr)
 
-DESCRIPTION:
-	transpose_array ( ({ ({1,2,3}), ({a,b,c}) }) )
-			== ({ ({1,a}), ({2,b)}, ({3,c}) }) 
+BESCHREIBUNG
+        Transponiert das Array <arr>.
 
-	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.
+        transpose_array( ({ ({1,2,3}) , ({a,b,c}) }) )
+        ergibt: ({ ({1,a}), ({2,b}), ({3,c}) })
 
-EXAMPLE:
-	sort_array(transpose_array( ({ m_indices(map), m_values(map) }) ),
-		   lambda( ({ 'a, 'b }),
-			   ({ #'<, ({ #'[, 'a, 0 }),
-				   ({ #'[, 'b, 0}) }) ) )
+        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.
 
-	The given mapping 'map' is returned as an array of 
-	({ key,	data })  pairs, sorted by the keys.
+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.
 
-SEE ALSO:
-	alists(LPC), sort_array(E)
+SIEHE AUCH
+        alists(LPC), sort_array(E)
diff --git a/doc/efun/trim b/doc/efun/trim
index 4525a82..d5c58fa 100644
--- a/doc/efun/trim
+++ b/doc/efun/trim
@@ -1,9 +1,9 @@
 SYNOPSIS
-        #include <sys/strings.h>
+        #include <strings.h>
 
-        string trim(string str);
-        string trim(string str, int where);
-        string trim(string str, int where, string char);
+        string trim(string str)
+        string trim(string str, int where)
+        string trim(string str, int where, string char)
 
 BESCHREIBUNG
         Entfernt alle vorausgehenden und abschliessenden Zeichen <char> in
@@ -21,13 +21,13 @@
             TRIM_BOTH   (3 oder 0): entfernt sowohl vorausgehende als auch
                                     abschliessende Zeichen <char>
 
-BEISPIEL
+BEISPIELE
         trim("    1234    ");                       ergibt: "1234"
         trim("    1234    ", TRIM_RIGHT);           ergibt: "    1234"
         trim("    1234    ", TRIM_BOTH, " 1");      ergibt: "234"
 
-AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.7
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.7.
 
 SIEHE AUCH
         regreplace(E)
diff --git a/doc/efun/typeof b/doc/efun/typeof
index 151bb96..b4716b0 100644
--- a/doc/efun/typeof
+++ b/doc/efun/typeof
@@ -1,13 +1,15 @@
 SYNOPSIS
-        int typeof(mixed arg);
+        #include <lpctypes.h>
+
+        int typeof(mixed arg)
 
 BESCHREIBUNG
         Gibt einen Code fuer den Typ des Arguments <arg>. Die Typen sind
-        definiert in <sys/lpctypes.h>
+        definiert in <lpctypes.h>.
 
-AENDERUNGEN
-        Eingefuehrt in 3.2@63
+GESCHICHTE
+        Eingefuehrt in 3.2@63.
 
 SIEHE AUCH
         get_type_info(E), intp(E), objectp(E), floatp(E), pointerp(E),
-        closurep(E), symbolp(E), stringp(E), mappingp(E)
+        closurep(E), symbolp(E), stringp(E), bytesp(E), mappingp(E)
diff --git a/doc/efun/unbound_lambda b/doc/efun/unbound_lambda
index 804b1b5..79926e1 100644
--- a/doc/efun/unbound_lambda
+++ b/doc/efun/unbound_lambda
@@ -1,5 +1,5 @@
 SYNOPSIS
-        closure unbound_lambda(mixed *arg, mixed code);
+        closure unbound_lambda(mixed *arg, mixed code)
 
 BESCHREIBUNG
         Erzeugt eine Lambda-Closure, die nicht an ein Objekt gebunden ist,
@@ -23,5 +23,8 @@
         funcall() oder apply() ausgewertet wird. Das zweite Argument <code>
         enthaelt den Code der Closure.
 
+GESCHICHTE
+        Eingefuehrt in 3.2@82.
+
 SIEHE AUCH
         closures(LPC), lambda(E), apply(E), funcall(E), bind_lambda(E)
diff --git a/doc/efun/unique_array b/doc/efun/unique_array
index 390c56e..d77f2fc 100644
--- a/doc/efun/unique_array
+++ b/doc/efun/unique_array
@@ -30,18 +30,15 @@
                ({same2:1, same2:2, ... same2:n}),
                ({samem:1, samem:2, ... samem:n}) })
 
-BEISPIEL
+BEISPIELE
         Um ein Array von Arrays zu erhalten, das alle Benutzer, nach Level
         gruppiert, enthaelt:
 
             mixed *arr;
-            arr=unique_array(users(), "_query_level", -1);
+            arr = unique_array(users(), "_query_level", -1);
 
         Goetter haben einen Level von -1. Sie werden nicht in arr aufgenommen,
         weil <skip> == -1.
 
 SIEHE AUCH
-      Arrays:       filter(E), map(E)
-      Objektarrays: filter_objects(E), map_objects(E)
-      Mappings:     filter(E), map(E), filter_indices(E), map_indices(E)
-
+        filter(E), map(E)
diff --git a/doc/efun/unmkmapping b/doc/efun/unmkmapping
index 3beeccb..6eedb60 100644
--- a/doc/efun/unmkmapping
+++ b/doc/efun/unmkmapping
@@ -1,5 +1,5 @@
 SYNOPSIS
-        *mixed unmkmapping(mapping map);
+        mixed * unmkmapping(mapping map)
 
 BESCHREIBUNG
         Wandelt das Mapping <map> in ein Array von Arrays aus, das alle Keys
@@ -15,11 +15,11 @@
 
             apply(#'mkmapping, unmkmapping(m)) == m
 
-BEISPIEL
+BEISPIELE
         mapping m = ([ 1:10;20, 2:11;21 ]);
         unmkmapping(m) ergibt: ({ ({1, 2}) , ({10, 11}) , ({20, 21}) })
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.6.
 
 SIEHE AUCH
diff --git a/doc/efun/unquote b/doc/efun/unquote
index 8000060..9e8fad0 100644
--- a/doc/efun/unquote
+++ b/doc/efun/unquote
@@ -1,16 +1,16 @@
 SYNOPSIS
-        quoted_array unquote(quoted_array arr);
-        string|symbol unquote(symbol sym);
+        quoted_array unquote(quoted_array arr)
+        string|symbol unquote(symbol sym)
 
 BESCHREIBUNG
         Entfernt ein Quote von einem gequoteten Array oder Symbol. Wenn das
         letzte Quote von einem Symbol entfernt wird, entsteht ein String.
 
-BEISPIELE:
+BEISPIELE
         unquote('foo);              ergibt: "foo"
         unquote( '({1,2,3}) );      ergibt: ({1,2,3})
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.9.
 
 SIEHE AUCH
diff --git a/doc/efun/unshadow b/doc/efun/unshadow
index 688d5ff..0131a71 100644
--- a/doc/efun/unshadow
+++ b/doc/efun/unshadow
@@ -1,21 +1,10 @@
-FUNKTION
-     void unshadow()
+SYNOPSIS
+        void unshadow()
 
 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.
-     Man sollte diese (s)efun rufen, bevor man den Schatten zerstoert.
-
-BEISPIELE
-     // B beschattet A
-     void b::stop_shadowing() {
-       unshadow();
-     }
+        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.
 
 SIEHE AUCH
-     Generell:	     shadow(E)
-     Rechte:	     query_allow_shadow(M), query_prevent_shadow(L)
-     Informationen:  query_shadowing(E)
-
-20.08.2009, Zesstra
+        shadow(E), query_shadowing(E)
diff --git a/doc/efun/upper_case b/doc/efun/upper_case
index ac1ffa5..a63eef0 100644
--- a/doc/efun/upper_case
+++ b/doc/efun/upper_case
@@ -1,11 +1,11 @@
 SYNOPSIS
-        string upper_case(string str);
+        string upper_case(string str)
 
 BESCHREIBUNG
         Wandelt alle Zeichen in <str> in Grossbuchstaben um und gibt das
         Resultat zurueck.
 
-BEISPIEL
+BEISPIELE
         upper_case("Heya!")     ergibt: "HEYA!"
 
 SIEHE AUCH
diff --git a/doc/efun/users b/doc/efun/users
index 48b4ae3..05ec115 100644
--- a/doc/efun/users
+++ b/doc/efun/users
@@ -1,5 +1,5 @@
 SYNOPSIS
-        *object users();
+        object * object users()
 
 BESCHREIBUNG
         Liefert ein Array, das alle interaktiven Benutzer enthaelt.
diff --git a/doc/efun/utime b/doc/efun/utime
index 96218af..1566019 100644
--- a/doc/efun/utime
+++ b/doc/efun/utime
@@ -1,21 +1,21 @@
 SYNOPSIS
-        *int utime()
+        int * utime()
 
 BESCHREIBUNG
         Liefert ein Array der Zeit, die seit dem 01. Januar 1970,
-        00:00:00 GMT vergangen ist, mit Genauigkeit in Mikrosekunden
+        00:00:00 GMT vergangen ist, mit einer Genauigkeit in Mikrosekunden
         (0.000001 Sekunden).
 
         Zurueck gegeben wird ein Array der Form:
             int[0]: Anzahl Sekunden seit Beginn der Zeitrechnung
             int[1]: Anzahl Mikrosekunden innerhalb der aktuellen Sekunde
 
-BEISPIEL
+BEISPIELE
         write(ctime(utime())+"\n");
 
         Gibt das aktuelle Datum und Zeit zurueck.
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.9.
 
 SIEHE AUCH
diff --git a/doc/efun/variable_exists b/doc/efun/variable_exists
index 1bbd843..65337e5 100644
--- a/doc/efun/variable_exists
+++ b/doc/efun/variable_exists
@@ -1,8 +1,8 @@
 SYNOPSIS
         #include <functionlist.h>
 
-        string variable_exists(string str [, int flags]);
-        string variable_exists(string str, object obj [, int flags]);
+        string variable_exists(string str [, int flags])
+        string variable_exists(string str, object obj [, int flags])
 
 BESCHREIBUNG
         Sucht eine Varialbe <str> in this_object() oder (falls angegeben)
@@ -22,7 +22,7 @@
         sie fuer das aufrufende Objekt nicht sichtbar sind), wird 0 zurueck
         geliefert.
 
-AENDERUNGEN
+GESCHICHTE
         Eingefuehrt in LDMud 3.2.10.
 
 SIEHE AUCH
diff --git a/doc/efun/variable_list b/doc/efun/variable_list
index 673b377..48bd9c6 100644
--- a/doc/efun/variable_list
+++ b/doc/efun/variable_list
@@ -1,9 +1,9 @@
 GESCHUETZT
 SYNOPSIS
-        #include <sys/functionlist.h>
-        #include <sys/lpctypes.h>
+        #include <functionlist.h>
+        #include <lpctypes.h>
 
-        *mixed variable_list(object obj, int flags = RETURN_FUNCTION_NAME);
+        mixed *variable_list(object obj, int flags = RETURN_FUNCTION_NAME)
 
 BESCHREIBUNG
         Liefert ein Array mit Informationen ueber die Variablen von <obj>.
@@ -12,7 +12,7 @@
         im Array abgespeichert:
           - der Name der Variablen
           - die Flags der Variablen (siehe weiter unten)
-          - der Rueckgabetyp (gemaess mudlib/sys/lpctypes.h)
+          - der Rueckgabetyp (gemaess <lpctypes.h>)
           - der Wert der Variablen
 
         <obj> kann als Objekt oder als Dateinamen uebergeben werden. Im
@@ -24,7 +24,7 @@
         <obj>).
 
         Mit <flags> wird festgelegt, welche Informationen ueber welche
-        Variablen abgefragt werden. Folgende Flags aus <sys/functionlist.h>
+        Variablen abgefragt werden. Folgende Flags aus <functionlist.h>
         koennen mit binaerem Oder kombiniert werden:
 
         Auswahl der gesammelten Information:
@@ -48,13 +48,11 @@
             TYPE_MOD_NO_MASGK     die Variable ist "nomask" deklariert
             TYPE_MOD_PUBLIC       die Variable ist "public" deklariert
 
-        All diese Flags sind in mudlib/sys/functionlist.h definiert und
-        sollten an einen allgemein zugaenglichen Platz kopiert werden.
-        Die Rueckgabewerte sind in mudlib/sys/lpctypes.h definiert, die
-        auch in die Mudlib kopiert werden sollten.
+        All diese Flags sind in <functionlist.h>, die Rueckgabewerte in
+        <lpctypes.h> definiert.
 
-AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.10
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.10.
 
 SIEHE AUCH
         inherit_list(E), functionlist(E), variable_exists(E)
diff --git a/doc/efun/widthof b/doc/efun/widthof
index e3ac599..6312d3d 100644
--- a/doc/efun/widthof
+++ b/doc/efun/widthof
@@ -1,16 +1,16 @@
 SYNOPSIS
-        int widthof(mapping map);
+        int widthof(mapping map)
 
 BESCHREIBUNG
         Liefert die Anzahl Values pro Key im Mapping <map>. Wenn <map> 0 ist,
         ist das Resultat 0.
 
-BEISPIEL
+BEISPIELE
         mapping map = (["foo" : 1;2]);
         widthof(map)    ergibt 2.
 
-AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.6
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2.6.
 
 SIEHE AUCH
         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 674ec9a..91c1bae 100644
--- a/doc/efun/wizlist_info
+++ b/doc/efun/wizlist_info
@@ -1,38 +1,39 @@
+GESCHUETZT
 SYNOPSIS
         #include <wizlist.h>
 
         mixed * wizlist_info()
 
-DESCRIPTION
-        Returns an array with the interesting entries of the wizlist.
-        Needs to be privileged by the master object.
+BESCHREIBUNG
+        Liefert ein Array mit Eintraegen aus der Wizlist (der internen
+        Goetterliste). Die Benutzung muss durch das Masterobjekt erlaubt
+        werden.
 
-        The result is an array with one entry for every wizard (uid).
-        Every entry is an array itself:
+        Das Resultat ist ein Array mit einem Eintrag fuer jeden Gott (uid).
+        Jeder Eintrag enthaelt wiederum ein Array mit folgenden Elementen:
 
-          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.
+            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
 
-        The 'weighted' entries decay every hour by 10%.
+        Die "gewichteten" Werte verfallen pro Stunde um 10%.
 
-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.
+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.
 
-SEE ALSO
-        privilege_violation(M), set_extra_wizinfo_size(E)
+SIEHE AUCH
+        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 a3041b0..276e35d 100644
--- a/doc/efun/write
+++ b/doc/efun/write
@@ -1,37 +1,32 @@
-SYNOPSIS:
+VERALTET
+SYNOPSIS
         void write(mixed msg)
 
-DESCRIPTION:
-        Write out something to the current player. What exactly will
-        be printed in the end depends of the type of msg.
-        Please mind: if there is no current player (this_player()), the
-        function will output directly to the driver debug log. Please check
-        before!
-        
-        If it is a string or a number then just prints it out.
-        
-        If it is an object then the object will be printed in the
-        form: "OBJ("+object_name((object)mix)+")"
-        
-        If it is an array just "<ARRAY>" 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.
+BESCHREIBUNG
+        Gibt etwas an den aktuellen Benutzer aus. Was genau ausgegeben wird,
+        haengt vom Typ der Meldung <msg> ab.
 
-EXAMPLES:
+        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>"
+
+        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.
+
+BEISPIELE
         write("Hello world!\n");
-        
-        Just print out a string.
-        
+        Dies gibt den String an den Benutzer aus.
+
         write(this_player());
-        
-        This will print out something like "OBJ(std/player#1234)".
-        
-        write( ({ "blub" }) );
-        
-        Will print out "<ARRAY>".
-        
-SEE ALSO:
-        say(E), tell_object(E), tell_room(E), shout(E), catch_tell(L)
+        Dies erzeugt etwas wie: "OBJ(/std/player#1234)".
+
+        write( ({"blubb"}) );
+        Dies erzeugt "<ARRAY>".
+
+SIEHE AUCH
+        say(E), tell_object(E), tell_room(E), catch_tell(A)
diff --git a/doc/efun/write_bytes b/doc/efun/write_bytes
index bb75484..b8b6b0a 100644
--- a/doc/efun/write_bytes
+++ b/doc/efun/write_bytes
@@ -1,11 +1,15 @@
 SYNOPSIS
-        int write_bytes(string file, int start, string str);
+        int write_bytes(string file, int start, bytes str)
 
 BESCHREIBUNG
-        Schreibt den String <str> ins File <file> und ueberschreibt dabei die
+        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.
 
+ANMERKUNGEN
+        Seit Version 3.2@232 ist write_bytes() in der Lage, Zeichen
+        aus <str> ans File <file> anzuhaengen.
+
 SIEHE AUCH
         save_object(E), write_file(E)
diff --git a/doc/efun/write_file b/doc/efun/write_file
index e79fb6b..f268eb4 100644
--- a/doc/efun/write_file
+++ b/doc/efun/write_file
@@ -1,6 +1,7 @@
 SYNOPSIS
-        int write_file(string file, string str);
-        int write_file(string file, string str, int flags);
+        int write_file(string file, string str)
+        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,
@@ -10,5 +11,13 @@
         Schreiben geloescht; das 'anhaengen' wird so effektiv ein
         'ueberschreiben'. Defaultwert fuer <flags> ist 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.
+
+GESCHICHTE
+        LDMud 3.6.0 fuegte den <encoding>-Parameter hinzu.
+
 SIEHE AUCH
-        file_size(E), cat(E), write_bytes(E), read_file(E), rm(E)
+        file_size(E), write_bytes(E), write_file(E), read_file(E),
+        read_bytes(E), rm(E), hooks(C)
diff --git a/doc/efun/xml_generate b/doc/efun/xml_generate
index 86506e0..d210d5e 100644
--- a/doc/efun/xml_generate
+++ b/doc/efun/xml_generate
@@ -38,7 +38,8 @@
         Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
         __XML_DOM__ definiert.
 
-BEISPIEL
+
+BEISPIELE
         xml_generate(({ "abc", 0, 0 })) -> "<abc/>"
         xml_generate(({ "abc", ([ "xyz" : "cde" ]), 0 })) -> "<abc xyz="cde"/>"
 
diff --git a/doc/efun/xml_parse b/doc/efun/xml_parse
index 4649c9a..130063b 100644
--- a/doc/efun/xml_parse
+++ b/doc/efun/xml_parse
@@ -31,14 +31,15 @@
                 
                 Falls das XML-Tag nichts enthaelt, so ist dieses Element 0.
 
-        Falls der XML-String nicht wohlgeformt ist oder falls nicht genug Speicher
-        zur Verfuegung steht, wird eine Fehlermeldung ausgegeben.
+        Falls der XML-String nicht wohlgeformt ist oder falls nicht genug
+        Speicher zur Verfuegung steht, wird eine Fehlermeldung ausgegeben.
 
         Diese Funktion ist nur verfuegbar, wenn der Driver mit Iksemel-
         Unterstuetzung compiliert wurde. In diesem Fall ist das Makro
         __XML_DOM__ definiert.
 
-BEISPIEL
+
+BEISPIELE
         xml_parse("<abc/>")           -> ({ "abc", 0, 0 })
         xml_parse("<abc xyz="cde"/>") -> ({ "abc", ([ "xyz" : "cde" ]), 0 })
 
diff --git a/doc/efun/xor_bits b/doc/efun/xor_bits
index 6f9eab9..885afa8 100644
--- a/doc/efun/xor_bits
+++ b/doc/efun/xor_bits
@@ -1,5 +1,5 @@
 SYNOPSIS
-        string xor_bits(string str1, string str2);
+        string xor_bits(string str1, string str2)
 
 BESCHREIBUNG
         <str1> und <str2> sind beiden Bitstrings. Das Resultat von xor_bits()
