def events_flatten(events):
    """
    Combines all overlapping events in an ordered sequence of events
    """
    if len(events) <= 1:
        return events
    else:
        a = events[0]
        b = events[1]
        if a.intersects(b):
            return events_flatten([a.join(b)] + events[2:])
        else:
            return [a] + events_flatten(events[1:])