diff --git a/lib/modules/Calendar.pmod/YMD.pike b/lib/modules/Calendar.pmod/YMD.pike
index b260d89613d56ad0cc03728ca9876ef397fb51e0..9557e824a4d9343dd42b592bf59516ffd7411e00 100644
--- a/lib/modules/Calendar.pmod/YMD.pike
+++ b/lib/modules/Calendar.pmod/YMD.pike
@@ -2877,14 +2877,14 @@ TimeRange parse(string fmt,string arg,void|TimeRange context)
 	 {
 	    m->month=low=m->year->month(m->M);
 	 }
-	 if (m->W) 
+	 if (m->W)
 	    m->week=low=m->year->week("w"+m->W);
 
 	 if (!zero_type(m->D))
 	    m->day=low=(m->month||(context?context->month():cal->Month()))
 	       ->day((int)m->D);
 	 else if (!zero_type(m->a))
-	    m->day=low=m->year->day(m->a);
+	    m->day=low=(m->month || m->year)->day(m->a);
 	 else if (!zero_type(m->e))
 	    m->day=low=(m->week||(context?context->week():cal->Week()))
 	       ->day(m->e);
diff --git a/lib/modules/Calendar.pmod/testsuite.in b/lib/modules/Calendar.pmod/testsuite.in
index cb50fd22a70da5e5dc6af639200d362283f50a68..39aee6c8c26520775f1baeab7a6b32ef7c47b0a9 100644
--- a/lib/modules/Calendar.pmod/testsuite.in
+++ b/lib/modules/Calendar.pmod/testsuite.in
@@ -77,6 +77,8 @@ test_equal( Calendar.ISO.parse("%dT%h:%m:%s", "19980717T14:08:55")->set_timezone
 test_equal( Calendar.ISO.set_timezone("UTC")->parse("%dT%h:%m:%s", "19980717T14:08:55"),
             Calendar.ISO.set_timezone("UTC")->parse("%dT%h:%m:%s", "19980717T14:08:55") )
 
+test_eq(Calendar.parse ("%Y %M %a", "2005 Oct  7"), Calendar.Day (2005, 10, 7))
+test_eq(Calendar.parse ("%Y %a", "2005 7"), Calendar.Day (2005, 1, 7))