diff --git a/lib/modules/Calendar.pmod/Gregorian.pmod b/lib/modules/Calendar.pmod/Gregorian.pmod
index 4be7166914ebdd7bc5839b423a827449a67365f7..2bb43ae2ea4cdb3daf262e61419c9d1ef5dec3e8 100644
--- a/lib/modules/Calendar.pmod/Gregorian.pmod
+++ b/lib/modules/Calendar.pmod/Gregorian.pmod
@@ -201,8 +201,11 @@ class Year
 	 if (!month_mapping)
 	 {
 	    month_mapping=
-	       mkmapping(Array.map(month_names,lower_case),
-			 indices(allocate(13))[1..]);
+	      mkmapping(Array.map(month_names, lower_case)+
+			Array.map(month_names,
+				  lambda(string s)
+				  { return lower_case(s[0..2]); } ),
+			(indices(allocate(13))[1..]) * 2);
 	 }
 	 n=month_mapping[lower_case(n)];
 	 if (!n) return 0;
@@ -1457,7 +1460,11 @@ object parse(string fmt,string arg)
    object low=m->year;
 
    if (m->M)
+   {
       m->month=low=m->year->month(m->M);
+      if(!m->month)
+         return 0; // Unknown month
+   }
    if (m->W) 
       m->week=low=m->year->week(m->W);