You want to stop flopping?
1. Don't call a foul JUST because a guy falls down. Defenders give up enough uncontested layups, they'll stop flopping.
2. Start actually calling offensive fouls even when the defender doesn't land on his ass. It CAN still be a foul when the offensive player hits the defender but he doesn't go flying across court.
Of course, this all requires a certain level of competance among NBA referees than may be, well, unrealistic to expect...
Regarding Hack-A-Shaq, I can't believe they didn't go with very simple change... an intentional (non-flagrant) foul off the ball becomes a technical foul, one free throw and the ball out of bounds. Very simple solution. Still lets teams foul at the end of games when they'r down four or five with fifteen seconds left.
Almost totally off-topic, I had a thought last night...
When teams need to foul at the end of the game, why do they ALWAYS foul the guy with the ball? Why not employ "Hack-A-Shaq" on whoever the worst free throw shooter is? If the Celtics inbound to Ray Allen, why does everyone rush to foul him instead of putting Rajon Rondo in a bear hug? Are the rules different for the last few minutes, or is it just that refs won't call an off-the-ball foul at the end like they would in the second quarter?
I mean, you're usually only going to have pretty good FT shooters on the court at the end of the game, but someone's always going to be the shakiest. Why can't you just foul whoever's on the court?