function () payable public {
        require(!finalised);

        
        require(block.timestamp >= startTime);
        require(block.timestamp <= endTime);

        
        require(ethRaised < hardCap);

        
        require(msg.value >= minimumDonation);

        uint256 etherValue = msg.value;

        
        if (ethRaised + etherValue > hardCap){
            etherValue = hardCap - ethRaised;
            
            assert(msg.value > etherValue);
            msg.sender.transfer(msg.value - etherValue);
        }

        
        ethFundAddress.transfer(etherValue);

        donationCount += 1;
        ethRaised += etherValue;
    }