version 0.2.1, with better-behaved shift