Completed with Unit Test