correct register* functions to always return a constructor function