At least, it fails to check for the setValueCurveAtTime cases. Also, it seems to me like it violates the following sentence of the spec as well: "If one of these events is added at a time where there is already one or more events of a different type, then it will be placed in the list after them, but before events whose times are after the event."