That's a pretty good sized proc. Could you provide the executive summary of what it's doing? I also noticed a couple of cursors. Do you have to step through one item at a time? Is there a set-oriented process that could be executed instead?
Locks are held for the length of the transaction. Maybe you could break the work into smaller units and commit after each unit. Maybe 100 items.
Maybe you could execute the proc during somekind of down- or slow time.
-Mike