diff --git a/lib/modules/Calendar.pmod/YMD.pike b/lib/modules/Calendar.pmod/YMD.pike
index bf4d93e6f01e0bbc3c5c807d3c2f8cdb10a2a46a..560fe060550d6d567187b3b724ca0c1f7915633e 100644
--- a/lib/modules/Calendar.pmod/YMD.pike
+++ b/lib/modules/Calendar.pmod/YMD.pike
@@ -2486,8 +2486,17 @@ static TimeRange dwim_tod(TimeRange origin,string whut,int h,int m,int s)
    TimeRange tr;
    if (catch {
       tr=origin[whut](h,m,s);
-   } && h==24 && m==0 && s==0) // special case
-      return origin->end()->second();
+   }) {
+      if (h==24 && m==0 && s==0) // special case
+         return origin->end()->second();
+      else {
+	 object d=origin->day();
+	 array(cHour) ha=origin->hours();
+	 int n=search(ha->hour_no(),h);
+	 if (n!=-1) tr=ha[n]->minute(m)->second(s);
+	 else return 0; // no such hour
+      }
+   }
 
    if (tr->hour_no()!=h || tr->minute_no()!=m)
    {