R., I have not had a chance to read the other responses to your request, but I can tell you what I did with my now 5yo when I had this problem with him. This is a little long, but I think you will find it helpful. I always felt that I disciplined him as much as needed, but when I really sat back I realized through the stress of it all I was not CONSISTENT. So here's what I did: I sat down with him (when he was not being bad) and told him that Mommy had been doing some thinking lately and I have set some new rules because Mommy wanted to help him grow up to be a really big boy. First and foremost there would be no more second chances. He was a big boy now and he knows what he is and is not allowed to do. Then I told him what I expected - to listen ALL of the time, no yelling, no pitching fits, no whining, no talking back, no misbehaving in public. Then I told him what the consequences would be EVERYTIME he did these things. I made a list for myself of a 1,2,3 step process for each behavior. Ex: Not Listening- 1) first time straight to time out for 4 minutes (face to the corner, no talking/crying) 2) second time (which would include not standing in time out like above)he did not get to play with his trains for the rest of the day (trains are my son's life- you need to find something of equal importance in your son's life.)and I would pick them all up and put them in the top of my closet 3) third time (to also include pitching a fit because of #2 action- and believe me he will.) we pack up ALL of his toys for the rest of the day. Every last one of them- I would even go as far as to clear his decoration sheets and blankets from his bed and give him plain ones. I even took the pictures off his walls.No TV, no books,no coloring, absolutely nothing. Trust me, he did not like that. When he would misbehave in public, I automatically went to #2 or #3 depending on the severity of it. That was unacceptable. Then the next morning, I would wake him up with a train in my hand and say "I know you are going to get to keep your toys today, aren't you? It was no fun without them, huh?" Show him you have faith in him, give him his toys back and tell him he gets to try again. And make sure when he gets in trouble, you always tell him what he did and why he is in trouble.
But I also had a reward system at the same time- Everyday he did not get a #1,2, or 3 he would earn a treat (I had a tin with a bunch of treats I knew he liked and he would get to pick one out.) Every week he did not get in trouble, he would get to go somewhere special of his choice that weekend for lunch (like the train station-which he loves). If a month without trouble, we would go to the toy store and let him pick out a toy. You can also do a sticker system- Everyday he is good he earns a sticker. After so many stickers he gets this, then after this many stickers he gets this, etc... I found the first idea to work better because he could get rewarded daily which helped him work harder. And ALWAYS remind him several times a day what he is working for "what treat do you want today? Where are we going for lunch this weekend? What toy are you going to pick out? Etc..." Make that reward always on his mind and talk about how he's going to get it. " I just know you are going to be so good today and get that treat. I can't wait to go have pizza this weekend."
The number one thing is that from this point on my middle name was "consistent." There were no fine lines between good and bad. No more saying "well, he wasn't that bad." It was this is bad and this is good. After about a week, I started seeing improvements (once he really realized I meant business.)It was still a long process with lots of crying, pitching fits, and testing me. But now in kindegarten he is getting awards for being a role model student and the teacher just thinks he is the best. A long ways from where he came from. So it was all worth it.
Write down the action and then the consequences to go with that action so that you make sure to always do it and do the same thing and STICK TO IT! It will be a BIG conversation for him to take it all in, but make sure you tell him your plans, then after he misbehaves say "remember what Mommy said?" Well, thanks for reading my book I seem to have written, but I hope this helps!