anchor.diff:  
         if (match) {
           // We have contact and a matched callback, setup contact info
  +        List<Point> touchingPoints = null;
  +        Offset touchingNormal = null;
  +
  +        // Fetch touching points, if any
  +        if (b2Contact.isTouching()) {
  +          box2d.WorldManifold manifold = new box2d.WorldManifold();
  +          b2Contact.getWorldManifold(manifold);
  +          touchingNormal = new Offset(manifold.normal.x, manifold.normal.y);
  +          touchingPoints = [];
  +          for (Vector2 vec in manifold.points) {
  +            touchingPoints.add(new Point(
  +              vec.x * physicsNode.b2WorldToNodeConversionFactor,
  +              vec.y * physicsNode.b2WorldToNodeConversionFactor
  +            ));
  +          }
  +        }
  +
  +        // Create the contact
           PhysicsContact contact = new PhysicsContact(
             bodyA._node,
             bodyB._node,
             fixtureA.userData,
             fixtureB.userData,
             b2Contact.isTouching(),
  -          b2Contact.isEnabled()
  +          b2Contact.isEnabled(),
  +          touchingPoints,
  +          touchingNormal
           );
  -
  -        if (type == PhysicsContactType.postSolve) {
  -
  -        }
   
           // Make callback
           info.callback(type, contact);
  
positive.code:           }
          }
        }
        canvas.restore();
      }
    }
  }
  
negative.code:     this.shapeA,
      this.shapeB,
      this.isTouching,
      this.isEnabled,
      this.touchingPoints,
      this.touchingNormal
    );
  
    final Node nodeA;
  