diff --git a/doc/efun/regreplace b/doc/efun/regreplace
index d459bb2..e0e7cf3 100644
--- a/doc/efun/regreplace
+++ b/doc/efun/regreplace
@@ -1,57 +1,51 @@
-SYNOPSIS
-     string regreplace(string txt, string pattern,
-                       string|closure replacepattern, int flags)
-
-BESCHREIBUNG
-     Die Funktion durchsucht den String txt nach einem Vorkommen
-     des regulaeren Ausdrucks pattern, und ersetzt ihn durch
-     den String replacepattern. (replacepattern kann auch eine Closure
-     sein. Sie bekommt als argument den passenden Substring und muss
-     den Ersatzstring zurueckliefern.)
-
-     Im replacestring kann man via '&' auf den zum Suchausdruck
-     passenden Teilstring im Original zugreifen. Mit \n (wobei n
-     eine Ganzzahl ist) kann man auf den n-ten Unterausdruck
-     des regulaeren Ausdrucks zugreifen. Um "&" oder "\\1" als
-     Ersetzung zu erreichen, muss "\\&" bzw "\\\\1" verwendet werden.
-
-     Beim Flag bestimmt ein gesetztes Bit 0, dass der Ausdruck so oft
-     wie vorhanden ersetzt wird, sonst nur das erste Auftreten.
-     Bit 1 bestimmt, ob der regulaere Ausdruck 'ed' oder 'sed' kompatibel
-     ist (Bit geloescht) oder 'ex' kompatibel (gesetzt).
-
-     Die Funktion wirkt wie s/pattern/replacepattern/flags in
-     Editoren wie vi oder sed. Sie ist besonders gut geeignet um
-     variable Strings zu ersetzen, im Gegensatz zu regexplode, wo
-     man den String nur nach einem regulaeren Ausdruck zerlegen kann.
-
-BEISPIELE
-     // ersetzt @@wer@@ durch den Namen des Objektes
-     regreplace(str,"@@wer@@",(string)obj->name(WER,2),1)
-
-     // ersetze alle doppelten Leerzeichen durch ein einzelnes
-     regreplace(str, "  *", " ", 1);
-
-     // Sucht nach 'teilt Dir mit: ' und schliesst den nachfolgenden
-     // Text mit <underline> und </underline> ein; bei jedem Auftreten.
-
-     msgin = regreplace(msgin, "teilt Dir mit: (.*)",
-                               "teilt Dir mit: <underline>\\1</underline>",
-                               1);
-
-     // Ersetzt die <underline> html-Tags durch die vt100
-     // Escape-Sequenzen fuer Unterstreichung
-     txt = regreplace(txt, "<underline>", "<ESC>[5m", 1);
-
-     // Ersetzt das Wort HOUSE in Kleinbuchstaben.
-     txt = regreplace(txt, "HOUSE", #'lower_case, 1);
-
-BUGS:
-     I have written that efun. It doesn't have BUGS. By definition.
-     Well, in fact it crashed as I first tried it on running TAPPMud.
-     *sigh*
-     Marcus@TAPPMud
-
-SIEHE AUCH
-     Verwandt: regexp(E), regexplode(E), sscanf(E)
-     Aehnlich: replace_personal(L)
+SYNOPSIS
+      string regreplace(string txt, string pattern, 
+                            string|closure replacepattern, int flags)
+
+BESCHREIBUNG
+      Die Funktion durchsucht den String txt nach einem Vorkommen
+      des regulaeren Ausdrucks pattern, und ersetzt ihn durch
+      den String replacepattern. (replacepattern kann auch eine Closure
+      sein. Sie bekommt als argument den passenden Substring und muss
+      den Ersatzstring zurueckliefern.)
+
+      Im replacestring kann man via '&' auf den zum Suchausdruck
+      passenden Teilstring im Original zugreifen. Mit \n (wobei n
+      eine Ganzzahl ist) kann man auf den n-ten Unterausdruck
+      des regulaeren Ausdrucks zugreifen. Um "&" oder "\\1" als
+      Ersetzung zu erreichen, muss "\\&" bzw "\\\\1" verwendet werden.
+
+      Beim Flag bestimmt ein gesetztes Bit 0, dass der Ausdruck so oft
+      wie vorhanden ersetzt wird, sonst nur das erste Auftreten.
+      Bit 1 bestimmt, ob der regulaere Ausdruck 'ed' oder 'sed' kompatibel
+      ist (Bit geloescht) oder 'ex' kompatibel (gesetzt).
+
+      Die Funktion wirkt wie s/pattern/replacepattern/flags in
+      Editoren wie vi oder sed. Sie ist besonders gut geeignet um
+      variable Strings zu ersetzen, im Gegensatz zu regexplode, wo
+      man den String nur nach einem regulaeren Ausdruck zerlegen kann.
+
+BEISPIELE
+      string msgin;
+
+      /* Sucht nach 'teilt Dir mit: ' und schliesst den nachfolgenden
+      ** Text mit <underline> und </underline> ein; bei jedem Auftreten.
+      */
+      msgin = regreplace(msgin, "teilt Dir mit: (.*)",
+             "teilt Dir mit: <underline>\\1</underline>", 1);
+
+      /* Ersetzt die <underline> html-Tags durch die vt100
+      ** Escape-Sequenzen fuer Unterstreichung
+      */
+      txt = regreplace(txt, "<underline>", "<ESC>[5m", 1);
+
+      /* Ersetzt das Wort HOUSE in Kleinbuchstaben. */
+      txt = regreplace(txt, "HOUSE",
+              function string (string s) {return lower_case(s);},
+              1);
+
+AUTOR
+      Marcus@TAPPMud schrieb die Original-efun (und die englische Manpage).
+
+SIEHE AUCH
+      regexp(E), regexplode(E), sscanf(E)
