break out functionality into different sections