major reorg
- split functionality into sub-selectors
- make functionality easily overridable