diff --git a/doc/efun/strftime b/doc/efun/strftime
index d437bcd..635e5c8 100644
--- a/doc/efun/strftime
+++ b/doc/efun/strftime
@@ -5,114 +5,117 @@
      string strftime(string fmt, int clock)
      string strftime(string fmt, int clock, int localized)
 
-BESCHREIBUNG
-     Gibt, aehnliche wie ctime(), eine Zeit als formatierten String zurueck.
-     Hierbei kann ein String mit div. Platzhaltern vom Benutzer angegeben
-     werden (s.u.). Wird kein String angegeben, wird "%c" als Formatstring
-     benutzt.
+DESCRIPTION
+     The function strftime() formats the given time in <clock> as a formatted
+     string, similar to ctime(). Unlike ctime(), strftime() accepts a format
+     string with placeholders for the different elements. The format string
+     consists of zero or more conversion specifiers (see below) and ordinary
+     characters. Ordinary charaecters are just copied to the result. A
+     conversion specifier starts with a percent sign ('%'). If no format
+     string is given, a default of "%c" will be used.
 
-     Das Argument <clock> wird als Anzahl Sekunden seit dem 01.01.1970, 00:00
-     Uhr interpretiert. Wenn <clock> nicht angegeben wird, wird time()
-     verwendet.
+     The argument <clock> is the number of seconds since the epoch (00:00:00
+     UTC, January 1, 1970), as returned by time/mktime(). If <clock> is not
+     given, the current result of time() will be used.
 
-     Das Argument <localized> gibt an, ob die Ausgabe englisch (das sog.
-     klassische "C" locale) oder in der jeweiligen Landessprache (z.B.
-     deutsch) erfolgen soll. Hierbei haengt die Sprache allerdings von den auf
-     dem Mudrechner gesetzten Umgebungsvariablen LC_TIME oder LC_ALL ab, sie
-     kann nicht selber gewaehlt werden. Wird kein <localized> angegeben, wird
-     1 verwendet, was einer Ausgabe in Landessprache entspricht.
-     0: Ausgabe im klassischen "C" locale (english)
-     1: Ausgabe in Landessprache des Mudrechners.
+     The argument <localized> specifies, whether the result will be in english
+     (the classic "C" locale) or in the language configured on the host
+     computer (e.g. german). The language has to be configured with the
+     environment variables LC_TIME or LC_ALL (please ask your admins). If
+     <localized> is not given, the default is 1.
+     0: use classic "C" locale (english)
+     1: use current locale on the host computer (national representation).
 
-ANMERKUNGEN
-     Der zurueckgebene Ergebnisstring ist max. 511 Zeichen lang.
+REMARKS:
+     The resulting string is at most 511 character long.
 
-PLATZHALTER
-     Diese Funktion versteht alle Platzhalter, die die Funktion strftime() aus
-     der C-Standardbibliothek versteht. Momentan sind dies:
-       %a     Der abgekuerzte Wochentag abhaengig von der momentanen Locale.
-       %A     Der gesamte Wochentag abhaengig von der momentanen Locale.
-       %b     Der abgekuerzte Monatsname abhaengig von der momentanen Locale.
-       %B     Der volle Monatsname abhaengig von der momentanen Locale.
-       %c     Das bevorzugte Datums- und Uhrzeit-Repraesentation laut Einstel-
-              lungen der momentanen Locale.
-       %C     Das Jahrhundert als zweistellige Zahl.
-       %d     Der Tag im Monat als Dezimalzahl (01 - 31).
-       %D     Aequivalent  zu %m/%d/%y.  (US-amerikanisches Format.  In anderen
-              Laendern ist %d/%m/%y durchaus ueblich . In internationalem Kon- 
-              text ist dieses Format daher mehrdeutig und sollte nicht verwen-
-              det werden.)
-       %e     Wie %d, der Tag im Monat als Dezimalzahl, aber eine fuehrende
-              Null ist durch ein Leerzeichen ersetzt.
-       %E     Modifikator: Alternatives Format benutzen, s.u.
-       %g     Wie  %G,  aber ohne das Jahrhundert, also mit zweistelligem Jahr
-              (00-99).
-       %G     Das Jahr laut ISO 8601 mit dem Jahrhundert als Dezimalzahl.  Das
-              vierstellige Jahr, das zu ISO-Wochennummer (siehe %V) passt.  Es
-              hat dasselbe Format und denselben Wert wie %y,  nur  dass,  wenn
-              die  ISO-Wochennummer  zum  vorhergehenden  oder  naechsten  Jahr
-              gehoert, dieses Jahr stattdessen benutzt wird.
-       %h     Aequivalent zu %b.
-       %H     Die Stunde im 24h-Format als Ganzzahl (00 - 23).
-       %I     Die Stunde im 12h-Format als Ganzzahl (01 - 12).
-       %j     Der Tag im Jahr als Ganzzahl (001 - 366).
-       %k     Die Stunde im 24h-Format als Ganzzahl (0 - 23); einzelne Ziffern
-              haben ein vorangestelltes Leerzeichen. (Siehe %H.)
-       %l     Die Stunde im 12h-Format als Ganzzahl (0 - 12); einzelne Ziffern
-              haben ein vorangestelltes Leerzeichen. (Siehe %I.)
-       %m     Der Monat als Ganzzahl (01 - 12).
-       %M     Die Minute als Ganzzahl (00 - 59).
-       %n     Ein Zeilenvorschub.
-       %p     Entweder 'AM' oder 'PM', je nach der uebergebenen  Uhrzeit,  oder
-              die  zugehoerigen Zeichenketten in der momentanen Locale.  Mittag
-              erhaelt 'PM', Mitternacht 'AM'.
-       %P     Wie %p, aber in Kleinbuchstaben.
-       %r     Zeit in AM/PM-Notation; in der POSIX-Locale ist das Aequivalent
-              zu '%I:%M:%S %p'.
-       %R     Zeit in 24h-Notation (%H:%M). (SU) Fuer eine Version mit Sekunden
-              siehe %T.
-       %s     Die Zahl der Sekunden seit  der  Epoche,  also  seit  1970-01-01
-              00:00:00 UTC.
-       %S     Die Sekunde als Ganzzahl (00 - 61).
-       %t     Ein Tabulatorzeichen.
-       %T     Zeit in 24h-Notation (%H:%M:%S).
-       %u     Der Tag der Woche als Zahl von 1 bis 7, mit Montag als 1.  Siehe
-              auch %w.
-       %U     Die Wochennummer des aktuellen Jahres als Ganzzahl  von  00  bis
-              53,  beginnend  mit dem ersten Sonntag als erster Tag der ersten
-              Woche.  Siehe auch %V und %W.
-       %V     Die Wochennummer nach ISO 8601:1988 als Dezimalzahl von  01  bis
-              53,  wobei Woche 1 die erste Woche ist, die wenigstens 4 Tage im
-              laufenden Jahr hat, mit Montag als dem  ersten  Tag  der  Woche.
-              Siehe auch %U und %W.
-       %w     Der  Tag  der  Woche  als  Zahl  von 0 bis 6, mit Sonntag als 0.
-              Siehe auch %u.
-       %W     Die Wochennummer des aktuellen Jahres als Ganzzahl  von  00  bis
-              53,  beginnend  mit  dem ersten Montag als erster Tag der ersten
-              Woche.
-       %x     Die bevorzugte Datums-Repraesentation ohne die Zeit in der momen-
-              tanen Locale.
-       %X     Die  bevorzugte  Uhrzeit-Repraesentation  ohne  das  Datum in der
-              momentanen Locale.
-       %y     Das Jahr als Ganzzahl ohne das Jahrhundert (00 - 99).
-       %Y     Das Jahr als Ganzzahl mit dem Jahrhundert.
-       %z     Die  Zeitzone  als  Stundendifferenz  zu  GMT. Benoetigt, um
-              RFC822-konforme  Datumsangaben  zu  erhalten  (mit '%a, %d %b %Y
-              %H:%M:%S %z').
-       %Z     Die Zeitzone oder der Name oder die Abkuerzung.
-       %+     Datum und Zeit im Format von date(1).
-       %%     Das Zeichen '%'.                                                            
-    
-FEHLER
-     Es gibt keinen Platzhalter fuer die Mondphase.
+CONVERSION SPECIFIERS:
+     This function accepts all conversion specifiers, which the function
+     strftime() from the C library accepts. Currently these are:
 
-BEISPIELE
-     write(strftime("Heute ist %A, der %d. %B %Y.\n"))
-     ergibt z.B.
-     "Heute ist Montag, der 24. September 2007.\n"
+     %A    is replaced by national representation of the full weekday name.
+     %a    is replaced by national representation of the abbreviated weekday
+           name.
+     %B    is replaced by national representation of the full month name.
+     %b    is replaced by national representation of the abbreviated month name.
+     %C    is replaced by (year / 100) as decimal number; single digits are
+           preceded by a zero.
+     %c    is replaced by national representation of time and date.
+     %D    is equivalent to ``%m/%d/%y''.
+     %d    is replaced by the day of the month as a decimal number (01-31).
+     %E* %O*
+           POSIX locale extensions.  The sequences %Ec %EC %Ex %EX %Ey %EY %Od
+           %Oe %OH %OI %Om %OM %OS %Ou %OU %OV %Ow %OW %Oy are supposed to
+           provide alternate representations.
+           Additionally %OB implemented to represent alternative 
+           months names (used standalone, without day mentioned).
+     %e    is replaced by the day of month as a decimal number (1-31); single
+           digits are preceded by a blank.
+     %F    is equivalent to ``%Y-%m-%d''.
+     %G    is replaced by a year as a decimal number with century.  This year
+           is the one that contains the greater part of the week (Monday as
+           the first day of the week).
+     %g    is replaced by the same year as in ``%G'', but as a decimal number
+           without century (00-99).
+     %H    is replaced by the hour (24-hour clock) as a decimal number (00-23).
+     %h    the same as %b.
+     %I    is replaced by the hour (12-hour clock) as a decimal number (01-12).
+     %j    is replaced by the day of the year as a decimal number (001-366).
+     %k    is replaced by the hour (24-hour clock) as a decimal number (0-23);
+           single digits are preceded by a blank.
+     %l    is replaced by the hour (12-hour clock) as a decimal number (1-12);
+           single digits are preceded by a blank.
+     %M    is replaced by the minute as a decimal number (00-59).
+     %m    is replaced by the month as a decimal number (01-12).
+     %n    is replaced by a newline.
+     %O*   the same as %E*.
+     %p    is replaced by national representation of either "ante meridiem" or
+           "post meridiem" as appropriate.
+     %R    is equivalent to ``%H:%M''.
+     %r    is equivalent to ``%I:%M:%S %p''.
+     %S    is replaced by the second as a decimal number (00-60).
+     %s    is replaced by the number of seconds since the Epoch, UTC (see
+           mktime(3)).
+     %T    is equivalent to ``%H:%M:%S''.
+     %t    is replaced by a tab.
+     %U    is replaced by the week number of the year (Sunday as the
+           first day of the week) as a decimal number (00-53).
+     %u    is replaced by the weekday (Monday as the first day of
+           the week) as a decimal number (1-7).
+     %V    is replaced by the week number of the year (Monday as the
+           first day of the week) as a decimal number (01-53).  If the week
+           containing January 1st has four or more days in the new year,
+           then it is week 1; otherwise it is the last week of the previous
+           year, and the next week is week 1.
+     %v    is equivalent to ``%e-%b-%Y''.
+     %W    is replaced by the week number of the year (Monday as the 
+           first day of the week) as a decimal number (00-53).
+     %w    is replaced by the weekday (Sunday as the first day of the week)
+           as a decimal number (0-6).
+     %X    is replaced by national representation of the time.
+     %x    is replaced by national representation of the date.
+     %Y    is replaced by the year with century as a decimal number.
+     %y    is replaced by the year without century as a decimal number (00-99).
+     %Z    is replaced by the time zone name.
+     %z    is replaced by the time zone offset from UTC; a leading plus sign
+           stands for east of UTC, a minus sign for west of UTC, hours and
+           minutes follow with two digits each and no delimiter between
+           them (common form for RFC 822 date headers).
+     %+    is replaced by national representation of the date and time
+           (the format is similar to that produced by date(1)).
+     %%    is replaced by `%'.
+     
 
-GESCHICHTE
-    Eingefuehrt in LDMud 3.3.718.
+BUGS
+        There is no conversion specification for the phase of the moon.
 
-SIEHE AUCH
+EXAMPLES
+        write(strftime("Today is %A, %d. %B %Y.\n"))
+          results in "Today is Monday, 24. September 2007.\n"
+
+HISTORY
+     Introduced in LDMud 3.3.718.
+
+SEE ALSO
      ctime(E), gmtime(E), localtime(E), mktime(E), time(E), utime(E)
+
