broke up that craziness into different methods