Changed contract for upcaster for better performance
Added single event upcaster abstract impl
General code cleanup