ical-recurrence: test that the recurrence set has no two instances with the same start recurEvents unions sets of EventOccurrence, which deduplicates on (start, end) pairs rather than on the start alone. A period-valued RDATE whose start coincides with an instance the RRULE generates therefore yields two instances at the same instant with different ends. RFC 5545 says the period-valued form of RDATE is how the duration of a specific recurrence is modified, so the RDATE should win here. The same can happen without any RDATE at all: recurEvents inserts the DTSTART occurrence with the original end while the rule separately regenerates it through resolveEndOrDurationDate, and those two agree only when unresolveUTCTimeR . resolveLocalTimeR round-trips, which it does not for a DTEND whose local time falls in a daylight saving time gap.