Make sure the new contract or bill cancels the previous contract as null and void. Also, memo the check "paid in full".
Technically, I think what you did was incorrect (canceling the check), but if the contractor agrees, then it is a great solution. It is his right within the contract to be given an opportunity to make it right. By canceling the check, you are actually in violation of the contract regardless of his shoddy work. Only saying this because you should make sure the previous contract is canceled. It sounds like it will end up win-win all around.
This is just my understanding of the law but I am not an attorney.
Edit: I didn't realize this was so long ago. I'm sure it's all cleared up by now