About the first problem:
body2 is rectangle too
protected static float LINEAR_DRAG_COEFFICIENT = 300.0f;
protected static float FORCE = 1800.0f;
...
// body1 creation
bridgeLeftOuterSide = BodyFactory.Instance.CreateRectangleBody(physicsSimulator, 7, 206, 1000);
bridgeLeftOuterSide.Position = new Vector2(532, 540);
bridgeLeftOuterSide.IsStatic = true;
bridgeLeftOuterSideGeom = GeomFactory.Instance.CreateRectangleGeom(physicsSimulator, bridgeLeftOuterSide, 7, 206);
// body2 creation
body2 = BodyFactory.Instance.CreateRectangleBody(physicsSimulator, 28, 16, 100);
body2.LinearDragCoefficient = LINEAR_DRAG_COEFFICIENT;
body2.RotationalDragCoefficient = 100000;
body2Geometry = GeomFactory.Instance.CreateRectangleGeom(physicsSimulator, boxBody, 28, 16);
...
// In that way i send body2 fixed impulse value and maximum velocity is fixed
body2.ApplyImpulse(new Vector2(FORCE * (float)Math.Cos(boxBody.Rotation), FORCE * (float)Math.Sin(boxBody.Rotation)));
