diff --git a/doc/efun/previous_object b/doc/efun/previous_object
index 2b22080..bf28d5c 100644
--- a/doc/efun/previous_object
+++ b/doc/efun/previous_object
@@ -2,46 +2,44 @@
         object|lwobject previous_object()
         object|lwobject 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.
+DESCRIPTION
+        Returns an object pointer to the object that did a call (call_other(),
+        funcall(), etc) to the current object, if any. If that object is
+        destructed, the function returns 0.
 
-        Wird das Argument <i> angegeben, so verfolgt previous_object() den
-        Aufruf <i> Stufen zurueck. Zum Beispiel liefert previous_object(1) das
-        aufrufende Objekt des aufrufenden Objekts. Fuer <i> muss gelten:
-        0 <= i < call_stack_depth(). Ein Wert <i> < 0 liefert das erste
-        aufrufende Object zurueck.
+        If the optional arg is given, the call_other()s are followed
+        back i times (i.e. previous_object(1) returns the caller of
+        the caller): 0 <= i < caller_stack_depth(). If <i> is less than 0, the
+        first previous object is returned.
 
-        Es gibt einen wichtigen Spezialfall: in Funktionen, die vom Gamedriver
-        auf Grund eines externen Ereignises aufgerufen wurden (zum Beispiel
-        Kommandos, die mit add_action() definiert wurden), liefert
-        previous_object() den Wert von this_object(), previous_object(0)
-        hingegen 0.
+        There is an important special case: in functions called by
+        the gamedriver in reaction to some external event (e.g. commands
+        added by add_action), previous_object() will return this_object(),
+        but previous_object(0) will return 0.
 
-BEISPIELE
-        int sicherheitscheck() {
-            object|lwobject prev;
-            if (!(prev=previous_object()));
-            else if (getuid(prev)  != getuid(this_object()));
-            else if (geteuid(prev) != geteuid(this_object()));
-            else return 1;
-            return 0;
+EXAMPLES
+        int security() {
+           object|lwobject prev;
+           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())
+        void highly_sensible_func() {
+            if (!security())
                 return;
             ...
         }
 
-        Diese Funktion zeigt, wie man ueberpruefen kann, ob der letzte Aufruf
-        einer Funktion im aktuellen Objekt sicher war, oder ob die
-        Verarbeitung abgebrochen werden sollte.
+        This example shows how we can check if the last call to a
+        function of the current object is secure or if we should abort
+        execution.
 
-FEHLER
-        Werte von <i> < 0 werden wie <i> == 0 behandelt - dies ist historisch.
+BUGS
+        Values of i < 0 are treated as if i == 0 was passed - this is
+        historic.
 
-SIEHE AUCH
-        call_other(E), this_object(E), this_player(E), caller_stack(E),
-        caller_stack_depth(E), extern_call(E)
+SEE ALSO
+        call_other(E), this_object(E), this_player(E),
+        caller_stack(E), caller_stack_depth(E), extern_call(E)
