refactor to reactive collection