function() public payable {
        require(!_isContract(msg.sender));
        require(!auctionExpired());

        uint256 requiredBid = nextBid();

        require(msg.value >= requiredBid);

        uint256 change = msg.value.sub(requiredBid);

        uint256 difference = requiredBid.sub(highestBid);
        uint256 reward = difference / 4;

        if (highestBidder != 0x0) {
            highestBidder.transfer(highestBid.add(reward));
        }

        if (address(sibling) != 0x0) {
            address siblingHighestBidder = sibling.highestBidder();
            if (siblingHighestBidder != 0x0) {
                siblingHighestBidder.transfer(reward / 2);
            }
        }

        if (potatoOwner != 0x0) {
            potatoOwner.transfer(reward / 10);
        }

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

        highestBidder = msg.sender;
        highestBid = requiredBid;

        emit Bid(msg.sender, requiredBid);
    }