Final submission, checked with Unit test