diff --git a/doc/efun/process_string b/doc/efun/process_string
index 8f43053..2e023ba 100644
--- a/doc/efun/process_string
+++ b/doc/efun/process_string
@@ -2,42 +2,46 @@
 SYNOPSIS
         string process_string(string str)
 
-BESCHREIBUNG
-        Durchsucht den String <str> nach "value by function call", das
-        heisst nach @@, gefolgt von einem impliziten Funktionsaufruf. Siehe
-        auch "value_by_function_call" im Prinzipien-Teil der Enzy.
+DESCRIPTION
+        Searches string str for occurrences of a "value by function
+        call", which is an implicit function call surrounded by @@. See
+        "value_by_function_call" in the principles section.
 
-        Der Wert sollte eine String in dieser Form enthalten:
+        The value should contain a string like this:
         @@function[:filename][|arg|arg]@@
 
-        <function> muss einen String zurueckliefern, sonst wird der zu
-        verarbeitende String unveraendert zurueck geliefert.
+        <function> must return a string or else the string which should be
+        processed will be returned unchanged.
 
-        process_string() fuehrt keine Rekursion ueber zurueck gelieferte
-        Werte durch: wenn eine Funktion wiederum eine implizite Funktion
-        zurueckliefert, wird diese zweite Funktion nicht mehr verarbeitet.
+        process_string() does not recurse over returned
+        replacement values. If a function returns another function
+        description, that description will not be replaced.
 
-        Sowohl <filename> wie auch die Argumente <arg> sind optional.
+        Both the filename and the args are optional.
 
-BEISPIELE
+        Consecutive function calls can be written adjacent:
+
+          @@function1@@function2@@
+
+EXAMPLES
         string foo(string str) {
-            return "ab"+str+"ef";
+           return "ab"+str+"ef";
         }
-
         void func() {
-            write(process_string("@@foo|cd@@"+"\n");
+           write(process_string("@@foo|cd@@")+"\n");
         }
 
-        func() gibt jetzt an den Benutzer den String "abcdef" aus.
+        The function func() will print out the string "abcdef".
 
-FEHLER
-        Die Verwendung von process_string() kann massive Sicherheitsprobleme
-        verursachen.
+BUGS
+        Using process_string() can lead to severe security problems.
 
-GESCHICHTE
-        Wegen der Sicherheitsprobleme ist process_string() seit 3.2.1@34
-        optional.
+HISTORY
+        Because of the security problems, process_string() is an
+        optional efun since 3.2.1@34
+        LDMud 3.3.160 removed the undocumented 'feature' that a function call
+        declaration could be terminated by a space. In turn this now allows
+        the use of arguments with spaces.
 
-SIEHE AUCH
+SEE ALSO
         notify_fail(E), closures(LPC), get_bb_uid(M)
-
