move bundles, use abstract base for generic registration