generalized but ugh we have a lot of work 2do