heavy refactoring of how the selectors work, was previousl IO Element return, when it should have been IO [Element], which meant there needed to be some pretty hefty evaluation bandied around, and some more involved list manipulation. passes unit tests at the moment, but not sure it's exactly right; just checking in a copy with passing tests