use defmethod