public boolean exchangeCashPurse(String serverID, String assetID, String nymID, String oldPurse, ArrayList selectedTokens) throws InterruptedException {

        Helpers.setObj(null);
        System.out.println(" Cash Purse exchange starts, selectedTokens:" + selectedTokens);
        String newPurse = processCashPurse(serverID, assetID, nymID, oldPurse, selectedTokens, nymID);

        if (!Utility.VerifyStringVal(newPurse)) {
            System.out.println("exchangeCashPurse: Before server OT_API_exchangePurse call, new Purse is empty.. returning false ");
            return false;
        }
        // ------------------------
        OTAPI_Func  theRequest   = new OTAPI_Func(OTAPI_Func.FT.EXCHANGE_CASH, serverID, nymID, assetID, newPurse);
        String      strResponse  = OTAPI_Func.SendTransaction(theRequest, "EXCHANGE_CASH"); // <========================
        
        if (!Utility.VerifyStringVal(strResponse))
        {
            System.out.println("IN exchangeCashPurse: OTAPI_Func.SendTransaction(() failed. (I give up.) ");
            // -------------------
            boolean importStatus = otapiJNI.OTAPI_Basic_Wallet_ImportPurse(serverID, assetID, nymID, newPurse);
            System.out.println("Since failure in exchangeCashPurse, OT_API_Wallet_ImportPurse called, status of import:" + importStatus);
            if (!importStatus) {
                Helpers.setObj(newPurse);
            }

            return false;
        }
        // ---------------------------------------        
        System.out.println("exchangeCashPurse ends, status: success.");
        
        return true;
     }