add register unregister function