change plugin infrastructure to support custom param names and optional params