Problem 3
Add some documentation
Problem 7
Problem 4
Problem 9