Further class extraction; cleaner OOP; some events