Pre v0.10.0, though, there were a few places where `AcceptBlock` was called without going through `ProcessNewBlock` first. I checked out v0.9.5 and did a `git grep`, see the results here: http://pastebin.com/Qc9if0Mb. As to why it hasn't been taken out, it's probably just out of caution, or a "Don't fix it if it's not broken" mindset. Bitcoin Core coders are very cautious, and reasonably so since it's a piece of software that is the main interface to the network for many big players in the industry. In addition, on master right now, `CheckBlock` contains a check at the beginning to avoid doing the same work twice. (Added in [this commit](https://github.com/bitcoin/bitcoin/commit/3b33ec85ed00ba7e7525858e3701f9f55071c58b).) if (block.fChecked) return true;