used Method::Signatures to remove boilerplate param validation code