diff --git a/doc/efun/exec b/doc/efun/exec
index 10a320a..7df1df5 100644
--- a/doc/efun/exec
+++ b/doc/efun/exec
@@ -1,40 +1,39 @@
-GESCHUETZT
 SYNOPSIS
         int exec(object new, object old)
 
-BESCHREIBUNG
-        exec() schaltet die Verbindung um vom interaktiven Objekt <old> zum
-        Objekt <old>. Wenn <new> ebenfalls interaktiv ist, wird dessen
-        Verbindung zum Objekt <old> uebertragen, die Verbindungne von <old>
-        und <new> werden also ausgetauscht. Wenn <new> nicht interaktiv ist,
-        ist <old> nach der Ausfuehrung von exec() nicht mehr interaktiv.
+DESCRIPTION
+        exec() switches the connection from the interactive object old
+        to the object new. If the new object is also interactive, it's
+        connection will be transferred to the old object, thus
+        exchaning the two connections between the object. If the new
+        object is not interactive, the old will not be interactive
+        anymore after the exec call succeeded.
 
-        Das Resultat von exec() ist 1 bei Erfolg, 0 sonst.
+        The result is 1 on success, and 0 on failure.
 
-        exec() wird verwendet, um unterschiedliche "user objects" zu laden
-        oder um User mit totem Netz wieder zu verbinden.
+        exec() is used to load different "user objects" or to reconnect
+        link dead users.
 
-        Um Sicherheitsmechanismen zu gewaehrleisten, wird im Masterobjekt
-        valid_exec(<laufendes Programm>, <new>, <old>) aufgerufen. Dieser
-        Aufruf muss etwas von 0 verschiedenes liefern, um den Aufruf von
-        exec() zu erlauben.
+        To provide security mechanisms, the interpreter calls
+        master->valid_exec(current_program, new, old), which must
+        return anything other than 0 to allow this exec() invocation.
 
-        Wenn <old> this_player() war, enthaelt this_player() nach dem Aufruf
-        von exec() <new> und umgekehrt. Gleiches gilt fuer this_interactive().
+        After the exec(), if arg 2 was this_player(), this_player()
+        becomes arg 1, else vice versa. Ditto for this_interactive().
 
-        Vorsicht ist geboten, wenn eine simul-efun() um exec() herum gebaut
-        wird: das <laufende Programm>, das an valid_exec() uebergeben wird,
-        ist das simul-efun Objekt. Um dieses Problem zu umgehen, kann mittels
-        bind_lambda() #'exec an das richtige Objekt gebunden und anschliessend
-        mit funcall() aufgerufen werden.
+        Take care when writing a simul-efun around exec(): the
+        'current_program' passed to the valid_exec() function will be
+        that of the simul-efun object. To get around this, use
+        bind_lambda() to bind #'exec to the real object and funcall()
+        the resulting closure.
 
-BEISPIELE
+EXAMPLES
         ob = clone_object("std/player");
         exec(ob, this_object());
         destruct(this_object());
 
-GESCHICHTE
-        LDMud 3.2.9 fuehrte den Austauschprozess fuer this_interactive() ein.
+HISTORY
+        LDMud 3.2.9 added the switchover of this_interactive().
 
-SIEHE AUCH
+SEE ALSO
         connect(M), disconnect(M), logon(A), interactive(E)
