yet another major rehaul. this time, it's all in one file, and the workers are all subclasses of a worker class