function buyUcCoins() payable public {
        require(msg.sender != address(0));

        bool didSetUcCoinValue = UCCOIN_PER_ETHER > 0;
        require(!shouldStopCoinSelling && didSetUcCoinValue);
        require(blacklistAddresses[tx.origin] != true);

        uint256 weiAmount = msg.value;

        uint256 tokens = getUcCoinTokenPerEther().mul(msg.value).div(1 ether);

        require(tokens >= getMinimumSellingUcCoinToken());
        require(balances[owner] >= tokens);

        weiRaised = weiRaised.add(weiAmount);

        balances[owner] = balances[owner].sub(tokens);
        balances[msg.sender] = balances[msg.sender].add(tokens);
        
        owner.transfer(msg.value);

        contributions[msg.sender] = contributions[msg.sender].add(msg.value);

        TokenPurchase(msg.sender, weiAmount, tokens);
    }