diff -upr date-dev/date_api.module date/date_api.module
--- date-dev/date_api.module	2009-03-01 23:35:21.000000000 +0100
+++ date/date_api.module	2009-03-10 00:19:38.000000000 +0100
@@ -692,7 +692,7 @@ function date_format_date($date, $type =
       // The timezone name translations can use t().  
       case 'e':
       case 'T':
-        $datestring .= t($c);
+        $datestring .= t(date_format($date, $c));
         break;
       // Remaining date parts need no translation.
       case 'O':
diff -upr date-dev/date_php4/date_php4.inc date/date_php4/date_php4.inc
--- date-dev/date_php4/date_php4.inc	2009-02-23 23:16:04.000000000 +0100
+++ date/date_php4/date_php4.inc	2009-03-10 00:21:08.000000000 +0100
@@ -138,12 +138,13 @@ if (!function_exists('date_format')) {
               $date_string .= $dow;
             }
             elseif ($c == 'l') {
-              $days = date_week_days();
-             $date_string .= $days[$dow];
+              $days = date_week_days_untranslated();
+              $date_string .= $days[$dow];
             }
             elseif ($c == 'D') {
               $days = date_week_days_abbr();
-              $date_string .= $days[$dow];
+              // There is no date_week_days_abbr_untranslated(). This rule works for English, untranslated day names.
+              $date_string .= substr($days[$dow], 0, 3); 
             }
             break;
           case 'L':
@@ -172,10 +173,10 @@ if (!function_exists('date_format')) {
             $date_string .= sprintf('%s%02d:%02d', (date_offset_get($date) < 0 ? '-' : '+'), abs(date_offset_get($date) / 3600), abs(date_offset_get($date) % 3600) / 60);
             break;
           case 'e':
-            $date .= $date->timezone;
+            $date_string .= $date->timezone;
             break;
           case 'Z':
-            $date .= date_offset_get($date);
+            $date_string .= date_offset_get($date);
             break;
           case '\\':
             $date_string .= $format[++$i];
