I took a look at this last night. This can also be implemented for full validation by just moving block.check() to the block validator (vs downloader). At that point the downloader is the same as for milestone, which is sufficient given that validation will perform the checks. That would materially reduce validation cost. As significantly more memory would be available for validation, and CPU and alloc/free costs for download would drop to near zero.