Completed Code, Have Not Test It Yet