Fully functioning part 1 and part 2!