massive refactoring to improve the "fluency" of Select() - ref #4