diff --git a/lib/modules/Calendar.pmod/Events.pmod b/lib/modules/Calendar.pmod/Events.pmod
index 94578156057e90073c2e93eaf6b92ce56862a018..e991ad285d9e634df60aeaf010612f69730c198d 100644
--- a/lib/modules/Calendar.pmod/Events.pmod
+++ b/lib/modules/Calendar.pmod/Events.pmod
@@ -145,14 +145,25 @@ Event.Event make_event(string source)
       case "Equinox":
 	 if (sscanf(rule, "Equinox%*[ \t]%s", string type)) {
 	    switch(String.trim_all_whites(type)) {
-	    case "Vernal":
+	    case "Vernal": case "Northward":
 	       return Event.Solar(0);
-	    case "Autumnal":
+	    case "Autumnal": case "Southward":
 	       return Event.Solar(2);
 	    }
 	 }
 	 error("Events: rule error; unknown rule format:\n%O\n",source);
 
+      case "Solstice":
+	 if (sscanf(rule, "Solstice%*[ \t]%s", string type)) {
+	    switch(String.trim_all_whites(type)) {
+	    case "Summer": case "Northern":
+	       return Event.Solar(1);
+	    case "Winter": case "Southern":
+	       return Event.Solar(3);
+	    }
+	 }
+	 error("Events: rule error; unknown rule format:\n%O\n",source);
+
       case "Weekday":
 	 if (sscanf(rule,"Weekday%*[ \t]%s%*[ \t]%d days",
 		    wd,days)>=2 && (n=wd2n[wd]))
diff --git a/lib/modules/Calendar.pmod/events/regional b/lib/modules/Calendar.pmod/events/regional
index 9fae27ff6eaa90a8eef125e970c81d3193a58afd..775f18fc9e633d327d561874f533a240fbe9b6d7 100644
--- a/lib/modules/Calendar.pmod/events/regional
+++ b/lib/modules/Calendar.pmod/events/regional
@@ -87,6 +87,13 @@
 
 # Global Events
 
+# Astronomical events
+
+  Event "northward equinox"       - "Northward Equinox"       Equinox Vernal
+  Event "Southward equinox"       - "Southward Equinox"       Equinox Autumnal
+  Event "northern solstice"       - "Northern Solstice"       Solstice Northern
+  Event "southern solstice"       - "Southern Solstice"       Solstice Southern
+
 # western gregorian calendar events
 
   Event "new year"                - "New Year's Day"          Fixed Jan  1