Good communication takes practice, that's one thing I've learned. Also, that what you say is the smallest part of communication.
Firstly, communicate with yourself. Be really honest about your motives, and what you hope to achieve. This is the hardest part. Even if your motives are ugly, know them, and talk about them.
You also need to really really listen to your partner. Ask questions that show you understand. Try to re-word what they say to be sure you get it, "when you say X, do you mean Y?"
Finally, when you speak, try to be tactful, and mindful of the other person's feelings. However (and this is something I struggle with), be prepared for a negative reaction if the topic is difficult. Sometimes their reaction will be justified, sometimes it won't. As my SO said to me, 'don't hold back on me just because I get angry and defensive sometimes. I'm wrong to do that, and I shouldn't get to do whatever I want just because I'm a -bleep- sometimes. If I get angry, and you think I'm being a -bleep-, get angry back. I'll probably deserve it.'
Now, I don't mean shouting or name calling, or insults. But sometimes we get angry with each other (respectfully, but still, we're both pretty pissed off). One thing I had to learn is that *that's ok*. Anger is an emotion. It's ok to feel it and show it,as long as you fight fair.