refactored selection model/controller