Tons of work on problem 2, made one mistake to fix later