get rid of a few singletons
Singletons make it less obvious where and when stuff gets created and destroyed / who has ownership of the objects, break encapsulation and make it a bit harder to write tests. This MR moves a few singletons to the components that effectively have ownership anyways (by being responsible for initialization and cleanup); properly getting rid of the global state is much more involved but can be done step by step later on where it makes sense.
Edited by Xaver Hugl