diff --git a/doc/efun/tell_room b/doc/efun/tell_room
index 6692643..28f18d2 100644
--- a/doc/efun/tell_room
+++ b/doc/efun/tell_room
@@ -1,50 +1,49 @@
 SYNOPSIS
-        void tell_room(string|object obj, string str)
-        void tell_room(string|object obj, string str, object *exclude)
+        void tell_room(string|object ob, string str)
+        void tell_room(string|object ob, string str, object *exclude)
 
-        void tell_room(string|object obj,
+        void tell_room(string|object ob,
                        mixed *|mapping|struct|object|lwobject msg)
-        void tell_room(string|object obj,
+        void tell_room(string|object ob,
                        mixed *|mapping|struct|object|lwobject msg,
                        object *exclude)
 
-BESCHREIBUNG
-        Gibt einen Text <str> an den Raum <obj> aus. <obj> kann auch der
-        Name des Raumes als String sein. Wenn das Objekt, das die Meldung
-        erhaelt, nicht ein interaktives Objekt (also kein User) ist, wird
-        im Empfaenger die Funktion catch_tell() mit dem Text als Argument
-        aufgerufen. Falls ein Lebewesen die Funktion catch_tell() definiert,
-        wird der Text hier ausgewertet und nicht an den User ausgegeben.
-        Wenn das Empfaengerobjekt mit seinem Namen angegeben ist, sucht der
-        Driver das Objekt unter diesem Namen und laedt es, falls notwendig.
-        Wenn das Array <*exclude> angegeben ist, wird der Text an die
-        Objekte in <*exclude> nicht ausgegeben.
+DESCRIPTION
+        Send a message <str> to all living objects in the room ob. ob
+        can also be the name of the room given as a string. If a
+        receiving object is not a interactive user the lfun
+        catch_tell() of the object will be invoked with the message as
+        argument. If living objects define catch_tell(), the string
+        will also be sent to that instead of being written to the
+        user. If the object is given as its filename, the driver
+        looks up the object under that name, loading it if necessary.
+        If array *exclude is given, all objects contained in
+        *exclude are excluded from the message str.
 
-        Wenn das zweite Argument ein nicht-String ist, wird in allen
-        Lebewesen, die den Text erhalten, catch_msg() aufgerufen (statt
-        catch_tell()).
+        If the second arg is an array/mapping/struct/object, catch_msg() will
+        be called in all listening livings.
 
-BEISPIELE
-        An alle Lebewesen im Raum soll ein simples "Hi!" gesendet werden:
+EXAMPLES
+        tell_object(environment(this_player()), "Hi!\n");
 
-            tell_object(environment(this_player()), "Hi!\n");
+        Just send a simple "Hi!" to all livings in the current.
 
-        Folgendes Beispiel zeigt, wie tell_room() zusammen mit catch_tell()
-        funktioniert.
+        Object 1 (living):
+           void catch_tell(string str) {
+              write("Received: "+str+"\n");
+           }
+        Object 2:
+           void func() {
+              ...
+              tell_room(environment(this_player()), "HiHo!\n");
+              ...
+           }
 
-        Objekt1 (ein Lebewesen):
-            void catch_tell(string str) {
-                write("Empfangen: "+str+"\n");
-            }
+        This examples shows how tell_room() together with catch_tell() works.
 
-        Objekt2:
-            void fun() {
-                tell_room(environment(this_player()), "Hallo Welt!\n");
-            }
+HISTORY
+        LDMud 3.3.686 added the use of a mapping/struct/object as second
+        argument.
 
-GESCHICHTE
-        LDMud 3.3.686 erlaubt die Verwendung eines mapping/struct/object als
-        zweites Argument.
-
-SIEHE AUCH
+SEE ALSO
         write(E), say(E), tell_object(E), catch_tell(A), catch_msg(A)
