register() is no longer abstract, and we now have a boot() method