refactor contribution model