function
    require(!_isContract(msg.sender));
    require(!pendingNewRound);
    require(!pendingOraclize);
    if (block.timestamp < roundEnd) {
      Round storage currentRound = rounds[currentRoundNumber];
      require(msg.value == currentRound.entryPrice);
      require(!determiningWinner);
      address participant = msg.sender;
      uint256 threePercent = uint256(SafeMath.div(SafeMath.mul(entryPrice, 3), 100));
      Ethsqr storage sqr = squares[_identifier];
      uint256 trait = sqr.trait;
      
      if(squares[0].owner != address(this)){
        asyncSend(squares[0].owner, threePercent);
      }
      
      if(squares[_identifier].owner != address(this)){
        asyncSend(squares[_identifier].owner, threePercent);
      }
      
      currentRound.sqrEntries[_identifier].push(Entry({ participant: participant }));
      currentRound.entryCount = currentRound.entryCount.add(1);
      Join(_identifier, participant, currentRoundNumber, block.timestamp);
      
      if (trait == 1 && _timeRemaining() < (initialDuration - 1 minutes)) {
        roundEnd = roundEnd.add(1 minutes);
        TimeChanged(roundEnd, participant, block.timestamp);
      }
      
      if (trait == 2 && _timeRemaining() > 1 minutes) {
        roundEnd = roundEnd.sub(1 minutes);
        TimeChanged(roundEnd, participant, block.timestamp);
      }
    }