90% of all behavioral problems are solved indirectly. You don't correct a dog's behavior, you teach them what is a more desirable behavior!
In this case, I think just good old fashioned obedience solves the whole problem (as it does in the vast majority of situations!). Teach your dog what "to do" not what "not to do"! It's a subtle difference, but one that will help immensely!
The idea is that when your dog has been taught and knows what you're asking, then it's fair to correct them for non-compliance. Any other time, not so much! Dog's don't really get why or what you mean if you're telling them NO all the time! Give a command they know though, and you'll see dramatic improvement... Bear in mind though, that it doesn't happen overnight, it does take patience and repitition for them to really "get" it.
It's not the size of the dog in the fight, it's the size of the fight in the dog. Mark Twain