Use autoclosure instead of custom protocol to work around generics and add a bunch more functionality