Updated version.
Better null result handling.
Event Priority raised, catches event cancel.
Used private member variables to track gather