Rechecked and revised for checking of any uncaught errors.