clean up
add a part2 function