Here's a little method I use to influence my children's behaviour for the better. Every child has both good and bad behaviors (behaviors we like and those we don't). Here's a particular case - the child is only good half the time.
Now, instead of punishing the bad behavior, I reward the good behavior. There is only time enough for a finite number of actions. If I increase the number of good behaviors, the number of bad behaviors will automatically decrease, because my child doesn't have time to get to those behaviors I don't like.