this stuff has to stay split as independent modules, cascade class is going to turn into monolith