refactor donate