I agree that this wrapping business is scary, but I think this is correct. 

    scala> val futureTick = 10L + Int.MaxValue
    futureTick: Long = 2147483657

    scala> val tick = Int.MaxValue + 5
    tick: Int = -2147483644

    scala> futureTick - tick
    res21: Long = 4294967301

    scala> (futureTick - tick).toInt
    res22: Int = 5

Note that futureTick is a Long. We might want to make `tick` a Long to avoid confusion?