What's that Collision procedure in OnMove (last line in OnMove)? Did you just not include that procedure or should it be DoCollision. Other than that I don't know - maybe you should be calling Collision if any of the if statements above it are true rather than calling it for every OnMove.
Peter