function buyTokens(address _contributor) public payable {
        require(whitelist[_contributor]);

        uint256 contributionAmount = msg.value;

        _preValidatePurchase(_contributor, contributionAmount, currentIcoRound);

        totalContributionAmount = totalContributionAmount.add(contributionAmount);

        uint tokenAmount = _handlePurchase(contributionAmount, currentIcoRound, _contributor);

        emit TokensPurchased(msg.sender, _contributor, contributionAmount, tokenAmount);

        _forwardFunds();
    }