OnCollision events are not always fired

I have a root object with Rigidbody on it and few child colliders. I try to check if those coliders touch the terrain. So I use OnCollisionEnter/OnCollisionExit/OnCollisionStay to check if contact point with terrain is added or removed.

So I've faced the situation when those events are sometimes fired and sometimes not. For example if my object is lifted off ground it still may not receive OnCollisonExit calls for all contact points.

There is also a problem when the object is grounded it stops receiving OnCollisionStay calls in a few seconds.

It seems like a bug or some kind of special behaviour. I'm using the latest Unity v3.1

It's expected that OnCollisionStay messages will stop, because rigidbodies are put to sleep to save CPU time if they aren't moving.

Just a note which may or may not relate to your problem, but collisions will only trigger if you apply a force or use the move function, not if you set the position. Also needs to be moved in FixedUpdate to interact with kinematic rigidbodies.