I see another potential issue. The classloader passed to the build method, doesn't need to be the same as the classloader used by the constructor. 

I think the constructors should be transformed to very dumb structure and all the stuff should go through the build method; where the correct classloader can be used.