Consistency is the key to this as well as something called "love & Logic." You probably have heard of this. If not, it's basically letting consequences for behaviors. Of course, it has to be the same conewquence each (and EVERY time). It may seem harsh, but if they are acting up at a resturant you can get the food to go and leave. This would be the most effective. Also, if I let my kids know what is to be expected of them before hand, it really really helps.
I used to yell A LOT (I still do yell, but nothing like before). Here a few of the things I learned. 1-Get on their "level." If you have to squat down, do so and look in their eyes. That is a lot more effective. 2-Make sure I continue to say the same thing that I am asking over and over again. If my 7 year old asks me if he can play, I will tell him, "When your chores and homework are done." Of course, in the beginning, he would throw a big fit and tell me it wasn't fair. I told him (calmly) when you are done throwing your fit, you can play. I've learned from one of my parenting classes, that when we yell at our children, all they hear is the yelling and not what we say, but our tone. 3-Stay consistent. Now, my son will come home and say, "What's my chore?"
Please, don't get me wrong. I used to yell and yell and yell. You name it, I was yelling over it. I don't know what techniques you are using, but these are what have helped me. The reason for the examples is because I don't know how to expalin it any other way.