    public void process(Event event) throws PluggableTaskException {
        PluggableTaskBL<IExternalCreditCardStorage> ptbl = new PluggableTaskBL<IExternalCreditCardStorage>(getExternalSavingPluginId());
        IExternalCreditCardStorage externalCCStorage = ptbl.instantiateTask();
        if (event instanceof NewCreditCardEvent) {
            LOG.debug("Processing NewCreditCardEvent ...");
            NewCreditCardEvent ev = (NewCreditCardEvent) event;
            if (!ev.getCreditCard().getBaseUsers().isEmpty()) {
                String gateWayKey = externalCCStorage.storeCreditCard(null, ev.getCreditCard(), null);
                updateCreditCard(ev.getCreditCard(), gateWayKey);
            } else {
                LOG.debug("Credit card is not associated with a user (card for payment) - can't save through gateway.");
            }
        } else if (event instanceof NewContactEvent) {
            LOG.debug("Processing NewContactEvent ...");
            NewContactEvent ev = (NewContactEvent) event;
            ContactDTO contact = ev.getContactDto();
            int thisRecordContactType = contact.getContactMap().getContactType().getId();
            LOG.debug("Contact type: " + thisRecordContactType + ", plug-in expects: " + getContactType());
            if (getContactType() == thisRecordContactType) {
                UserBL userBl = new UserBL(contact.getUserId());
                CreditCardDTO creditCard = userBl.getCreditCard();
                if (creditCard != null) {
                    String gateWayKey = externalCCStorage.storeCreditCard(contact, creditCard, null);
                    updateCreditCard(creditCard, gateWayKey);
                } else {
                    LOG.warn("Cannot determine credit card for storage, invoking external store with contact only");
                    String gateWayKey = externalCCStorage.storeCreditCard(contact, null, null);
                    updateCreditCard(creditCard, gateWayKey);
                }
            }
        } else {
            throw new PluggableTaskException("Cant not process event " + event);
        }
    }

    public void process(Event event) throws PluggableTaskException {
        PluggableTaskBL<IExternalCreditCardStorage> ptbl = new PluggableTaskBL<IExternalCreditCardStorage>(getExternalSavingPluginId());
        IExternalCreditCardStorage externalCCStorage = ptbl.instantiateTask();
        if (event instanceof NewCreditCardEvent) {
            LOG.debug("Processing NewCreditCardEvent ...");
            NewCreditCardEvent ev = (NewCreditCardEvent) event;
            if (!ev.getCreditCard().getBaseUsers().isEmpty()) {
                String gateWayKey = externalCCStorage.storeCreditCard(null, ev.getCreditCard(), null);
                updateCreditCard(ev.getCreditCard(), gateWayKey);
            } else {
                LOG.debug("Credit card is not associated with a user (card for payment) - can't save through gateway.");
            }
        } else if (event instanceof NewContactEvent) {
            LOG.debug("Processing NewContactEvent ...");
            NewContactEvent ev = (NewContactEvent) event;
            ContactDTO contact = ev.getContactDto();
            int thisRecordContactType = contact.getContactMap().getContactType().getId();
            LOG.debug("Contact type: " + thisRecordContactType + ", plug-in expects: " + getContactType());
            if (getContactType() == thisRecordContactType) {
                UserBL userBl = new UserBL(contact.getUserId());
                CreditCardDTO creditCard = userBl.getCreditCard();
                if (creditCard != null) {
                    String gateWayKey = externalCCStorage.storeCreditCard(contact, creditCard, null);
                    updateCreditCard(creditCard, gateWayKey);
                } else {
                    LOG.warn("Cannot determine credit card for storage, invoking external store with contact only");
                }
            }
        } else {
            throw new PluggableTaskException("Cant not process event " + event);
        }
    }
