Week 2
Week 3
Week 4 plus some refactoring