treat custom exit() as private for now