diff --git a/doc/efun/trace b/doc/efun/trace
index 330fcf1..829d8a1 100644
--- a/doc/efun/trace
+++ b/doc/efun/trace
@@ -1,54 +1,57 @@
-GESCHUETZT
 SYNOPSIS
         #include <trace.h>
 
         int trace(int traceflags)
 
-BESCHREIBUNG
-        Setzt die Trace Flags und liefert die alten Trace Flags zurueck.
-        Wenn Tracing eingeschaltet ist, wird waehrend der Ausfuehrung eine
-        Menge Informationen ausgegeben. Zu viel Output kann die Verbindung
-        lahm legen oder sogar den ganzen Treiber zum Absturz bringen.
+DESCRIPTION
+        Sets the trace flags and returns the old trace flags. When
+        tracing is on, a lot of information is printed during
+        execution and too much output can crash your connection or
+        even the whole driver.
 
-        Tracing erfolgt auf einer Pro-Verbindung-Basis: jeder interaktive (!)
-        User kann sein eigenes Tracelevel und -praefix festlegen. Jeder
-        erhaelt nur den Traceoutput fuer den Code, der waehrend der
-        Auswertung eines vom User eingegeben Kommandos ausgefuehrt wird.
+        Tracing is done on a per-connection basis: each interactive(!)
+        user may specifiy their own tracelevel and -prefix. Each gets the
+        traceoutput for just the code executed during the evaluation
+        of the commands he entered.
 
-        Die Trace-Bits (aus <trace.h>) sind:
+        The trace bits are:
 
-            TRACE_NOTHING       (  0): Beendet das Tracing
-            TRACE_CALL          (  1): Tracet alle Aufrufe von Lfuns
-            TRACE_CALL_OTHER    (  2): Tracet alle call_other() Aufrufe
-            TRACE_RETURN        (  4): Tracet Resultate von Funktionen
-            TRACE_ARGS          (  8): Gibt Argumente und Resultate von
-                                       Funktionen aus
-            TRACE_EXEC          ( 16): Tracet alle ausgefuehrten Anweisungen
-            TRACE_HEART_BEAT    ( 32): Tracet den Heartbeat Code
-            TRACE_APPLY         ( 64): Tracet Treiber-Applies
-            TRACE_OBJNAME       (128): Gibt den Namen des Objektes aus
+          TRACE_NOTHING     (  0): stop tracing.
 
-        TRACE_EXEC und TRACE_HEART_BEAT sollten nicht verwendet werden, weil
-        sie massiven Output verursachen. TRACE_OBJNAME sollte nicht verwendet
-        werden, wenn bekannt ist, welches Objekt getracet wird.
+          TRACE_CALL        (  1): trace all calls to lfuns.
+          TRACE_CALL_OTHER  (  2): trace call_others()s.
+          TRACE_RETURN      (  4): trace function returns.
+          TRACE_ARGS        (  8): print function arguments and results.
+          TRACE_EXEC        ( 16): trace all executed instructions.
+          TRACE_HEART_BEAT  ( 32): trace heartbeat code.
+          TRACE_APPLY       ( 64): trace driver applies.
+          TRACE_OBJNAME     (128): print the object names.
 
-        Die Master-Lfun valid_trace() wird mit ("trace", traceflags)
-        aufgerufen, um die Erlaubnis fuer die Nutzung von trace() zu erhalten.
+        TRACE_EXEC and TRACE_HEART_BEAT should be avoided as they cause
+        massive output! TRACE_OBJNAME should be avoided when you know
+        what you trace.
 
-BEISPIELE
+        The master-lfun valid_trace() is called with ("trace", traceflags)
+        as argument to verify the use of this efun.
+
+
+EXAMPLES
         object obj;
         string prefix;
-        obj = find_player("thomas");
-        prefix = object_name(obj);  /* z.B. /std/player#69         */
-        prefix = prefix[1..];       /* entfernt den fuehrenden "/" */
+        obj = find_player("wessex");
+        prefix = object_name(obj);
+        prefix = prefix[1..];  /* cut off the leading "/" */
         traceprefix(prefix);
-        /* Von hier an wird nur Code im Objekt std/player#69 getracet */
+          /* From here on, only code in the object "std/player#69"
+           * will be traced.
+           */
         trace(TRACE_CALL|TRACE_CALL_OTHER|TRACE_RETURN|TRACE_ARGS);
         ...
         trace(TRACE_NOTHING);
 
-GESCHICHTE
-        LDMud 3.2.9 uebergibt auch <traceflags> an valid_trace().
+HISTORY
+        LDMud 3.2.9 passes the <traceflags> argument to the valid_trace()
+        apply as well.
 
-SIEHE AUCH
+SEE ALSO
         traceprefix(E)
