I guess there's nothing wrong with that. The only reason the VM structs need the class pointers is to dispatch on type of leaf object. The fact that these are referenced somewhere else from a global context (i.e. leaf objets can be created outside of the VMs) doesn't matter. This will probably make a lot of code simpler. Especially writing extensions.