Use multimethods for parameter restructuring

First version

Refactoring incoming