contract MatreXaToken is BurnableToken, MintableToken, HasNoContracts, HasNoTokens { //MintableToken is StandardToken, Ownable
    using SafeMath for uint256;

    string public name = "MatreXa";
    string public symbol = "MTRX";
    uint256 public decimals = 18;

    address public founder;
    uint256 public allowTransferTimestamp = 0;

    /**
    * We dissable token transfer during ICO and some time after ICO.
    * But we allow founder to transfer his tokens to pay bounties, etc.
    */
    modifier canTransfer() {
        if(msg.sender != founder) {
            require(mintingFinished);
            require(now > allowTransferTimestamp);
        }
        _;
    }
    /**
    * @dev set Founder address
    * Only owner allowed to do this
    */
    function setFounder(address _founder) onlyOwner {
        founder = _founder;
    }    
    
    /**
    * @dev set the timestamp when trasfers will be allowed
    * Only owner allowed to do this
    * This is allowed only once to prevent owner to pause transfers at will
    */
    function setAllowTransferTimestamp(uint256 _allowTransferTimestamp) onlyOwner {
        require(allowTransferTimestamp == 0);
        allowTransferTimestamp = _allowTransferTimestamp;
    }
    
    function transfer(address _to, uint256 _value) canTransfer returns (bool) {
        BurnableToken.transfer(_to, _value);
    }

    function transferFrom(address _from, address _to, uint256 _value) canTransfer returns (bool) {
        BurnableToken.transferFrom(_from, _to, _value);
    }

}
/**
 * @title MatreXa Token
 */
function setAllowTransferTimestamp(uint256 _allowTransferTimestamp) onlyOwner {
    require(allowTransferTimestamp == 0);
    allowTransferTimestamp = _allowTransferTimestamp;
}

/**
 * @dev set the timestamp when trasfers will be allowed
 * Only owner allowed to do this
 * This is allowed only once to prevent owner to pause transfers at will
 */