Why are the register/unregister functions needed?