reflect derived types, then instantiate. No registration, just derive :)
for the new era. we'll have to actually design this, this time