Using multimethods instead of protcols, and records.