Add variable shielding support

It is now possible for systems to define their own shield handling.