diff --git a/doc/efun/apply b/doc/efun/apply
index d7c891e..0a8002e 100644
--- a/doc/efun/apply
+++ b/doc/efun/apply
@@ -1,35 +1,49 @@
 SYNOPSIS
-        mixed apply(closure cl, mixed arg, ...)
+        mixed apply(closure cl, ...)
 
-BESCHREIBUNG
-        Wertet die Closure <cl> aus. Wenn <cl> keine Closure ist, wird <cl>
-        unveraendert zurueck geliefert und alle Argumente <arg> werden
-        ignoriert.
+DESCRIPTION
+        Evaluates the closure <cl> with the following arguments.
+        If the last argument is an array or struct, it will be
+        flattened: ie. the array/struct itself will be removed and its
+        contents added to the argument list of <cl>
 
-        Es gibt einen kleinen Unterschied zu funcall(), das ja im Wesentlichen
-        das gleiche tut (naemlich, eine Closure auswerten): wenn das letzte
-        Argument von apply() ein Array ist, wird jedes Element dieses Arrays
-        zu einem separaten zusaetzlichen Parameter der Closure umgewandelt.
+        If <cl> is not a closure, it will simply be returned (and all
+        other arguments are ignored).
 
-        Eine moegliche Anwendung waere:
-            mixed eval(object ob,string func,mixed *args)
-            {
-                return apply(#'call_other,ob,func,args);
-            }
+EXAMPLES
+        The flattening of the last argument is the important difference
+        between apply() and funcall(). For example:
 
-        Das fuehrt zu folgenden Aufrufen:
-            ob->func(args[0],args[1],...,args[sizeof(args)-1])
+        mixed eval(object ob, string func, mixed *args)
+        {
+            return apply(#'call_other, ob, func, args);
+        }
 
-        Waere stattdessen funcall() aufgerufen worden, so haette das ergeben:
-            ob->func(args)
+        This will result in calling
 
-        Eine wichtige Anwendung von apply() ist das Auswerten des
-        Array-Arguments in "varargs" Funktionen.
+          ob->func(args[0],args[1],...,args[sizeof(args)-1]).
 
-GESCHICHTE
-        Eingefuehrt in 3.2@70.
-        LDMud 3.2.8 fuehrte ein, dass das erste Argument zurueck gegeben wird,
-            wenn es sich nicht um eine Closure handelt.
+        Using funcall() instead of apply() would have given us
 
-SIEHE AUCH
+          ob->func(args).
+
+
+        Of course, with the '...' operator we could also write
+
+        mixed eval(object ob, string func, mixed *args)
+        {
+            return funcall(#'call_other, ob, func, args...);
+        }
+
+        and achieve the same result.
+
+HISTORY
+        Introduced in 3.2@70
+        LDMud 3.2.8 adds the returning of a non-closure as first
+        argument.
+        LDMud 3.3 added the '...' operator and thus made apply() in fact
+        redundant.
+        LDMud 3.3.266 added support for structs.
+
+SEE ALSO
         funcall(E), closures(LPC), varargs(LPC)
