diff --git a/doc/efun/walk_mapping b/doc/efun/walk_mapping
index 7396fcf..3dad60c 100644
--- a/doc/efun/walk_mapping
+++ b/doc/efun/walk_mapping
@@ -1,88 +1,24 @@
-walk_mapping(E)
+SYNOPSIS
+        void walk_mapping(mapping map, string fun, mixed extra, ...)
+        void walk_mapping(mapping map, string fun, string|object obj,
+                                                      mixed extra, ...)
+        void walk_mapping(mapping map, closures cl, mixed extra, ...)
 
-FUNKTION:
-        void walk_mapping(mapping m, string fun [, mixed extra, ...])
-        void walk_mapping(mapping m, string fun, string|object ob
-                                                , mixed extra,...)
-        void walk_mapping(mapping m, closure cl, mixed extra,...)
+BESCHREIBUNG
+        Ruft obj->fun(key, &value1, ... &valueN, extra, ...) fuer jeden Key
+        im Mapping <map> auf bzw. wendet die Closure <cl> auf jeden Key
+        im Mapping <map> an. Dies Keys werden als Wert uebergeben, die Values
+        als Referenz, entsprechend koennen sie in der Funktion veraendert
+        werden.
 
-PARAMETER:
-     m		- durchzugehendes Mapping
-     fun/cl	- zu rufende Methode/Closure
-     ob		- Objekt/Dateiname, an dem Methode gerufen werden soll
-     extra	- weitere Parameter fuer Methode/Closure
+        Es kann eine beliebige Anzahl zusaetzlicher Argumente <extra>
+        uebergeben werden.
 
-BESCHREIBUNG:
-     Ruft die Methode fuer jeden Eintrag im Mapping:
-      ob->func(key, value1, ..., valueN, extra,...)
-     beziehungsweise fuehrt die Closure fuer jeden dieser Eintraege aus:
-      funcall(cl, key, value1, ..., valueN, extra,...)
+        Wird <obj> weggelassen oder enthaelt es weder einen String noch ein
+        Objekt, wird standardmaessig this_object() verwendet.
 
-     Die Schluessel werden als Wert uebergeben und die dazugehoerigen Werte
-     per Referenz, diese koennen somit also in der Funktion/Closure geaendert
-     werden.
+GESCHICHTE
+        Eingefuehrt in LDMud 3.2@61.
 
-
-     Verwendung von Methoden:
-	Wenn bei der Angabe von 'fun' kein Objekt 'ob' in Form eines Strings
-	oder Objekts angegeben wird, wird this_object() angenommen.
-
-     Verwendung von Closures:
-	Es koennen sowohl Lfun-Closures als auch Lambda-Closures verwendet
-	werden. Lfun-Closures koennen, wenn im selben Objekt vorhanden auch
-	'private' oder/und 'static' deklariert sein, muessen aber zu dem
-	Zeitpunkt der Verwendung bekannt sein (Funktionsprototypen benutzen).
-
-BEISPIELE:
-     // Liste mit Spielern durchgehen ...
-     mapping x=([ [/human:liafar]:  20,
-		  [/dwarf:mesirii]: 50,
-		  [/elf:zarniya]:   40,
-		  [/feline:turbo]:  30]);
-
-     // ... und Werte aendern:
-     void add_val(object key, int val, int add) {
-       if(key->InFight())
-         val+=add;
-       else
-         val-=add;
-     }
-
-     // verschiedene Aufrufarten, identisches Resultat:
-     walk_mapping(x, "add_val", 0, 10);
-     walk_mapping(x, "add_val", this_object(), 10
-     walk_mapping(x, "add_val", "/players/jof/addierobjektmitmethode", 10);
-
-     walk_mapping(x, #'add_val, 10);
-
-
-AeQUIVALENZCODE (nicht empfohlen, nur zum Verstaendnis!):
-     // so richtig aequivalent wird es nur mit einer Closure hier
-     int i, width;
-     mapping input;
-     mixed *index, *param;
-
-     width=get_type_info(input)[1];
-     param=allocate(width);
-     index=m_indices(input);
-     i=sizeof(index);
-     while(i--) {
-       j=width;
-       while(j-- > 1)
-         param[j]=input[index[i],j];
-       j[0]=index[i];
-
-       apply(cl, param);
-       // fun(index[i], input[index[i],0], input[index[i],1], ...);
-      }
-
-SIEHE AUCH:
-     Arrays:		filter(E), map(E)
-     Objektarrays:	filter_objects(E), map_objects(E)
-     Mappings:		filter_indices(E), map_indices(E)
-
-     Sonstiges:		m_contains(E)
-			member()
-			m_indices(E), m_values(E)
-
-20.Jan 2005 Gloinson
+SIEHE AUCH
+        map(E), filter(E)
