`create` is misleading, I would expect a valid object to be returned which, looking at the implementation, isn't quite the case. Could we use `apply` instead?