added: framework.register() / unregister()