function placeETHBid(uint8 _siteId) onlyRunning payable external validETHSiteId(_siteId) {
        
        if (msg.sender.isContract()) revert();
        if (msg.value < bidETHMin) revert();
        
        uint index = 0;
        totalBid += 1;
        BiddingInfo storage bid = bids[totalBid];
        bid.bidder = msg.sender;
        bid.bidId = totalBid;
        bid.amount = msg.value;
        bid.time = block.timestamp;
        bid.siteId = _siteId;
        
        uint32[] storage siteBids = sites[_siteId];
        if (siteBids.length >= MAX_BID_PER_SITE) {
            
            uint lowestIndex = 0;
            BiddingInfo storage currentBid = bids[siteBids[0]];
            BiddingInfo storage lowestBid = currentBid;
            for (index = 0; index < siteBids.length; index++) {
                currentBid = bids[siteBids[index]];
                
                if (currentBid.bidder == msg.sender) {
                    revert();
                }
                if (lowestBid.amount == 0 || currentBid.amount < lowestBid.amount || (currentBid.amount == lowestBid.amount && currentBid.bidId > lowestBid.bidId)) {
                    lowestIndex = index;
                    lowestBid = currentBid;
                }
            }
            
            
            if (msg.value < lowestBid.amount + bidETHIncrement)
                revert();
            
            
            siteBids[lowestIndex] = totalBid;
            
            
            lowestBid.bidder.transfer(lowestBid.amount);
        } else {
            for (index = 0; index < siteBids.length; index++) {
                if (bids[siteBids[index]].bidder == msg.sender)
                    revert();
            }
            siteBids.push(totalBid);
        }
        
        EventPlaceBid(msg.sender, _siteId, totalBid, msg.value);
    }