refactor selection again. shift responsibility to collection