Cleaned up and commented 1, 2 and 3.