Ah man, I found it after a couple of hours of messing with your example. A bug in my code obviously. For some reason I was using a negative z velocity in TranslateEntity to apply curve to the ball flight. This was screwing things completely after a collision. I feel bad now for messing you about, sorry.