Found it!!!
Our freight calculation (delphi code) is doing a delete-insert every time freight is re-calculated. Freight has a item_number and we have three indexes that have the item number in the lead position. Every calculation is causing the indexes to be updated and affectively creating a hot spot where the deadlocks are happening.
We are going to change the calculation to use insert-update instead. Tracing for the locks:acquired in our development environment help me get the answer.
Gail, your point on the foriegn key got me going in a new direction and help find the contention point. Thanks for the assist.
David