refactored out colorShift()