CS499 Final product