completed shift program, need to refactor and write tests