Hinge joint connected body scripting issues

Hello, I have been trying for some time now to assign a rigid body to a hinge joint that is created when one object collides with another. At the moment i have just a simple cube fired into a roof, using onCollision.enter i seem to have managed to create a hinge joint on the cube at what appears to be the contact point between the cube and roof(top), (another joint appears higher in the scene for some reason as well).
However i cannot assign a connected body and have tried several things and have read many posts about it but cannot get these suggestions to work. Below is some of the code with lines after the // representing tried attempts:

function OnCollisionEnter(theCollision : Collision){

//if collision is with gameobject top log event
if(theCollision.gameObject.name == "top"){
Debug.Log("roofhit");
}

    var otherBody = gameObject.Find ("top");
	var contact : ContactPoint = theCollision.contacts[0];
	var pos : Vector3 = contact.point;		
	
	if(theCollision.gameObject.name == "top"){

        //using this creates a hinge but no connected body 
		gameObject.AddComponent(HingeJoint);
		hingeJoint.anchor = pos;
		hingeJoint.connectedBody = otherBody.rigidbody;
		
		//hingeJoint.connectedBody = gameObject.name == "top";
		
		//hingeJoint.connectedBody =
		
	} 
		
		
}

Any help would be greatly appreciated.
Thanks in advance.

UPDATE: so mere minutes after posting i have solved the connected body problem, however it turns out the joint is being created way above the contact point and not at the point where the cube hits the roof. Any ideas??

@LiamT

You most likely figured this out long ago, but Hinge Joint’s anchor property is defined in local space, and I believe your contact pos there is in world space. That would explain your offset…

Sorry that nobody answered you for over three years.