trying to split stuff up, but uh, maybe needs more thought