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)
