function createToken(
        string symbol_,
        string name_,
        uint256 defaultExchangeRate_
    )
        public
    returns(address) {
        require(msg.sender == XPAAssets);
        bool tokenRepeat = false;
        address newAsset;
        for(uint256 i = 0; i < assetTokens.length; i++) {
            if(XPAAssetToken(assetTokens[i]).getSymbol() == keccak256(symbol_)){
                tokenRepeat = true;
                newAsset = assetTokens[i];
                break;
            }
        }
        if(!tokenRepeat){
            newAsset = new XPAAssetToken(symbol_, name_, defaultExchangeRate_);
            XPAAssetToken(newAsset).assignOperator(XPAAssets);
            XPAAssetToken(newAsset).assignOperator(ETHAssets);
            for(uint256 j = 0; j < fundAccounts.length; j++) {
                XPAAssetToken(newAsset).assignBurner(fundAccounts[j]);
            }
            assetTokens.push(newAsset);
        }
        return newAsset;
    }