shifter implementation