Walking trough the trees happens because you?¢_Tre objects can move in larger steps then you?¢_Tre smallest collision box. The simplest way to avoid this is to do some more collision tests along you?¢_Tre objects path if its movement speed is high. Collision response is the second problem, rather than moving an object back you should collect a list of objects colliding with it and by their attributes (position, speed, mass, etc.) determine where they?¢_Tll push or otherwise affect each other.