This simplifies the collision handling code.
Names and locations of declarations are still up in the air, but things seem to be working assuming my test code is correct.