function processContribution() private validGasPrice duringSale {
    uint256 leftToCollect = safeSub(etherHardCap, etherCollected);
    uint256 contribution = msg.value > leftToCollect ? leftToCollect : msg.value;
    uint256 change = safeSub(msg.value, contribution);

    if (contribution > 0) {
      uint256 kicks = calcKicks(contribution);

      
      kickcityWallet.transfer(contribution);

      
      token.issue(msg.sender, kicks);
      etherCollected = safeAdd(etherCollected, contribution);
      Contribution(msg.sender, contribution, kicks);
    }

    
    if (change > 0) {
      msg.sender.transfer(change);
    }
  }