made it nicer, but still callbacks are the worst