anchor.diff:          let rectangle = Common.PolygonTools.CreateRectangle (endRadius * 0.75f, height * 0.5f, center, 0.0f) // scaled in the capsule's box by 0.75f to stop corner sticking
           let list = List<Common.Vertices> ()
           list.Add rectangle
  -        let bodyShapes = Factories.FixtureFactory.AttachCompoundPolygon (list, density, body, bodyShapeSource)
  -        let bodyShapeTop = Factories.FixtureFactory.AttachCircle (endRadius, density, body, Common.Vector2 (0.0f, height * 0.5f), bodyShapeSource)
  -        let bodyShapeBottom = Factories.FixtureFactory.AttachCircle (endRadius, density, body, Common.Vector2 (0.0f, 0.0f - height * 0.5f), bodyShapeSource)
  +        let bodyShapes = body.CreateCompoundPolygon (list, density)
  +        let bodyShapeTop = body.CreateCircle (endRadius, density, Common.Vector2 (0.0f, height * 0.5f))
  +        let bodyShapeBottom = body.CreateCircle (endRadius, density, Common.Vector2 (0.0f, 0.0f - height * 0.5f))
           bodyShapes.Add bodyShapeTop
           bodyShapes.Add bodyShapeBottom
           for bodyShape in bodyShapes do
  +            bodyShape.Tag <- 
  +                { Simulant = sourceSimulant
  +                  BodyId = bodyProperties.BodyId
  +                  ShapeId = match bodyCapsule.PropertiesOpt with Some p -> p.BodyShapeId | None -> Gen.idEmpty }
               FarseerPhysicsEngine.configureBodyShapeProperties bodyProperties bodyCapsule.PropertiesOpt bodyShape |> ignore
           Array.ofSeq bodyShapes
   
  -    static member private attachBodyPolygon sourceSimulant bodyProperties bodyPolygon body =
  -        let bodyShapeSource =
  -            { Simulant = sourceSimulant
  -              BodyId = bodyProperties.BodyId
  -              ShapeId = match bodyPolygon.PropertiesOpt with Some p -> p.BodyShapeId | None -> Gen.idEmpty }
  +    static member private attachBodyPolygon sourceSimulant bodyProperties bodyPolygon (body : Body) =
           let vertices =
               bodyPolygon.Vertices |>
               Array.map (fun vertex -> vertex + bodyPolygon.Center) |>
               Array.map FarseerPhysicsEngine.toPhysicsV2
  -        let bodyShape =
  -            Factories.FixtureFactory.AttachPolygon
  -                (FarseerPhysics.Common.Vertices vertices,
  -                 bodyProperties.Density,
  -                 body,
  -                 bodyShapeSource)
  +        let bodyShape = body.CreatePolygon (Common.Vertices vertices, bodyProperties.Density)
  +        bodyShape.Tag <-
  +            { Simulant = sourceSimulant
  +              BodyId = bodyProperties.BodyId
  +              ShapeId = match bodyPolygon.PropertiesOpt with Some p -> p.BodyShapeId | None -> Gen.idEmpty }
           FarseerPhysicsEngine.configureBodyShapeProperties bodyProperties bodyPolygon.PropertiesOpt bodyShape
   
       static member private attachBodyShapes sourceSimulant bodyProperties bodyShapes (body : Body) =
  
positive.code:         body.add_OnCollision (fun fn fn2 collision -> FarseerPhysicsEngine.handleCollision physicsEngine fn fn2 collision)
  
          // listen for separations
          body.add_OnSeparation (fun fn fn2 -> FarseerPhysicsEngine.handleSeparation physicsEngine fn fn2)
  
          // attempt to add the body
          if not (physicsEngine.Bodies.TryAdd ({ SourceId = createBodyMessage.SourceId; CorrelationId = bodyProperties.BodyId }, body)) then
  
negative.code: open tainicom.Aether.Physics2D
  open tainicom.Aether.Physics2D.Dynamics
  open tainicom.Aether.Physics2D.Dynamics.Contacts
  open tainicom.Aether.Physics2D.Dynamics.Joints
  open Prime
  open Nu
  
  