public boolean SetupPasswordCallback(OTCaller passwordCaller, OTCallback passwordCallback) throws LoadingOpenTransactionsFailure {

        if (!isPasswordImageSet) {
            throw new LoadingOpenTransactionsFailure(LoadErrorType.PASSWORD_IMAGE_NOT_SET, "Must Set Password Image First!");
        }
        if (isPasswordCallbackSet) {
            throw new LoadingOpenTransactionsFailure(LoadErrorType.PASSWORD_CALLBACK_ALREADY_SET, "Already Have Set Password Callback!");
        }

        if (null == passwordCallback) {
            throw new IllegalArgumentException("passwordCallback is null");
        }

        try {
            passwordCaller.setCallback(passwordCallback);
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new LoadingOpenTransactionsFailure(LoadErrorType.PASSWORD_CALLBACK_FAILED_TO_SET, "Unable to Set Password Callback");
        }
        
        Boolean bSuccess = otapi.OT_API_Set_PasswordCallback(passwordCaller);
        if (!bSuccess)
        {
            passwordCaller = null;
            passwordCallback = null;
            throw new LoadingOpenTransactionsFailure(LoadErrorType.PASSWORD_CALLBACK_FAILED_TO_SET, "Unable to Set Password Callback");
        }
        
        isPasswordCallbackSet = true;
        return true;
    }