I don't know if this will do what you are looking for but I think you need a familykey in your Contacts and then your relation between contacts would be based on this family key.
What you end up with is really a "many to many self join relationship". You link contacts to another occurrence of contacts, but with a "join" table in between so that many contacts can be related to many other contacts.
Contacts----<Relationships>----RelatedContacts (RelatedContacts is a second occurrence of Contacts, --< means "one to many" )
Contacts::ContactID = Relationships::ContactID1
RelatedContacts::ContactID = Relationships::ContactID2
You enable "allow creation of records via this relationship" for Contacts to Relationships and place a portal to Relationships on your Contacts layout.
Place ContactID2 in this portal row with name and any other contact fields that you want added to this portal row, but taken from RelatedContacts.
Format ContactID2 as a drop down list of ID numbers and corresponsing names from the contacts table.
THis allows you to list related contacts by selecting them from the drop down.
A script can make a second record in Relationships with the values in ContactID1 and ContactID2 swapped so that linking Jim to John by selecting Jim's name in the drop down automatically links John to Jim.
Thank you both, very helpful but I'm still struggeling. PhilModJunk - can you take a look at the attached graphic and let me know what I'm missing. I'm gettign a many-to-many relationship. Arghh...
It looks correct. Are RelatedContacts and Contacts occurrences of the same data source table? (If you hover the mouse over the arrow in the top left corner, do you see the same table name appear?)