diff --git a/lib/modules/Calendar.pmod/YMD.pike b/lib/modules/Calendar.pmod/YMD.pike
index 402e6225612226cc4a8c53733f81e9e13b0ad704..d3f255523d72a7c7d0e6a56c509da646bac1c0fb 100644
--- a/lib/modules/Calendar.pmod/YMD.pike
+++ b/lib/modules/Calendar.pmod/YMD.pike
@@ -2814,45 +2814,50 @@ protected TimeRange dwim_zone(TimeRange origin,string zonename,
 {
    if (zonename=="") return 0;
 
-   if (zonename[0]=='"') sscanf(zonename,"\"%s\"",zonename);
-   sscanf(zonename,"%*[ \t]%s",zonename);
-
-   if(sizeof(zonename)==4 && zonename[2]=='S')
-     zonename = zonename[0..1] + zonename[3..3];
-   else if(sizeof(zonename)>4 && has_suffix(zonename, "DST"))
-     zonename = zonename[..<3];
-
-   if (origin->rules->abbr2zone[zonename])
-      zonename=origin->rules->abbr2zone[zonename];
-
-   Calendar.Rule.Timezone zone=Calendar.Timezone[zonename];
-   if (!zone)
-   {
-      if (sscanf(zonename,"%[^+-]%s",string a,string b)==2 && a!="" && b!="")
-      {
-	 TimeRange tr=dwim_zone(origin,a,whut,@args);
-	 if (!tr) return 0;
-
-	 return 
-	    dwim_tod(origin->set_timezone(
-	       Calendar.Timezone.make_new_timezone(
-		  tr->timezone(),
-		  Calendar.Timezone.decode_timeskew(b))),
-	       whut,@args);
-      }
-      if(!abbr2zones)
-	abbr2zones = master()->resolv("Calendar")["TZnames"]["abbr2zones"];
-      array pz=abbr2zones[zonename];
-      if (!pz) return 0;
-      foreach (pz,string zn)
-      {
-	 TimeRange try=dwim_zone(origin,zn,whut,@args);
-	 if (try && try->tzname()==zonename) return try;
-      }
-      return 0;
-   }
-   else
-      return dwim_tod(origin->set_timezone(zone),whut,@args);
+   Calendar.Rule.Timezone zone = Calendar.Timezone[zonename];
+
+   if( !zone )
+   {
+       if (zonename[0]=='"') sscanf(zonename,"\"%s\"",zonename);
+       sscanf(zonename,"%*[ \t]%s",zonename);
+
+       if(sizeof(zonename)==4 && zonename[2]=='S')
+           zonename = zonename[0..1] + zonename[3..3];
+       else if(sizeof(zonename)>4 && has_suffix(zonename, "DST"))
+           zonename = zonename[..<3];
+
+       if (origin->rules->abbr2zone[zonename])
+           zonename=origin->rules->abbr2zone[zonename];
+
+       zone=Calendar.Timezone[zonename];
+
+       if (!zone)
+       {
+           if (sscanf(zonename,"%[^+-]%s",string a,string b)==2 && a!="" && b!="")
+           {
+               TimeRange tr=dwim_zone(origin,a,whut,@args);
+               if (!tr) return 0;
+
+               return 
+                   dwim_tod(origin->set_timezone(
+                                Calendar.Timezone.make_new_timezone(
+                                    tr->timezone(),
+                                    Calendar.Timezone.decode_timeskew(b))),
+                            whut,@args);
+           }
+           if(!abbr2zones)
+               abbr2zones = master()->resolv("Calendar")["TZnames"]["abbr2zones"];
+           array pz=abbr2zones[zonename];
+           if (!pz) return 0;
+           foreach (pz,string zn)
+           {
+               TimeRange try=dwim_zone(origin,zn,whut,@args);
+               if (try && try->tzname()==zonename) return try;
+           }
+           return 0;
+       }
+   }
+   return dwim_tod(origin->set_timezone(zone),whut,@args);
 }
 
 protected mapping(string:array) parse_format_cache=([]);
@@ -3053,7 +3058,6 @@ TimeRange parse(string fmt,string arg,void|TimeRange context)
 	       return 0; // need "am" or "pm"
 	 }
       }
-
       if (m->z) // zone
 	 low = dwim_zone(low,m->z,g,h,mi,s);
       else if (g)
@@ -3274,19 +3278,19 @@ TimeofDay http_time(string what, void|TimeRange cx)
 {
   TimeofDay t;
 
-  string date1 = "%D %M %Y"; // 2+1+3+1+4=11
-  string date2 = "%D-%M-%y"; // 2+1+3+1+2=9
-  string date3 = "%M %*[ ]%D"; // 2+1+2=5
-  string time = "%h:%m:%s"; // 2+1+2+1+2=8
+  constant date1 = "%D %M %Y"; // 2+1+3+1+4=11
+  constant date2 = "%D-%M-%y"; // 2+1+3+1+2=9
+  constant date3 = "%M %*[ ]%D"; // 2+1+2=5
+  constant time = "%h:%m:%s"; // 2+1+2+1+2=8
 
   // 3+2+ 11 +1+ 8 +4 = 29
-  string rfc1123_date = "%e, "+date1+" "+time+" %z";
+  constant rfc1123_date = "%e, "+date1+" "+time+" %z";
 
   // 6+2+ 9 +1+ 8 +4 = 33
-  string rfc850_date = "%e, "+date2+" "+time+" %z";
+  constant rfc850_date = "%e, "+date2+" "+time+" %z";
 
   // 3+1+ 5 +1+ 8 +1+4 = 23
-  string asctime_date = "%e "+date3+" "+time+" %Y";
+  constant asctime_date = "%e "+date3+" "+time+" %Y";
 
   if( sizeof(what)<23 ) return 0;