add shift function