break out different parts to make it more modular and customizable