Restructuring collection events to do less work, fixes #18, fixes #21