Refactored multiply dispatch