diff --git a/doc/efun/say b/doc/efun/say
new file mode 100644
index 0000000..6f0958f
--- /dev/null
+++ b/doc/efun/say
@@ -0,0 +1,98 @@
+SYNOPSIS
+        void say(string str);
+        void say(string str, object exclude);
+        void say(string str, object *excludes);
+
+        void say(mixed *|mapping|struct|object msg);
+        void say(mixed *|mapping|struct|object msg, object exclude);
+        void say(mixed *|mapping|struct|object msg, object *excludes);
+
+BESCHREIBUNG
+        Es bestehen zwei Hauptanwendungen fuer say():
+
+        Wenn das erste Argument ein String <str> ist, wird er an alle
+        lebendigen Objekte im aktuellen Raum gesendet, ausser zum Objekt,
+        das die Funktion aufgerufen hat.
+
+        Ist die Nachricht ein String, wird der Text an interaktive Objekte
+        direkt ausgegeben, fuer andere Objekte wird die lfun catch_tell()
+        in diesen aufgerufen.
+        Falls ein Lewebesen die Funktion catch_tell() definiert (-> shadow),
+        so wird der Text hier ausgewertet und nicht an den User ausgegeben.
+
+        Wenn das zweite Argument, die Nachricht, kein String ist, wird in
+        allen Lebewesen, die den Text erhalten, catch_msg() anstatt
+        catch_tell() aufgerufen.
+
+        Mit dem Array <*exclude> kann man verhindern, dass die Nachricht an
+        die darin enthaltenen Objekte gesendet wird. Der Sender muss nicht
+        noch einmal aufgefuehrt werden.
+        Das ist sinnvoll, wenn zB eine Spielergruppe Ausloeser einer Meldung
+        ist und diese selbst nicht erhalten soll.
+
+        Das aufrufende Objekt wird nach folgenden Regeln bestimmt:
+          - Wenn say() aus einem lebendigen Objekt aufgerufen wird, gilt
+            dieses als das aufrufende Objekt.
+          - Wenn say() aus einem nicht-lebendigen Objekt als Resultat einer
+            Handlung eines Benutzers aufgerufen wird (das heisst,
+            this_player() ist gueltig), gilt this_player() als aufrufendes
+            Objekt.
+          - In allen anderen Faellen (Aufruf aus reset zB) gilt das Objekt,
+            das say() aufgerufen hat, als aufrufendes Objekt.
+
+BEMERKUNGEN
+        - fuer laengere Meldungen sollte break_string() verwendet werden
+        - wird in einem catch_msg() der Wert von <msg> veraendert, erhalten
+          alle nachfolgenden Objekte das veraenderte <msg> (Referenz!)
+
+        - say(<str>) ist verhaltensgleich zu
+          tell_room(environment(), <str>, ({this_player()||this_object()}))
+
+BEISPIELE
+        // Folgende Aufrufe sind gleich, wenn sie durch ein Spielerkommando
+        // in einem nicht lebendigen Objekt aufgeloest werden:
+
+            say("Hi!\n");
+            say("Hi!\n", this_player());
+
+        // Das folgende Beispiel zeigt, wie say() zusammen mit catch_tell()
+        // funktioniert. Das zweite Objekt darf nicht lebendig sein, damit
+        // write() an den aktuellen Benutzer geht.
+
+        Objekt 1 (living):
+            void catch_tell(string str) {
+                write("Empfangen: "+str+"\n");
+            }
+
+        Objekt 2 (nicht living):
+            void func() {
+                ...
+                say("HiHo!\n");
+                ...
+            }
+
+        // Ein etwas komplexeres Beispiel zeigt das Zusammenspiel von say()
+        // und catch_msg(). Auch hier wird ein nicht-lebendiges Objekt
+        // verwendet, das die Nachricht ausgibt, sodass das 'wer' in
+        // catch_msg() auf den aktuellen Benutzer zeigt.
+
+        Object 1 (living):
+            void catch_msg(mixed *arr, object who) {
+                foreach(mixed element: arr)
+                    tell_object(who, sprintf("%O\n", element));
+            }
+
+        Object 2 (nicht living):
+            void func() {
+                ...
+                say( ({ "Hello", "there!" }) );
+                ...
+            }
+
+SIEHE AUCH
+        Aehnlich:   tell_room(E), write(E), shout(E), tell_object(E),
+                    printf(E)
+        Verwandt:   catch_tell(E), catch_msg(A)
+        Sonstiges:  object_name(E)
+
+7.Aug 2007 Gloinson
\ No newline at end of file
