Hashcat is a newer program, but quite useful. They got versions for CPU only that are natively multi-threaded which makes it a lot easier to get going than cutting things up into pieces with JtR and then running multiple instances on each core.
If you got any remotely modern Nvidia or ATI video cards, then you want to use oclHashcat, which has support for a lot of formats and mangling rules, but doesn't work with multiple directories. oclHashcat-plus doesn't support too many rules/hash types, but it's extremely efficient if you want to throw large and/or large numbers of dictionaries at your hashes. Then the newest one is oclHashcat-lite, which is optimized for cracking only one hash at a time, but being very fast about it. I wish they just fused it into a one program with lots of options.
The problem is that all these programs have different support for rules, range of hash types they can crack, etc. The inputs have to very well trimmed (having a single extra whitespace at the end of a hash will make it refuse service due to 'incorrect hash'), unlike JtR which will find a hash in just about any garbage file. So it's kinda early code, it's kinda clunky to use, you gotta do a lot of regex filtering to get it what it wants (and it doesn't tell you what it wants!) but when it works, it's brilliant.