Slight optimization in pick/roll, much more is needed
Fail on invalid values, rather than die