move to multimethods