For HDD data recovery I can recommend Spinrite.
http://grc.com/sr/spinrite.htm (~$90 USD)
It's a tiny program (written in assembler!), only 170KB, but very powerful. I have used it recover two drives so far.
I have also had excellent results recovering accidentally deleted files on a friends machine with uneraser,
http://www.uneraser.com/ ($50 USD)