function internalVote(bytes32 _proposalId, address _voter, uint _vote, uint _rep) private returns(bool) {
        Proposal storage proposal = proposals[_proposalId];
        Parameters memory params = parameters[proposal.paramsHash];
        
        require(_vote <= proposal.numOfChoices);
        
        uint reputation = params.reputationSystem.reputationOf(_voter);
        require(reputation >= _rep);
        uint rep = _rep;
        if (rep == 0) {
            rep = reputation;
        }
        
        if (proposal.voters[_voter].reputation != 0) {
            cancelVoteInternal(_proposalId, _voter);
        }
        
        proposal.votes[_vote] = rep.add(proposal.votes[_vote]);
        proposal.totalVotes = rep.add(proposal.totalVotes);
        proposal.voters[_voter] = Voter({
            reputation: rep,
            vote: _vote
        });
        
        emit VoteProposal(_proposalId, proposal.avatar, _voter, _vote, reputation);
        emit AVVoteProposal(_proposalId, (_voter != msg.sender));
        
        return execute(_proposalId);
    }