diff --git a/doc/efun/tell_object b/doc/efun/tell_object
index 207672e..6b6d5c9 100644
--- a/doc/efun/tell_object
+++ b/doc/efun/tell_object
@@ -1,49 +1,46 @@
 SYNOPSIS
-        void tell_object(object|string obj, string str)
-        void tell_object(object|string obj,
+        void tell_object(object|string ob, string str)
+        void tell_object(object|string ob,
                          mixed *|mapping|struct|object|lwobject msg)
 
-BESCHREIBUNG
-        Sendet einen Nachricht an das Objekt <obj> (das auch durch seinen
-        Namen angegeben werden kann).
+DESCRIPTION
+        Send a message str to object ob (which is looked up and if necessary
+        loaded if given by name).
+        
+        If the second argument is a string, the message will be printed
+        to <ob> if it is an interactive user, otherwise it will be passed to
+        the lfun catch_tell() of the target living.
 
-        Ist die Nachricht ein String, wird der Text an interaktive Objekte
-        direkt ausgegeben, fuer andere Objekte wird die lfun catch_tell()
-        aufgerufen.
+        If the second argument is an array/mapping/struct/object, it will be
+        passed to the lfun catch_msg() in the target.
 
-        Ist die Nachricht ein anderer Typ, wird die lfun catch_msg() im
-        Empfaenger aufgerufen.
+EXAMPLES
+        object who;
+        who=find_player("wessex");
+        tell_object(who, "Hi!\n");
 
-BEISPIELE
-        Dies gibt ein einfaches "Hi!" an den Spieler Thomas aus:
+        Just tell Wessex a simple "Hi!".
 
-            object wer;
-            wer = find_player("thomas");
-            tell_object(wer, "Hi!\n");
 
-        Ein Beispiel mit zwei Objekten, das zeigt, wie das Zusammenspiel von
-        catch_tell() und tell_object() ablaueft. Objekt1 ist ein Lebewesen
-        mit Namen "Dummymonster", Objekt2 verteilt die Meldung:
+        Object 1 (living with the name "dummymonster"):
+           void catch_tell(string str) {
+              write("Received: "+str+"\n");
+           }
+        Object 2:
+           void func() {
+              object who;
+              who=find_living("dummymonster");
+              tell_object(who, "Follow me, mortal one!\n");
+              ...
+           }
 
-        Objekt1:
-            void catch_tell(string str)
-            {
-                wirte("Erhaltener Text: "+str+"\n");
-            }
+        This examples shows how tell_object() together with
+        catch_tell() works.
 
-        Objekt2:
-            void fun()
-            {
-                object wer;
-                wer = find_living("dummymonster");
-                tell_object(wer, "Folge mir, Sterblicher!\n");
-                ...
-            }
+HISTORY
+        LDMud 3.2.11 introduced the 'mixed *' form for symmetry reasons.
+        LDMud 3.3.686 added the use of a mapping/struct/object as second
+        argument.
 
-GESCHICHTE
-        LDMud 3.2.11 fuehrte die Arrayform aus Symmetriegruenden ein.
-        LDMud 3.3.686 erlaubt die Verwendung eines mapping/struct/object als
-        zweites Argument.
-
-SIEHE AUCH
+SEE ALSO
         write(E), say(E), catch_tell(A), catch_msg(A)
