diff --git a/doc/efun/explode b/doc/efun/explode
index f004d41..fca1aa8 100644
--- a/doc/efun/explode
+++ b/doc/efun/explode
@@ -2,17 +2,15 @@
         string * explode(string str, string del)
         bytes *  explode(bytes str, bytes del)
 
-BESCHREIBUNG
-        Liefert ein Feld (Array) mit Zeichenketten (Strings), indem alle
-        Vorkommen von del (delimiter = Trenner) aus str herausgeschnitten
-        werden und so str in mehrere Zeichenketten zerlegt wird. Falls
-        eine Bytefolge uebergeben wurde, so wird diese in gleicher Weise
-        zerschnitten und zurueckgegeben.
+DESCRIPTION
+        Return an array of strings, created when the string str is split
+        into substrings as divided by del. When given a byte sequence
+        returns an array of byte sequences in a similar fashion.
 
-        implode(explode(str, del), del) == str ist immer wahr.
+        implode(explode(str, del), del) == str is always true.
 
-BEISPIELE
-        Funktion                    Rueckgabewert
+EXAMPLES
+        function                    returns
         -------------------------------------------------------------------
         explode(" ab cd ef ", " ")  ({ "", "ab", "cd", "ef", "" })
         explode("abc", "abc")       ({ "", "" })
@@ -21,14 +19,14 @@
         explode("abc", "xyz")       ({ "abc" })
         explode("abc", "")          ({ "a", "b", "c" })
 
-GESCHICHTE
-        Zeitpunkt der Aenderung unbekannt.
-        explode(" ab cd ef ", " ") lieferte frueher ({ "ab", "cd", "ef" })
-        anstatt ({ "", "ab", "cd", "ef", "" }), d. h., leere Zeichenketten
-        wurden ignoriert. Das neue Verhalten ist schoener, da nun
-        implode(explode(str, del), del) == str immer wahr ist.
-        Seit 3.5.0 liefert explode("","") ({""}) zurueck, sodass garantiert
-        ist, dass ein nicht-leeres Array geliefert wird.
+HISTORY
+        Date of change is unknown.
+        explode(" ab cd ef ", " ") formerly returned ({ "ab", "cd", "ef" })
+        instead of ({ "", "ab", "cd", "ef", "" }), i. e. the empty strings
+        were ignored. The new behaviour is more consistent, because now
+        implode(explode(str, del), del) == str is always true.
+        Since 3.5.0 explode("","") returns ({""}), so it is guaranteed to
+        return a non-empty array.
 
-SIEHE AUCH
+SEE ALSO
         sscanf(E), extract(E), implode(E), regexplode(E)
