Completed and tested... Minor bug remain