In my game I've made a bullet pool for a weapon. When bullet hits smth it's deactivated (so I don't need to create it again when I want the weapon to shoot).
It works like this:
1. We have bullet (with body and geom) A
2. We have object (with body and geom) B
3. A hits B, B.CollisionHandler is called.
4. In B.CollisionHandler I set A.Geom.CollisionEnabled = false and A.Body.Enabled = false. Also I set A.Body.LiniearVelocity = Vecto2.Zero and A.Body.AngularVelocity = 0.0f
5. On next update B.CollisionHandler is still called even when it's second parameter (bool CollisionHandler (Geom geometry1, Geom geometry2, ContactList contactList)) have CollisionEnabled set to false (geometry2.CollisionEnabled == false).
So, what does CollisionEnabled do and if there a way to temporary disable all collision for some geom without removing it from engine queue? For now I just move bullet far away, but it's some kind of hack imo.