The use of `FuncN` on all of these overloads has made this all be non-type-safe and require casting. Any particular reason why that was done?