public MapPoint translate(MapPoint original, int numSteps) {
			switch (this) {
			case NORTH:
				return original.cloneAndTranslate(0, numSteps);
			case SOUTH:
				return original.cloneAndTranslate(0, -numSteps);
			case EAST:
				return original.cloneAndTranslate(numSteps, 0);
			case WEST:
				return original.cloneAndTranslate(-numSteps, 0);
			default:
				// supress java error complaining about not returning anything
				// This point will never be reached anyway
				throw new IllegalStateException();
			}
		}