Finished all functionality required by the assignment