fix off by 1 bug; split generateGroup and selectIndex