quite a bit of architectural cleanup to simplify instantiation across all components as well as simplify event management