diff --git a/doc/efun/map_objects b/doc/efun/map_objects
index 4543a2e..a0961f9 100644
--- a/doc/efun/map_objects
+++ b/doc/efun/map_objects
@@ -1,51 +1,15 @@
-map_objects(E)
+SYNOPSIS
+        mixed * map_objects(object *arr, string fun, mixed extra, ...)
+        mixed * map_objects(string *arr, string fun, mixed extra, ...)
 
-FUNKTION:
-     object *map_objects(object *arr, string fun [, mixed extra])
+BESCHREIBUNG
+        map_objects() verhaelt sich aehnlich wie map(), ruft jedoch
+        arr[n]->fun(extra, ...) auf. Der Rueckgabewert ersetzt das Objekt bzw.
+        den Objektnamen in <arr>.
+        <arr> kann auch eine Mischung aus Objekten und Objektnamen enthalten.
+        Es ist eine beliebige Anzahl <extra> Argumente erlaubt, welche alle an
+        die Funktion <fun> uebergeben werden.
+        0-Eintraege in <arr> werden ignoriert.
 
-PARAMETER:
-     arr	- zu mappendes Array von Objekten/Objektpfaden
-     fun	- an Objekten zu rufende Methode
-     extra	- weitere Parameter fuer Methode
-
-BESCHREIBUNG:
-     Mapped die Elemente aus 'arr' durch den Aufruf der Methode 'fun' an
-     jedem der Elemente von 'arr' in ein neues Array.
-     0-Eintraege werden ignoriert.
-
-     Der Rueckgabewert von
-	arr[n]->fun([extra1, extra2, ...])
-     wird an der Indexposition des Elementes in das neue Array eingetragen.
-
-RUeCKGABEWERT:
-     Array mit Resultaten der Funktionsaufrufe am jeweiligen Objekt.
-
-BEMERKUNGEN:
-     Werden Pfade angegeben, so wird versucht ein Objekt zu laden, falls
-     dieses nicht existiert.
-
-BEISPIEL:
-     // ersetze alle Objekte durch ihre Namen
-     arr=map_objects(inputarr, "name");
-
-     // ersetze alle Objekte durch ihre Namen im Genitiv
-     arr=map_objects(inputarr, "name", WESSEN);
-
-AeQUIVALENZCODE (nicht empfohlen, nur zum Verstaendnis!):
-     int i;
-     object *ret; mixed *input;
-
-     i=sizeof(input);
-     ret=allocate(i);
-     while(i--)
-       ret[i]=input[i]->fun([extra1, extra2, ...]);
-
-SIEHE AUCH:
-     Arrays:		filter(E), map(E)
-     Objektarrays:	filter_objects(E)
-     Mappings:		filter_indices(E), map_indices(E)
-
-     Sonstiges:		sort_array(E), unique_array()
-			alist, transpose_array(E)
-
-20.Jan 2005 Gloinson
+SIEHE AUCH
+        map(E), filter(E), filter_objects(E)
