a whole buncha setup and some public functions to get what i want