Cannot unit test an interface
Internal event system and some shuffling
Cleanup