added some documentation
divided time shift responsibility into a class