killbill-aplcache

Api changes for Payment

6/19/2014 6:06:01 PM

Changes

jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/RefundResource.java 206(+0 -206)

Details

diff --git a/.idea/modules.xml b/.idea/modules.xml
index c733a45..6c6229d 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -15,8 +15,11 @@
       <module fileurl="file://$PROJECT_DIR$/overdue/killbill-overdue.iml" filepath="$PROJECT_DIR$/overdue/killbill-overdue.iml" />
       <module fileurl="file://$PROJECT_DIR$/payment/killbill-payment.iml" filepath="$PROJECT_DIR$/payment/killbill-payment.iml" />
       <module fileurl="file://$PROJECT_DIR$/profiles/killbill-profiles.iml" filepath="$PROJECT_DIR$/profiles/killbill-profiles.iml" />
+      <module fileurl="file://$PROJECT_DIR$/profiles/killbill-profiles.iml" filepath="$PROJECT_DIR$/profiles/killbill-profiles.iml" />
+      <module fileurl="file://$PROJECT_DIR$/profiles/killbill/killbill-profiles-killbill.iml" filepath="$PROJECT_DIR$/profiles/killbill/killbill-profiles-killbill.iml" />
       <module fileurl="file://$PROJECT_DIR$/profiles/killbill/killbill-profiles-killbill.iml" filepath="$PROJECT_DIR$/profiles/killbill/killbill-profiles-killbill.iml" />
       <module fileurl="file://$PROJECT_DIR$/profiles/killpay/killbill-profiles-killpay.iml" filepath="$PROJECT_DIR$/profiles/killpay/killbill-profiles-killpay.iml" />
+      <module fileurl="file://$PROJECT_DIR$/profiles/killpay/killbill-profiles-killpay.iml" filepath="$PROJECT_DIR$/profiles/killpay/killbill-profiles-killpay.iml" />
       <module fileurl="file://$PROJECT_DIR$/subscription/killbill-subscription.iml" filepath="$PROJECT_DIR$/subscription/killbill-subscription.iml" />
       <module fileurl="file://$PROJECT_DIR$/tenant/killbill-tenant.iml" filepath="$PROJECT_DIR$/tenant/killbill-tenant.iml" />
       <module fileurl="file://$PROJECT_DIR$/usage/killbill-usage.iml" filepath="$PROJECT_DIR$/usage/killbill-usage.iml" />
diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/overdue/TestOverdueBase.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/overdue/TestOverdueBase.java
index d4df753..e473ec6 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/overdue/TestOverdueBase.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/overdue/TestOverdueBase.java
@@ -63,7 +63,7 @@ public abstract class TestOverdueBase extends TestIntegrationBase {
         account = createAccountWithNonOsgiPaymentMethod(getAccountData(0));
         assertNotNull(account);
 
-        paymentApi.addPaymentMethod(BeatrixIntegrationModule.NON_OSGI_PLUGIN_NAME, account, true, paymentMethodPlugin, PLUGIN_PROPERTIES, callContext);
+        paymentApi.addPaymentMethod(account, BeatrixIntegrationModule.NON_OSGI_PLUGIN_NAME, true, paymentMethodPlugin, PLUGIN_PROPERTIES, callContext);
         productName = "Shotgun";
         term = BillingPeriod.MONTHLY;
         paymentPlugin.clear();
diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/overdue/TestOverdueIntegration.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/overdue/TestOverdueIntegration.java
index 5217e26..00cc687 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/overdue/TestOverdueIntegration.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/overdue/TestOverdueIntegration.java
@@ -636,7 +636,7 @@ public class TestOverdueIntegration extends TestOverdueBase {
         checkChangePlanWithOverdueState(baseEntitlement, true, true);
 
         // Add a payment method and set it as default
-        paymentApi.addPaymentMethod(BeatrixIntegrationModule.NON_OSGI_PLUGIN_NAME, account, true, paymentMethodPlugin, PLUGIN_PROPERTIES, callContext);
+        paymentApi.addPaymentMethod(account, BeatrixIntegrationModule.NON_OSGI_PLUGIN_NAME, true, paymentMethodPlugin, PLUGIN_PROPERTIES, callContext);
 
         allowPaymentsAndResetOverdueToClearByPayingAllUnpaidInvoices(false);
 
diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegrationBase.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegrationBase.java
index 6f3e42e..3dfa194 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegrationBase.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegrationBase.java
@@ -72,8 +72,7 @@ import org.killbill.billing.osgi.config.OSGIConfig;
 import org.killbill.billing.overdue.OverdueUserApi;
 import org.killbill.billing.overdue.wrapper.OverdueWrapperFactory;
 import org.killbill.billing.payment.api.DirectPayment;
-import org.killbill.billing.payment.api.PaymentApi;
-import org.killbill.billing.payment.api.PaymentApiException;
+import org.killbill.billing.payment.api.DirectPaymentApi;
 import org.killbill.billing.payment.api.PaymentMethodPlugin;
 import org.killbill.billing.payment.api.PluginProperty;
 import org.killbill.billing.payment.api.TestPaymentMethodPluginBase;
@@ -154,7 +153,7 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB {
     protected BlockingInternalApi blockingApi;
 
     @Inject
-    protected PaymentApi paymentApi;
+    protected DirectPaymentApi paymentApi;
 
     @Inject
     protected EntitlementApi entitlementApi;
@@ -307,7 +306,7 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB {
 
         final PaymentMethodPlugin info = createPaymentMethodPlugin();
 
-        paymentApi.addPaymentMethod(paymentPluginName, account, true, info, PLUGIN_PROPERTIES, callContext);
+        paymentApi.addPaymentMethod(account, paymentPluginName, true, info, PLUGIN_PROPERTIES, callContext);
         return accountUserApi.getAccountById(account.getId(), callContext);
     }
 
@@ -381,11 +380,13 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB {
         doCallAndCheckForCompletion(new Function<Void, Void>() {
             @Override
             public Void apply(@Nullable final Void input) {
+                /*
                 try {
-                    paymentApi.createPayment(account, invoice.getId(), invoice.getBalance(), PLUGIN_PROPERTIES, callContext);
+                    STEPH paymentApi.createPayment(account, invoice.getId(), invoice.getBalance(), PLUGIN_PROPERTIES, callContext);
                 } catch (final PaymentApiException e) {
                     fail(e.toString());
                 }
+                */
                 return null;
             }
         }, events);
@@ -395,11 +396,14 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB {
         doCallAndCheckForCompletion(new Function<Void, Void>() {
             @Override
             public Void apply(@Nullable final Void input) {
+                /*
+                STEPH
                 try {
                     paymentApi.createExternalPayment(account, invoice.getId(), invoice.getBalance(), callContext);
                 } catch (final PaymentApiException e) {
                     fail(e.toString());
                 }
+                */
                 return null;
             }
         }, events);
@@ -409,11 +413,14 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB {
         doCallAndCheckForCompletion(new Function<Void, Void>() {
             @Override
             public Void apply(@Nullable final Void input) {
+                /*
+                STEPH
                 try {
-                    paymentApi.createRefund(account, payment.getId(), payment.getCapturedAmount() /* TODO [PAYMENT] payment.getPaidAmount() */, PLUGIN_PROPERTIES, callContext);
+                    paymentApi.createRefund(account, payment.getId(), payment.getCapturedAmount()  TODO [PAYMENT] payment.getPaidAmount() , PLUGIN_PROPERTIES, callContext);
                 } catch (final PaymentApiException e) {
                     fail(e.toString());
                 }
+            */
                 return null;
             }
         }, events);
@@ -423,11 +430,14 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB {
         doCallAndCheckForCompletion(new Function<Void, Void>() {
             @Override
             public Void apply(@Nullable final Void input) {
+                /*
+                STEPH
                 try {
-                    paymentApi.createRefundWithAdjustment(account, payment.getId(), payment.getCapturedAmount() /* TODO [PAYMENT] payment.getPaidAmount() */, PLUGIN_PROPERTIES, callContext);
+                    paymentApi.createRefundWithAdjustment(account, payment.getId(), payment.getCapturedAmount()  TODO [PAYMENT] payment.getPaidAmount() , PLUGIN_PROPERTIES, callContext);
                 } catch (final PaymentApiException e) {
                     fail(e.toString());
                 }
+            */
                 return null;
             }
         }, events);
@@ -437,11 +447,14 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB {
         doCallAndCheckForCompletion(new Function<Void, Void>() {
             @Override
             public Void apply(@Nullable final Void input) {
+                /*
+                STEPH
                 try {
                     paymentApi.createRefundWithItemsAdjustments(account, payment.getId(), invoiceItems, PLUGIN_PROPERTIES, callContext);
                 } catch (final PaymentApiException e) {
                     fail(e.toString());
                 }
+                */
                 return null;
             }
         }, events);
diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegrationInvoiceWithRepairLogic.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegrationInvoiceWithRepairLogic.java
index 003ca9c..682a288 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegrationInvoiceWithRepairLogic.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegrationInvoiceWithRepairLogic.java
@@ -41,6 +41,7 @@ import org.killbill.billing.invoice.api.Invoice;
 import org.killbill.billing.invoice.api.InvoiceItemType;
 import org.killbill.billing.payment.api.DirectPayment;
 import org.killbill.billing.payment.api.PaymentStatus;
+import org.killbill.billing.payment.api.PluginProperty;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.Test;
 
@@ -539,14 +540,14 @@ public class TestIntegrationInvoiceWithRepairLogic extends TestIntegrationBase {
         // ITEM ADJUSTMENT PRIOR TO DOING THE REPAIR
         //
         final Invoice invoice1 = invoices.get(1);
-        final List<DirectPayment> payments = paymentApi.getAccountPayments(account.getId(), callContext);
+        final List<DirectPayment> payments = paymentApi.getAccountPayments(account.getId(), false, ImmutableList.<PluginProperty>of(), callContext);
         final ExpectedPaymentCheck expectedPaymentCheck = new ExpectedPaymentCheck(clock.getUTCNow().toLocalDate(), new BigDecimal("2399.95"), PaymentStatus.SUCCESS, invoice1.getId(), Currency.USD);
         final DirectPayment payment1 = payments.get(0);
 
         final Map<UUID, BigDecimal> iias = new HashMap<UUID, BigDecimal>();
         iias.put(invoice1.getInvoiceItems().get(0).getId(), new BigDecimal("197.26"));
         busHandler.pushExpectedEvents(NextEvent.INVOICE_ADJUSTMENT);
-        paymentApi.createRefundWithItemsAdjustments(account, payment1.getId(), iias, PLUGIN_PROPERTIES, callContext);
+        // STEPH paymentApi.createRefundWithItemsAdjustments(account, payment1.getId(), iias, PLUGIN_PROPERTIES, callContext);
         assertListenerStatus();
 
         checkNoMoreInvoiceToGenerate(account);
@@ -610,14 +611,14 @@ public class TestIntegrationInvoiceWithRepairLogic extends TestIntegrationBase {
         // ITEM ADJUSTMENT PRIOR TO DOING THE REPAIR
         //
         final Invoice invoice1 = invoices.get(1);
-        final List<DirectPayment> payments = paymentApi.getAccountPayments(account.getId(), callContext);
+        final List<DirectPayment> payments = paymentApi.getAccountPayments(account.getId(), false, ImmutableList.<PluginProperty>of(), callContext);
         final ExpectedPaymentCheck expectedPaymentCheck = new ExpectedPaymentCheck(clock.getUTCNow().toLocalDate(), new BigDecimal("2399.95"), PaymentStatus.SUCCESS, invoice1.getId(), Currency.USD);
         final DirectPayment payment1 = payments.get(0);
 
         final Map<UUID, BigDecimal> iias = new HashMap<UUID, BigDecimal>();
         iias.put(invoice1.getInvoiceItems().get(0).getId(), new BigDecimal("100.00"));
         busHandler.pushExpectedEvents(NextEvent.INVOICE_ADJUSTMENT);
-        paymentApi.createRefundWithItemsAdjustments(account, payment1.getId(), iias, PLUGIN_PROPERTIES, callContext);
+        // STEPH paymentApi.createRefundWithItemsAdjustments(account, payment1.getId(), iias, PLUGIN_PROPERTIES, callContext);
         assertListenerStatus();
 
         checkNoMoreInvoiceToGenerate(account);
diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestPayment.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestPayment.java
index 01aee48..39ab3a9 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestPayment.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestPayment.java
@@ -54,7 +54,7 @@ public class TestPayment extends TestIntegrationBase {
         assertListenerStatus();
 
         busHandler.pushExpectedEvents(NextEvent.PAYMENT);
-        final DirectPayment payment1 = paymentApi.createPayment(account, item1.getInvoiceId(), new BigDecimal("4.00"), PLUGIN_PROPERTIES, callContext);
+        final DirectPayment payment1 = null; // STEPH paymentApi.createPurchase(account, item1.getInvoiceId(), new BigDecimal("4.00"), PLUGIN_PROPERTIES, callContext);
         assertListenerStatus();
 
         Invoice invoice1 = invoiceUserApi.getInvoice(item1.getInvoiceId(), callContext);
@@ -66,7 +66,7 @@ public class TestPayment extends TestIntegrationBase {
         assertTrue(accountBalance.compareTo(new BigDecimal("6.00")) == 0);
 
         busHandler.pushExpectedEvents(NextEvent.PAYMENT);
-        final DirectPayment payment2 = paymentApi.createPayment(account, item1.getInvoiceId(), new BigDecimal("6.00"), PLUGIN_PROPERTIES, callContext);
+        final DirectPayment payment2 = null; // STEPH paymentApi.createPayment(account, item1.getInvoiceId(), new BigDecimal("6.00"), PLUGIN_PROPERTIES, callContext);
         assertListenerStatus();
 
         invoice1 = invoiceUserApi.getInvoice(item1.getInvoiceId(), callContext);
@@ -91,7 +91,7 @@ public class TestPayment extends TestIntegrationBase {
 
 */
         // And then issue refund with item adjustment on first invoice/item
-        paymentApi.createRefund(account, payment2.getId(), new BigDecimal("5.00"), PLUGIN_PROPERTIES, callContext);
+        // STEPH paymentApi.createRefund(account, payment2.getId(), new BigDecimal("5.00"), PLUGIN_PROPERTIES, callContext);
 
         invoice1 = invoiceUserApi.getInvoice(item1.getInvoiceId(), callContext);
         assertTrue(invoice1.getBalance().compareTo(new BigDecimal("5.00")) == 0);
diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/util/PaymentChecker.java b/beatrix/src/test/java/org/killbill/billing/beatrix/util/PaymentChecker.java
index a1eb39e..3bcd448 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/util/PaymentChecker.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/util/PaymentChecker.java
@@ -25,10 +25,11 @@ import java.util.UUID;
 import org.joda.time.LocalDate;
 import org.killbill.billing.catalog.api.Currency;
 import org.killbill.billing.payment.api.DirectPayment;
+import org.killbill.billing.payment.api.DirectPaymentApi;
 import org.killbill.billing.payment.api.DirectPaymentTransaction;
-import org.killbill.billing.payment.api.PaymentApi;
 import org.killbill.billing.payment.api.PaymentApiException;
 import org.killbill.billing.payment.api.PaymentStatus;
+import org.killbill.billing.payment.api.PluginProperty;
 import org.killbill.billing.payment.api.TransactionType;
 import org.killbill.billing.util.callcontext.CallContext;
 import org.slf4j.Logger;
@@ -36,6 +37,7 @@ import org.slf4j.LoggerFactory;
 import org.testng.Assert;
 
 import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.inject.Inject;
 
@@ -43,17 +45,17 @@ public class PaymentChecker {
 
     private static final Logger log = LoggerFactory.getLogger(PaymentChecker.class);
 
-    private final PaymentApi paymentApi;
+    private final DirectPaymentApi paymentApi;
     private final AuditChecker auditChecker;
 
     @Inject
-    public PaymentChecker(final PaymentApi paymentApi, final AuditChecker auditChecker) {
+    public PaymentChecker(final DirectPaymentApi paymentApi, final AuditChecker auditChecker) {
         this.paymentApi = paymentApi;
         this.auditChecker = auditChecker;
     }
 
     public DirectPayment checkPayment(final UUID accountId, final int paymentOrderingNumber, final CallContext context, ExpectedPaymentCheck expected) throws PaymentApiException {
-        final List<DirectPayment> payments = paymentApi.getAccountPayments(accountId, context);
+        final List<DirectPayment> payments = paymentApi.getAccountPayments(accountId, false, ImmutableList.<PluginProperty>of(), context);
         Assert.assertEquals(payments.size(), paymentOrderingNumber);
         final DirectPayment payment = payments.get(paymentOrderingNumber - 1);
         final DirectPaymentTransaction transaction = getPurchaseTransaction(payment);
diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/util/RefundChecker.java b/beatrix/src/test/java/org/killbill/billing/beatrix/util/RefundChecker.java
index 479ca93..a5b56c7 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/util/RefundChecker.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/util/RefundChecker.java
@@ -32,8 +32,8 @@ import org.killbill.billing.invoice.api.InvoicePaymentApi;
 import org.killbill.billing.invoice.api.InvoicePaymentType;
 import org.killbill.billing.invoice.api.InvoiceUserApi;
 import org.killbill.billing.payment.api.DirectPayment;
+import org.killbill.billing.payment.api.DirectPaymentApi;
 import org.killbill.billing.payment.api.DirectPaymentTransaction;
-import org.killbill.billing.payment.api.PaymentApi;
 import org.killbill.billing.payment.api.PaymentApiException;
 import org.killbill.billing.payment.api.TransactionType;
 import org.killbill.billing.util.callcontext.CallContext;
@@ -50,13 +50,13 @@ public class RefundChecker {
 
     private static final Logger log = LoggerFactory.getLogger(RefundChecker.class);
 
-    private final PaymentApi paymentApi;
+    private final DirectPaymentApi paymentApi;
     private final InvoicePaymentApi invoicePaymentApi;
     private final AuditChecker auditChecker;
     private final InvoiceUserApi invoiceUserApi;
 
     @Inject
-    public RefundChecker(final PaymentApi paymentApi, final InvoicePaymentApi invoicePaymentApi, final InvoiceUserApi invoiceApi, final AuditChecker auditChecker) {
+    public RefundChecker(final DirectPaymentApi paymentApi, final InvoicePaymentApi invoicePaymentApi, final InvoiceUserApi invoiceApi, final AuditChecker auditChecker) {
         this.paymentApi = paymentApi;
         this.invoicePaymentApi = invoicePaymentApi;
         this.auditChecker = auditChecker;
@@ -65,7 +65,9 @@ public class RefundChecker {
 
     public DirectPayment checkRefund(final UUID paymentId, final CallContext context, ExpectedRefundCheck expected) throws PaymentApiException {
 
-        final List<DirectPayment> refunds = paymentApi.getPaymentRefunds(paymentId, context);
+
+        final DirectPayment payment = null; // STEPH paymentApi.getPaymentRefunds(paymentId, context);
+        final List<DirectPayment> refunds = null; // STEPH paymentApi.getPaymentRefunds(paymentId, context);
         Assert.assertEquals(refunds.size(), 1);
 
         final InvoicePayment refundInvoicePayment = getInvoicePaymentEntry(paymentId, InvoicePaymentType.REFUND, context);
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/AccountTimelineJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/AccountTimelineJson.java
index 2cf5f78..f55e605 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/AccountTimelineJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/AccountTimelineJson.java
@@ -125,7 +125,7 @@ public class AccountTimelineJson {
             for (final DirectPayment refund : refundsByPayment.get(payment.getId())) {
                 final List<AuditLog> auditLogs = accountAuditLogs.getAuditLogsForRefund(refund.getId());
                 // TODO add adjusted invoice items?
-                refunds.add(new RefundJson(refund, null, auditLogs));
+                // STEPH refunds.add(new RefundJson(refund, null, auditLogs));
             }
 
             final List<ChargebackJson> chargebacks = new ArrayList<ChargebackJson>();
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentMethodJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentMethodJson.java
index 9acf598..e2f057c 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentMethodJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentMethodJson.java
@@ -76,18 +76,6 @@ public class PaymentMethodJson extends JsonBase {
             }
             pluginDetailJson = new PaymentMethodPluginDetailJson(pluginDetail.getExternalPaymentMethodId(),
                                                                  pluginDetail.isDefaultPaymentMethod(),
-                                                                 pluginDetail.getType(),
-                                                                 pluginDetail.getCCName(),
-                                                                 pluginDetail.getCCType(),
-                                                                 pluginDetail.getCCExpirationMonth(),
-                                                                 pluginDetail.getCCExpirationYear(),
-                                                                 pluginDetail.getCCLast4(),
-                                                                 pluginDetail.getAddress1(),
-                                                                 pluginDetail.getAddress2(),
-                                                                 pluginDetail.getCity(),
-                                                                 pluginDetail.getState(),
-                                                                 pluginDetail.getZip(),
-                                                                 pluginDetail.getCountry(),
                                                                  properties);
         }
         return new PaymentMethodJson(in.getId().toString(), account.getId().toString(), isDefault, in.getPluginName(),
@@ -139,79 +127,6 @@ public class PaymentMethodJson extends JsonBase {
                         // N/A
                         return false;
                     }
-
-                    @Override
-                    public String getType() {
-                        // N/A
-                        return null;
-                    }
-
-                    @Override
-                    public String getCCName() {
-                        // N/A
-                        return null;
-                    }
-
-                    @Override
-                    public String getCCType() {
-                        // N/A
-                        return null;
-                    }
-
-                    @Override
-                    public String getCCExpirationMonth() {
-                        // N/A
-                        return null;
-                    }
-
-                    @Override
-                    public String getCCExpirationYear() {
-                        // N/A
-                        return null;
-                    }
-
-                    @Override
-                    public String getCCLast4() {
-                        // N/A
-                        return null;
-                    }
-
-                    @Override
-                    public String getAddress1() {
-                        // N/A
-                        return null;
-                    }
-
-                    @Override
-                    public String getAddress2() {
-                        // N/A
-                        return null;
-                    }
-
-                    @Override
-                    public String getCity() {
-                        // N/A
-                        return null;
-                    }
-
-                    @Override
-                    public String getState() {
-                        // N/A
-                        return null;
-                    }
-
-                    @Override
-                    public String getZip() {
-                        // N/A
-                        return null;
-                    }
-
-                    @Override
-                    public String getCountry() {
-                        // N/A
-                        return null;
-                    }
-
                     @Override
                     public String getExternalPaymentMethodId() {
                         return pluginInfo.getExternalPaymentId();
@@ -310,50 +225,14 @@ public class PaymentMethodJson extends JsonBase {
 
         private final String externalPaymentId;
         private final Boolean isDefaultPaymentMethod;
-        private final String type;
-        private final String ccName;
-        private final String ccType;
-        private final String ccExpirationMonth;
-        private final String ccExpirationYear;
-        private final String ccLast4;
-        private final String address1;
-        private final String address2;
-        private final String city;
-        private final String state;
-        private final String zip;
-        private final String country;
         private final List<PluginPropertyJson> properties;
 
         @JsonCreator
         public PaymentMethodPluginDetailJson(@JsonProperty("externalPaymentId") final String externalPaymentId,
                                              @JsonProperty("isDefaultPaymentMethod") final Boolean isDefaultPaymentMethod,
-                                             @JsonProperty("type") final String type,
-                                             @JsonProperty("ccName") final String ccName,
-                                             @JsonProperty("ccType") final String ccType,
-                                             @JsonProperty("ccExpirationMonth") final String ccExpirationMonth,
-                                             @JsonProperty("ccExpirationYear") final String ccExpirationYear,
-                                             @JsonProperty("ccLast4") final String ccLast4,
-                                             @JsonProperty("address1") final String address1,
-                                             @JsonProperty("address2") final String address2,
-                                             @JsonProperty("city") final String city,
-                                             @JsonProperty("state") final String state,
-                                             @JsonProperty("zip") final String zip,
-                                             @JsonProperty("country") final String country,
                                              @JsonProperty("properties") final List<PluginPropertyJson> properties) {
             this.externalPaymentId = externalPaymentId;
             this.isDefaultPaymentMethod = isDefaultPaymentMethod;
-            this.type = type;
-            this.ccName = ccName;
-            this.ccType = ccType;
-            this.ccExpirationMonth = ccExpirationMonth;
-            this.ccExpirationYear = ccExpirationYear;
-            this.ccLast4 = ccLast4;
-            this.address1 = address1;
-            this.address2 = address2;
-            this.city = city;
-            this.state = state;
-            this.zip = zip;
-            this.country = country;
             this.properties = properties;
         }
 
@@ -365,54 +244,6 @@ public class PaymentMethodJson extends JsonBase {
             return isDefaultPaymentMethod;
         }
 
-        public String getType() {
-            return type;
-        }
-
-        public String getCcName() {
-            return ccName;
-        }
-
-        public String getCcType() {
-            return ccType;
-        }
-
-        public String getCcExpirationMonth() {
-            return ccExpirationMonth;
-        }
-
-        public String getCcExpirationYear() {
-            return ccExpirationYear;
-        }
-
-        public String getCcLast4() {
-            return ccLast4;
-        }
-
-        public String getAddress1() {
-            return address1;
-        }
-
-        public String getAddress2() {
-            return address2;
-        }
-
-        public String getCity() {
-            return city;
-        }
-
-        public String getState() {
-            return state;
-        }
-
-        public String getZip() {
-            return zip;
-        }
-
-        public String getCountry() {
-            return country;
-        }
-
         public List<PluginPropertyJson> getProperties() {
             return properties;
         }
@@ -422,18 +253,6 @@ public class PaymentMethodJson extends JsonBase {
             final StringBuilder sb = new StringBuilder("PaymentMethodPluginDetailJson{");
             sb.append("externalPaymentId='").append(externalPaymentId).append('\'');
             sb.append(", isDefaultPaymentMethod=").append(isDefaultPaymentMethod);
-            sb.append(", type='").append(type).append('\'');
-            sb.append(", ccName='").append(ccName).append('\'');
-            sb.append(", ccType='").append(ccType).append('\'');
-            sb.append(", ccExpirationMonth='").append(ccExpirationMonth).append('\'');
-            sb.append(", ccExpirationYear='").append(ccExpirationYear).append('\'');
-            sb.append(", ccLast4='").append(ccLast4).append('\'');
-            sb.append(", address1='").append(address1).append('\'');
-            sb.append(", address2='").append(address2).append('\'');
-            sb.append(", city='").append(city).append('\'');
-            sb.append(", state='").append(state).append('\'');
-            sb.append(", zip='").append(zip).append('\'');
-            sb.append(", country='").append(country).append('\'');
             sb.append(", properties=").append(properties);
             sb.append('}');
             return sb.toString();
@@ -450,33 +269,6 @@ public class PaymentMethodJson extends JsonBase {
 
             final PaymentMethodPluginDetailJson that = (PaymentMethodPluginDetailJson) o;
 
-            if (address1 != null ? !address1.equals(that.address1) : that.address1 != null) {
-                return false;
-            }
-            if (address2 != null ? !address2.equals(that.address2) : that.address2 != null) {
-                return false;
-            }
-            if (ccExpirationMonth != null ? !ccExpirationMonth.equals(that.ccExpirationMonth) : that.ccExpirationMonth != null) {
-                return false;
-            }
-            if (ccExpirationYear != null ? !ccExpirationYear.equals(that.ccExpirationYear) : that.ccExpirationYear != null) {
-                return false;
-            }
-            if (ccLast4 != null ? !ccLast4.equals(that.ccLast4) : that.ccLast4 != null) {
-                return false;
-            }
-            if (ccName != null ? !ccName.equals(that.ccName) : that.ccName != null) {
-                return false;
-            }
-            if (ccType != null ? !ccType.equals(that.ccType) : that.ccType != null) {
-                return false;
-            }
-            if (city != null ? !city.equals(that.city) : that.city != null) {
-                return false;
-            }
-            if (country != null ? !country.equals(that.country) : that.country != null) {
-                return false;
-            }
             if (externalPaymentId != null ? !externalPaymentId.equals(that.externalPaymentId) : that.externalPaymentId != null) {
                 return false;
             }
@@ -486,16 +278,6 @@ public class PaymentMethodJson extends JsonBase {
             if (properties != null ? !properties.equals(that.properties) : that.properties != null) {
                 return false;
             }
-            if (state != null ? !state.equals(that.state) : that.state != null) {
-                return false;
-            }
-            if (type != null ? !type.equals(that.type) : that.type != null) {
-                return false;
-            }
-            if (zip != null ? !zip.equals(that.zip) : that.zip != null) {
-                return false;
-            }
-
             return true;
         }
 
@@ -503,18 +285,6 @@ public class PaymentMethodJson extends JsonBase {
         public int hashCode() {
             int result = externalPaymentId != null ? externalPaymentId.hashCode() : 0;
             result = 31 * result + (isDefaultPaymentMethod != null ? isDefaultPaymentMethod.hashCode() : 0);
-            result = 31 * result + (type != null ? type.hashCode() : 0);
-            result = 31 * result + (ccName != null ? ccName.hashCode() : 0);
-            result = 31 * result + (ccType != null ? ccType.hashCode() : 0);
-            result = 31 * result + (ccExpirationMonth != null ? ccExpirationMonth.hashCode() : 0);
-            result = 31 * result + (ccExpirationYear != null ? ccExpirationYear.hashCode() : 0);
-            result = 31 * result + (ccLast4 != null ? ccLast4.hashCode() : 0);
-            result = 31 * result + (address1 != null ? address1.hashCode() : 0);
-            result = 31 * result + (address2 != null ? address2.hashCode() : 0);
-            result = 31 * result + (city != null ? city.hashCode() : 0);
-            result = 31 * result + (state != null ? state.hashCode() : 0);
-            result = 31 * result + (zip != null ? zip.hashCode() : 0);
-            result = 31 * result + (country != null ? country.hashCode() : 0);
             result = 31 * result + (properties != null ? properties.hashCode() : 0);
             return result;
         }
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/RefundJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/RefundJson.java
index 340f153..0489afd 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/RefundJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/RefundJson.java
@@ -26,6 +26,7 @@ import javax.annotation.Nullable;
 import org.joda.time.DateTime;
 import org.killbill.billing.invoice.api.InvoiceItem;
 import org.killbill.billing.payment.api.DirectPayment;
+import org.killbill.billing.payment.api.DirectPaymentTransaction;
 import org.killbill.billing.util.audit.AuditLog;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
@@ -69,12 +70,12 @@ public class RefundJson extends JsonBase {
         this.adjustments = adjustments;
     }
 
-    public RefundJson(final DirectPayment refund) {
+    public RefundJson(final DirectPaymentTransaction refund) {
         this(refund, null, null);
     }
 
-    public RefundJson(final DirectPayment refund, @Nullable final List<InvoiceItem> adjustments, @Nullable final List<AuditLog> auditLogs) {
-        this(refund.getId().toString(), refund.getId().toString(), refund.getRefundedAmount(), refund.getCurrency().toString(),
+    public RefundJson(final DirectPaymentTransaction refund, @Nullable final List<InvoiceItem> adjustments, @Nullable final List<AuditLog> auditLogs) {
+        this(refund.getId().toString(), refund.getDirectPaymentId().toString(), refund.getAmount(), refund.getCurrency().toString(),
              null /* TODO [PAYMENT] refund.getRefundStatus().toString() */, false /* TODO [PAYMENT] refund.isAdjusted() */, refund.getCreatedDate(), refund.getCreatedDate(),
              adjustments == null ? null : ImmutableList.<InvoiceItemJson>copyOf(Collections2.transform(adjustments, new Function<InvoiceItem, InvoiceItemJson>() {
                  @Override
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
index 6ba9c6f..9fdff77 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
@@ -82,11 +82,9 @@ import org.killbill.billing.overdue.OverdueUserApi;
 import org.killbill.billing.overdue.config.api.OverdueException;
 import org.killbill.billing.payment.api.DirectPayment;
 import org.killbill.billing.payment.api.DirectPaymentApi;
-import org.killbill.billing.payment.api.PaymentApi;
 import org.killbill.billing.payment.api.PaymentApiException;
 import org.killbill.billing.payment.api.PaymentMethod;
 import org.killbill.billing.payment.api.PluginProperty;
-import org.killbill.billing.payment.api.Refund;
 import org.killbill.billing.payment.api.TransactionType;
 import org.killbill.billing.util.api.AuditLevel;
 import org.killbill.billing.util.api.AuditUserApi;
@@ -124,7 +122,7 @@ public class AccountResource extends JaxRsResourceBase {
     private final SubscriptionApi subscriptionApi;
     private final InvoiceUserApi invoiceApi;
     private final InvoicePaymentApi invoicePaymentApi;
-    private final PaymentApi paymentApi;
+    private final DirectPaymentApi paymentApi;
     private final DirectPaymentApi directPaymentApi;
     private final OverdueUserApi overdueApi;
 
@@ -133,7 +131,7 @@ public class AccountResource extends JaxRsResourceBase {
                            final AccountUserApi accountApi,
                            final InvoiceUserApi invoiceApi,
                            final InvoicePaymentApi invoicePaymentApi,
-                           final PaymentApi paymentApi,
+                           final DirectPaymentApi paymentApi,
                            final DirectPaymentApi directPaymentApi,
                            final TagUserApi tagUserApi,
                            final AuditUserApi auditUserApi,
@@ -335,10 +333,10 @@ public class AccountResource extends JaxRsResourceBase {
         final List<Invoice> invoices = invoiceApi.getInvoicesByAccount(account.getId(), tenantContext);
 
         // Get the payments
-        final List<DirectPayment> payments = paymentApi.getAccountPayments(accountId, tenantContext);
+        final List<DirectPayment> payments = paymentApi.getAccountPayments(accountId, false, ImmutableList.<PluginProperty>of(), tenantContext);
 
         // Get the refunds
-        final List<DirectPayment> refunds = paymentApi.getAccountRefunds(account, tenantContext);
+        final List<DirectPayment> refunds = null; // STEPH paymentApi.getAccountRefunds(account, tenantContext);
         final Multimap<UUID, DirectPayment> refundsByPayment = ArrayListMultimap.<UUID, DirectPayment>create();
         for (final DirectPayment refund : refunds) {
             refundsByPayment.put(refund.getId(), refund);
@@ -461,8 +459,9 @@ public class AccountResource extends JaxRsResourceBase {
     @Path("/{accountId:" + UUID_PATTERN + "}/" + PAYMENTS)
     @Produces(APPLICATION_JSON)
     public Response getPayments(@PathParam("accountId") final String accountId,
+                                @QueryParam(QUERY_WITH_PLUGIN_INFO) @DefaultValue("false") final Boolean withPluginInfo,
                                 @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException {
-        final List<DirectPayment> payments = paymentApi.getAccountPayments(UUID.fromString(accountId), context.createContext(request));
+        final List<DirectPayment> payments = paymentApi.getAccountPayments(UUID.fromString(accountId), withPluginInfo, ImmutableList.<PluginProperty>of(), context.createContext(request));
         final List<PaymentJson> result = new ArrayList<PaymentJson>(payments.size());
         for (final DirectPayment payment : payments) {
             result.add(new PaymentJson(payment, null));
@@ -501,9 +500,9 @@ public class AccountResource extends JaxRsResourceBase {
                                            invoice.getBalance() : remainingRequestPayment;
             if (amountToPay.compareTo(BigDecimal.ZERO) > 0) {
                 if (externalPayment) {
-                    paymentApi.createExternalPayment(account, invoice.getId(), amountToPay, callContext);
+                    // STEPH paymentApi.createExternalPayment(account, invoice.getId(), amountToPay, callContext);
                 } else {
-                    paymentApi.createPayment(account, invoice.getId(), amountToPay, pluginProperties, callContext);
+                    // STEPH  paymentApi.createPayment(account, invoice.getId(), amountToPay, pluginProperties, callContext);
                 }
             }
             remainingRequestPayment = remainingRequestPayment.subtract(amountToPay);
@@ -548,10 +547,10 @@ public class AccountResource extends JaxRsResourceBase {
             return Response.status(Status.BAD_REQUEST).build();
         }
 
-        final UUID paymentMethodId = paymentApi.addPaymentMethod(data.getPluginName(), account, isDefault, data.getPluginDetail(), pluginProperties, callContext);
+        final UUID paymentMethodId = paymentApi.addPaymentMethod(account, data.getPluginName(), isDefault, data.getPluginDetail(), pluginProperties, callContext);
         if (payAllUnpaidInvoices && unpaidInvoices.size() > 0) {
             for (final Invoice invoice : unpaidInvoices) {
-                paymentApi.createPayment(account, invoice.getId(), invoice.getBalance(), pluginProperties, callContext);
+                // STEPH paymentApi.createPayment(account, invoice.getId(), invoice.getBalance(), pluginProperties, callContext);
             }
         }
         return uriBuilder.buildResponse(PaymentMethodResource.class, "getPaymentMethod", paymentMethodId, uriInfo.getBaseUri().toString());
@@ -569,7 +568,7 @@ public class AccountResource extends JaxRsResourceBase {
         final TenantContext tenantContext = context.createContext(request);
 
         final Account account = accountUserApi.getAccountById(UUID.fromString(accountId), tenantContext);
-        final List<PaymentMethod> methods = paymentApi.getPaymentMethods(account, withPluginInfo, pluginProperties, tenantContext);
+        final List<PaymentMethod> methods = paymentApi.getAccountPaymentMethods(account.getId(), withPluginInfo, pluginProperties, tenantContext);
         final AccountAuditLogs accountAuditLogs = auditUserApi.getAccountAuditLogs(account.getId(), auditMode.getLevel(), tenantContext);
         final List<PaymentMethodJson> json = new ArrayList<PaymentMethodJson>(Collections2.transform(methods, new Function<PaymentMethod, PaymentMethodJson>() {
             @Override
@@ -602,7 +601,7 @@ public class AccountResource extends JaxRsResourceBase {
         if (payAllUnpaidInvoices) {
             final Collection<Invoice> unpaidInvoices = invoiceApi.getUnpaidInvoicesByAccountId(account.getId(), clock.getUTCToday(), callContext);
             for (final Invoice invoice : unpaidInvoices) {
-                paymentApi.createPayment(account, invoice.getId(), invoice.getBalance(), pluginProperties, callContext);
+                // STEPH paymentApi.createPayment(account, invoice.getId(), invoice.getBalance(), pluginProperties, callContext);
             }
         }
         return Response.status(Status.OK).build();
@@ -616,10 +615,11 @@ public class AccountResource extends JaxRsResourceBase {
     @Produces(APPLICATION_JSON)
     public Response getDirectPaymentsForAccount(@PathParam("accountId") final String accountIdStr,
                                                 @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode,
+                                                @QueryParam(QUERY_WITH_PLUGIN_INFO) @DefaultValue("false") final Boolean withPluginInfo,
                                                 @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException {
         final UUID accountId = UUID.fromString(accountIdStr);
         final TenantContext tenantContext = context.createContext(request);
-        final List<DirectPayment> payments = directPaymentApi.getAccountPayments(accountId, tenantContext);
+        final List<DirectPayment> payments = directPaymentApi.getAccountPayments(accountId, withPluginInfo, ImmutableList.<PluginProperty>of(), tenantContext);
         final AccountAuditLogs accountAuditLogs = auditUserApi.getAccountAuditLogs(accountId, auditMode.getLevel(), tenantContext);
         final List<DirectPaymentJson> result = ImmutableList.copyOf(Iterables.transform(payments, new Function<DirectPayment, DirectPaymentJson>() {
             @Override
@@ -703,12 +703,12 @@ public class AccountResource extends JaxRsResourceBase {
         final TenantContext tenantContext = context.createContext(request);
 
         final Account account = accountUserApi.getAccountById(UUID.fromString(accountId), tenantContext);
-        final List<DirectPayment> refunds = paymentApi.getAccountRefunds(account, tenantContext);
+        final List<DirectPayment> refunds = null; // STEPH paymentApi.getAccountRefunds(account, tenantContext);
         final List<RefundJson> result = new ArrayList<RefundJson>(Collections2.transform(refunds, new Function<DirectPayment, RefundJson>() {
             @Override
             public RefundJson apply(final DirectPayment input) {
                 // TODO Return adjusted items and audits
-                return new RefundJson(input, null, null);
+                return null; // STEPH new RefundJson(input, null, null);
             }
         }));
 
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java
index 94531df..8651604 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java
@@ -110,15 +110,16 @@ public class DirectPaymentResource extends JaxRsResourceBase {
                                       @QueryParam(QUERY_PAYMENT_PLUGIN_NAME) final String pluginName,
                                       @QueryParam(QUERY_PLUGIN_PROPERTY) final List<String> pluginPropertiesString,
                                       @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode,
+                                      @QueryParam(QUERY_WITH_PLUGIN_INFO) @DefaultValue("false") final Boolean withPluginInfo,
                                       @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException {
         final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
         final TenantContext tenantContext = context.createContext(request);
 
         final Pagination<DirectPayment> directPayments;
         if (Strings.isNullOrEmpty(pluginName)) {
-            directPayments = directPaymentApi.getPayments(offset, limit, pluginProperties, tenantContext);
+            directPayments = directPaymentApi.getPayments(offset, limit, withPluginInfo, pluginProperties, tenantContext);
         } else {
-            directPayments = directPaymentApi.getPayments(offset, limit, pluginName, pluginProperties, tenantContext);
+            directPayments = directPaymentApi.getPayments(offset, limit, pluginName, withPluginInfo, pluginProperties, tenantContext);
         }
 
         final URI nextPageUri = uriBuilder.nextPage(DirectPaymentResource.class, "getDirectPayments", directPayments.getNextOffset(), limit, ImmutableMap.<String, String>of(QUERY_PAYMENT_METHOD_PLUGIN_NAME, Strings.nullToEmpty(pluginName),
@@ -150,6 +151,7 @@ public class DirectPaymentResource extends JaxRsResourceBase {
                                          @QueryParam(QUERY_PAYMENT_PLUGIN_NAME) final String pluginName,
                                          @QueryParam(QUERY_PLUGIN_PROPERTY) final List<String> pluginPropertiesString,
                                          @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode,
+                                         @QueryParam(QUERY_WITH_PLUGIN_INFO) @DefaultValue("false") final Boolean withPluginInfo,
                                          @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException {
         final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
         final TenantContext tenantContext = context.createContext(request);
@@ -157,9 +159,9 @@ public class DirectPaymentResource extends JaxRsResourceBase {
         // Search the plugin(s)
         final Pagination<DirectPayment> directPayments;
         if (Strings.isNullOrEmpty(pluginName)) {
-            directPayments = directPaymentApi.searchPayments(searchKey, offset, limit, pluginProperties, tenantContext);
+            directPayments = directPaymentApi.searchPayments(searchKey, offset, limit, withPluginInfo, pluginProperties, tenantContext);
         } else {
-            directPayments = directPaymentApi.searchPayments(searchKey, offset, limit, pluginName, pluginProperties, tenantContext);
+            directPayments = directPaymentApi.searchPayments(searchKey, offset, limit, pluginName, withPluginInfo, pluginProperties, tenantContext);
         }
 
         final URI nextPageUri = uriBuilder.nextPage(DirectPaymentResource.class, "searchDirectPayments", directPayments.getNextOffset(), limit, ImmutableMap.<String, String>of("searchKey", searchKey,
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
index 4991f05..e12f232 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
@@ -65,7 +65,7 @@ import org.killbill.billing.jaxrs.json.PaymentJson;
 import org.killbill.billing.jaxrs.util.Context;
 import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
 import org.killbill.billing.payment.api.DirectPayment;
-import org.killbill.billing.payment.api.PaymentApi;
+import org.killbill.billing.payment.api.DirectPaymentApi;
 import org.killbill.billing.payment.api.PaymentApiException;
 import org.killbill.billing.payment.api.PluginProperty;
 import org.killbill.billing.util.api.AuditUserApi;
@@ -100,13 +100,13 @@ public class InvoiceResource extends JaxRsResourceBase {
     private static final String ID_PARAM_NAME = "invoiceId";
 
     private final InvoiceUserApi invoiceApi;
-    private final PaymentApi paymentApi;
+    private final DirectPaymentApi paymentApi;
     private final InvoiceNotifier invoiceNotifier;
 
     @Inject
     public InvoiceResource(final AccountUserApi accountUserApi,
                            final InvoiceUserApi invoiceApi,
-                           final PaymentApi paymentApi,
+                           final DirectPaymentApi paymentApi,
                            final InvoiceNotifier invoiceNotifier,
                            final Clock clock,
                            final JaxrsUriBuilder uriBuilder,
@@ -357,7 +357,7 @@ public class InvoiceResource extends JaxRsResourceBase {
                     paidInvoices.add(externalCharge.getInvoiceId());
 
                     final Invoice invoice = invoiceApi.getInvoice(externalCharge.getInvoiceId(), callContext);
-                    paymentApi.createPayment(account, invoice.getId(), invoice.getBalance(), pluginProperties, callContext);
+                    // STEPH paymentApi.createPurchaseWithPaymentControl(account, invoice.getId(), invoice.getBalance(), pluginProperties, callContext);
                 }
             }
         }
@@ -380,7 +380,7 @@ public class InvoiceResource extends JaxRsResourceBase {
                                 @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode,
                                 @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException {
         final TenantContext tenantContext = context.createContext(request);
-        final List<DirectPayment> payments = paymentApi.getInvoicePayments(UUID.fromString(invoiceId), tenantContext);
+        final List<DirectPayment> payments = null; // STEPH paymentApi.getInvoicePayments(UUID.fromString(invoiceId), tenantContext);
         final List<PaymentJson> result = new ArrayList<PaymentJson>(payments.size());
         if (payments.size() == 0) {
             return Response.status(Status.OK).entity(result).build();
@@ -417,9 +417,9 @@ public class InvoiceResource extends JaxRsResourceBase {
 
         final UUID invoiceId = UUID.fromString(payment.getInvoiceId());
         if (externalPayment) {
-            paymentApi.createExternalPayment(account, invoiceId, payment.getAmount(), callContext);
+            // STEPH paymentApi.createExternalPayment(account, invoiceId, payment.getAmount(), callContext);
         } else {
-            paymentApi.createPayment(account, invoiceId, payment.getAmount(), pluginProperties, callContext);
+            // STEPH  paymentApi.createPayment(account, invoiceId, payment.getAmount(), pluginProperties, callContext);
         }
 
         return uriBuilder.buildResponse(uriInfo, InvoiceResource.class, "getPayments", payment.getInvoiceId());
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
index 37b2de7..0243355 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
@@ -139,7 +139,7 @@ public interface JaxrsResource {
     public static final String CHARGES = "charges";
     public static final String CHARGES_PATH = PREFIX + "/" + INVOICES + "/" + CHARGES;
 
-    public static final String PAYMENTS = "payments";
+    public static final String PAYMENTS = "invoicePayments";
     public static final String PAYMENTS_PATH = PREFIX + "/" + PAYMENTS;
 
     public static final String DIRECT_PAYMENTS = "directPayments";
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java
index 53b16e5..aad539a 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentMethodResource.java
@@ -44,7 +44,7 @@ import org.killbill.billing.account.api.AccountUserApi;
 import org.killbill.billing.jaxrs.json.PaymentMethodJson;
 import org.killbill.billing.jaxrs.util.Context;
 import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
-import org.killbill.billing.payment.api.PaymentApi;
+import org.killbill.billing.payment.api.DirectPaymentApi;
 import org.killbill.billing.payment.api.PaymentApiException;
 import org.killbill.billing.payment.api.PaymentMethod;
 import org.killbill.billing.payment.api.PluginProperty;
@@ -69,10 +69,10 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
 @Path(JaxrsResource.PAYMENT_METHODS_PATH)
 public class PaymentMethodResource extends JaxRsResourceBase {
 
-    private final PaymentApi paymentApi;
+    private final DirectPaymentApi paymentApi;
 
     @Inject
-    public PaymentMethodResource(final PaymentApi paymentApi,
+    public PaymentMethodResource(final DirectPaymentApi paymentApi,
                                  final AccountUserApi accountUserApi,
                                  final JaxrsUriBuilder uriBuilder,
                                  final TagUserApi tagUserApi,
@@ -88,9 +88,9 @@ public class PaymentMethodResource extends JaxRsResourceBase {
     @Path("/{paymentMethodId:" + UUID_PATTERN + "}")
     @Produces(APPLICATION_JSON)
     public Response getPaymentMethod(@PathParam("paymentMethodId") final String paymentMethodId,
-                                     @QueryParam(QUERY_WITH_PLUGIN_INFO) @DefaultValue("false") final Boolean withPluginInfo,
                                      @QueryParam(QUERY_PLUGIN_PROPERTY) final List<String> pluginPropertiesString,
                                      @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode,
+                                     @QueryParam(QUERY_WITH_PLUGIN_INFO) @DefaultValue("false") final Boolean withPluginInfo,
                                      @javax.ws.rs.core.Context final HttpServletRequest request) throws AccountApiException, PaymentApiException {
         final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
         final TenantContext tenantContext = context.createContext(request);
@@ -111,15 +111,16 @@ public class PaymentMethodResource extends JaxRsResourceBase {
                                       @QueryParam(QUERY_PAYMENT_METHOD_PLUGIN_NAME) final String pluginName,
                                       @QueryParam(QUERY_PLUGIN_PROPERTY) final List<String> pluginPropertiesString,
                                       @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode,
+                                      @QueryParam(QUERY_WITH_PLUGIN_INFO) @DefaultValue("false") final Boolean withPluginInfo,
                                       @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException {
         final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
         final TenantContext tenantContext = context.createContext(request);
 
         final Pagination<PaymentMethod> paymentMethods;
         if (Strings.isNullOrEmpty(pluginName)) {
-            paymentMethods = paymentApi.getPaymentMethods(offset, limit, pluginProperties, tenantContext);
+            paymentMethods = paymentApi.getPaymentMethods(offset, limit, withPluginInfo, pluginProperties, tenantContext);
         } else {
-            paymentMethods = paymentApi.getPaymentMethods(offset, limit, pluginName, pluginProperties, tenantContext);
+            paymentMethods = paymentApi.getPaymentMethods(offset, limit, pluginName, withPluginInfo, pluginProperties, tenantContext);
         }
 
         final URI nextPageUri = uriBuilder.nextPage(PaymentMethodResource.class, "getPaymentMethods", paymentMethods.getNextOffset(), limit, ImmutableMap.<String, String>of(QUERY_PAYMENT_METHOD_PLUGIN_NAME, Strings.nullToEmpty(pluginName),
@@ -164,6 +165,7 @@ public class PaymentMethodResource extends JaxRsResourceBase {
                                          @QueryParam(QUERY_PAYMENT_METHOD_PLUGIN_NAME) final String pluginName,
                                          @QueryParam(QUERY_PLUGIN_PROPERTY) final List<String> pluginPropertiesString,
                                          @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode,
+                                         @QueryParam(QUERY_WITH_PLUGIN_INFO) @DefaultValue("false") final Boolean withPluginInfo,
                                          @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException, AccountApiException {
         final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
         final TenantContext tenantContext = context.createContext(request);
@@ -171,9 +173,9 @@ public class PaymentMethodResource extends JaxRsResourceBase {
         // Search the plugin(s)
         final Pagination<PaymentMethod> paymentMethods;
         if (Strings.isNullOrEmpty(pluginName)) {
-            paymentMethods = paymentApi.searchPaymentMethods(searchKey, offset, limit, pluginProperties, tenantContext);
+            paymentMethods = paymentApi.searchPaymentMethods(searchKey, offset, limit, withPluginInfo, pluginProperties, tenantContext);
         } else {
-            paymentMethods = paymentApi.searchPaymentMethods(searchKey, offset, limit, pluginName, pluginProperties, tenantContext);
+            paymentMethods = paymentApi.searchPaymentMethods(searchKey, offset, limit, pluginName, withPluginInfo, pluginProperties, tenantContext);
         }
 
         final URI nextPageUri = uriBuilder.nextPage(PaymentMethodResource.class, "searchPaymentMethods", paymentMethods.getNextOffset(), limit, ImmutableMap.<String, String>of("searchKey", searchKey,
@@ -226,7 +228,7 @@ public class PaymentMethodResource extends JaxRsResourceBase {
         final PaymentMethod paymentMethod = paymentApi.getPaymentMethodById(UUID.fromString(paymentMethodId), false, false, pluginProperties, callContext);
         final Account account = accountUserApi.getAccountById(paymentMethod.getAccountId(), callContext);
 
-        paymentApi.deletedPaymentMethod(account, UUID.fromString(paymentMethodId), deleteDefaultPaymentMethodWithAutoPayOff, pluginProperties, callContext);
+        paymentApi.deletePaymentMethod(account, UUID.fromString(paymentMethodId), deleteDefaultPaymentMethodWithAutoPayOff, pluginProperties, callContext);
 
         return Response.status(Status.OK).build();
     }
diff --git a/payment/src/main/java/org/killbill/billing/payment/api/DefaultDirectPaymentApi.java b/payment/src/main/java/org/killbill/billing/payment/api/DefaultDirectPaymentApi.java
index 29ba0da..1094f22 100644
--- a/payment/src/main/java/org/killbill/billing/payment/api/DefaultDirectPaymentApi.java
+++ b/payment/src/main/java/org/killbill/billing/payment/api/DefaultDirectPaymentApi.java
@@ -133,33 +133,30 @@ public class DefaultDirectPaymentApi implements DirectPaymentApi {
 
     }
 
-    // STEPH API: should we only pass transactionExternalKey ? (notification may keep only one key; should we use kbTransactionId or externalKey ?)
-    // DO we need to pass account (i guess this helps for context)
     @Override
-    public void notifyPendingPaymentOfStateChanged(final Account account, String transactionExternalKey, final boolean isSuccess, final CallContext callContext) throws PaymentApiException {
+    public void notifyPendingTransactionOfStateChanged(final Account account, final UUID directPaymentTransactionId, final boolean isSuccess, final CallContext callContext) throws PaymentApiException {
         final InternalCallContext internalCallContext = internalCallContextFactory.createInternalCallContext(account.getId(), callContext);
-        directPaymentProcessor.notifyPendingPaymentOfStateChanged(account, transactionExternalKey, isSuccess, callContext, internalCallContext);
+        directPaymentProcessor.notifyPendingPaymentOfStateChanged(account, directPaymentTransactionId, isSuccess, callContext, internalCallContext);
     }
 
-    // STEPH API Is chargeback against a payment or transaction?; do we want to provide a new transactionExternalKey (probably) ?
     @Override
-    public void notifyPaymentPaymentOfChargeback(final Account account, String paymentExternalKey, String chargebackExternalKey, BigDecimal amount, Currency currency, final CallContext callContext) throws PaymentApiException {
+    public void notifyChargeback(final Account account, final UUID directPaymentTransactionId, final String chargebackTransactionExternalKey, final BigDecimal amount, final Currency currency, final CallContext callContext) throws PaymentApiException {
         final InternalCallContext internalCallContext = internalCallContextFactory.createInternalCallContext(account.getId(), callContext);
-        directPaymentProcessor.notifyPaymentPaymentOfChargeback(account, paymentExternalKey, chargebackExternalKey, amount, currency, callContext, internalCallContext);
+        directPaymentProcessor.notifyPaymentPaymentOfChargeback(account, directPaymentTransactionId, chargebackTransactionExternalKey, amount, currency, callContext, internalCallContext);
     }
 
     @Override
-    public List<DirectPayment> getAccountPayments(final UUID accountId, final TenantContext tenantContext) throws PaymentApiException {
+    public List<DirectPayment> getAccountPayments(final UUID accountId, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final TenantContext tenantContext)  throws PaymentApiException {
         return directPaymentProcessor.getAccountPayments(accountId, internalCallContextFactory.createInternalTenantContext(accountId, tenantContext));
     }
 
     @Override
-    public Pagination<DirectPayment> getPayments(final Long offset, final Long limit, final Iterable<PluginProperty> properties, final TenantContext context) {
+    public Pagination<DirectPayment> getPayments(final Long offset, final Long limit, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final TenantContext context) {
         return directPaymentProcessor.getPayments(offset, limit, properties, context, internalCallContextFactory.createInternalTenantContext(context));
     }
 
     @Override
-    public Pagination<DirectPayment> getPayments(final Long offset, final Long limit, final String pluginName, final Iterable<PluginProperty> properties, final TenantContext tenantContext) throws PaymentApiException {
+    public Pagination<DirectPayment> getPayments(final Long offset, final Long limit, final String pluginName, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final TenantContext tenantContext) throws PaymentApiException {
         return directPaymentProcessor.getPayments(offset, limit, pluginName, properties, tenantContext, internalCallContextFactory.createInternalTenantContext(tenantContext));
     }
 
@@ -173,28 +170,25 @@ public class DefaultDirectPaymentApi implements DirectPaymentApi {
     }
 
     @Override
-    public DirectPayment getPaymentByExternalKey(String paymentExternalKey, final boolean withPluginInfo, Iterable<PluginProperty> properties, TenantContext tenantContext)
+    public DirectPayment getPaymentByExternalKey(final String paymentExternalKey, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final TenantContext tenantContext)
             throws PaymentApiException {
         return directPaymentProcessor.getPaymentByExternalKey(paymentExternalKey, withPluginInfo, properties, tenantContext, internalCallContextFactory.createInternalTenantContext(tenantContext));
     }
 
+    // STEPH TODO withPluginInfo needs to be honored...
     @Override
-    public Pagination<DirectPayment> searchPayments(final String searchKey, final Long offset, final Long limit, final Iterable<PluginProperty> properties, final TenantContext context) {
+    public Pagination<DirectPayment> searchPayments(final String searchKey, final Long offset, final Long limit, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final TenantContext context) {
         return directPaymentProcessor.searchPayments(searchKey, offset, limit, properties, context, internalCallContextFactory.createInternalTenantContext(context));
     }
 
     @Override
-    public Pagination<DirectPayment> searchPayments(final String searchKey, final Long offset, final Long limit, final String pluginName, final Iterable<PluginProperty> properties, final TenantContext context) throws PaymentApiException {
+    public Pagination<DirectPayment> searchPayments(final String searchKey, final Long offset, final Long limit, final String pluginName, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final TenantContext context) throws PaymentApiException {
         return directPaymentProcessor.searchPayments(searchKey, offset, limit, pluginName, properties, context, internalCallContextFactory.createInternalTenantContext(context));
     }
 
-    @Override
-    public Set<String> getAvailablePlugins() {
-        return paymentMethodProcessor.getAvailablePlugins();
-    }
 
     @Override
-    public UUID addPaymentMethod(final String pluginName, final Account account,
+    public UUID addPaymentMethod(final Account account, final String pluginName,
                                  final boolean setDefault, final PaymentMethodPlugin paymentMethodInfo,
                                  final Iterable<PluginProperty> properties, final CallContext context)
             throws PaymentApiException {
@@ -203,9 +197,9 @@ public class DefaultDirectPaymentApi implements DirectPaymentApi {
     }
 
     @Override
-    public List<PaymentMethod> getPaymentMethods(final Account account, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final TenantContext context)
+    public List<PaymentMethod> getAccountPaymentMethods(final UUID accountId, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final TenantContext context)
             throws PaymentApiException {
-        return paymentMethodProcessor.getPaymentMethods(account, withPluginInfo, properties, context, internalCallContextFactory.createInternalTenantContext(context));
+        return paymentMethodProcessor.getPaymentMethods(accountId, withPluginInfo, properties, context, internalCallContextFactory.createInternalTenantContext(context));
     }
 
     @Override
@@ -215,27 +209,27 @@ public class DefaultDirectPaymentApi implements DirectPaymentApi {
     }
 
     @Override
-    public Pagination<PaymentMethod> getPaymentMethods(final Long offset, final Long limit, final Iterable<PluginProperty> properties, final TenantContext context) {
+    public Pagination<PaymentMethod> getPaymentMethods(final Long offset, final Long limit, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final TenantContext context) {
         return paymentMethodProcessor.getPaymentMethods(offset, limit, properties, context, internalCallContextFactory.createInternalTenantContext(context));
     }
 
     @Override
-    public Pagination<PaymentMethod> getPaymentMethods(final Long offset, final Long limit, final String pluginName, final Iterable<PluginProperty> properties, final TenantContext context) throws PaymentApiException {
+    public Pagination<PaymentMethod> getPaymentMethods(final Long offset, final Long limit, final String pluginName, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final TenantContext context) throws PaymentApiException {
         return paymentMethodProcessor.getPaymentMethods(offset, limit, pluginName, properties, context, internalCallContextFactory.createInternalTenantContext(context));
     }
 
     @Override
-    public Pagination<PaymentMethod> searchPaymentMethods(final String searchKey, final Long offset, final Long limit, final Iterable<PluginProperty> properties, final TenantContext context) {
+    public Pagination<PaymentMethod> searchPaymentMethods(final String searchKey, final Long offset, final Long limit, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final TenantContext context) {
         return paymentMethodProcessor.searchPaymentMethods(searchKey, offset, limit, properties, context, internalCallContextFactory.createInternalTenantContext(context));
     }
 
     @Override
-    public Pagination<PaymentMethod> searchPaymentMethods(final String searchKey, final Long offset, final Long limit, final String pluginName, final Iterable<PluginProperty> properties, final TenantContext context) throws PaymentApiException {
+    public Pagination<PaymentMethod> searchPaymentMethods(final String searchKey, final Long offset, final Long limit, final String pluginName, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final TenantContext context) throws PaymentApiException {
         return paymentMethodProcessor.searchPaymentMethods(searchKey, offset, limit, pluginName, properties, context, internalCallContextFactory.createInternalTenantContext(context));
     }
 
     @Override
-    public void deletedPaymentMethod(final Account account, final UUID paymentMethodId, final boolean deleteDefaultPaymentMethodWithAutoPayOff, final Iterable<PluginProperty> properties, final CallContext context)
+    public void deletePaymentMethod(final Account account, final UUID paymentMethodId, final boolean deleteDefaultPaymentMethodWithAutoPayOff, final Iterable<PluginProperty> properties, final CallContext context)
             throws PaymentApiException {
         paymentMethodProcessor.deletedPaymentMethod(account, paymentMethodId, deleteDefaultPaymentMethodWithAutoPayOff, properties, context, internalCallContextFactory.createInternalCallContext(account.getId(), context));
     }
@@ -247,7 +241,7 @@ public class DefaultDirectPaymentApi implements DirectPaymentApi {
     }
 
     @Override
-    public List<PaymentMethod> refreshPaymentMethods(final String pluginName, final Account account, final Iterable<PluginProperty> properties, final CallContext context)
+    public List<PaymentMethod> refreshPaymentMethods(final Account account, final String pluginName, final Iterable<PluginProperty> properties, final CallContext context)
             throws PaymentApiException {
         return paymentMethodProcessor.refreshPaymentMethods(pluginName, account, properties, context, internalCallContextFactory.createInternalCallContext(account.getId(), context));
     }
diff --git a/payment/src/main/java/org/killbill/billing/payment/control/InvoicePaymentControlPluginApi.java b/payment/src/main/java/org/killbill/billing/payment/control/InvoicePaymentControlPluginApi.java
index 880e625..28d7c45 100644
--- a/payment/src/main/java/org/killbill/billing/payment/control/InvoicePaymentControlPluginApi.java
+++ b/payment/src/main/java/org/killbill/billing/payment/control/InvoicePaymentControlPluginApi.java
@@ -47,8 +47,11 @@ import org.killbill.billing.payment.glue.PaymentModule;
 import org.killbill.billing.payment.retry.BaseRetryService.RetryServiceScheduler;
 import org.killbill.billing.payment.retry.DefaultFailureCallResult;
 import org.killbill.billing.payment.retry.DefaultPriorPaymentControlResult;
+import org.killbill.billing.retry.plugin.api.FailureCallResult;
 import org.killbill.billing.retry.plugin.api.PaymentControlApiException;
+import org.killbill.billing.retry.plugin.api.PaymentControlContext;
 import org.killbill.billing.retry.plugin.api.PaymentControlPluginApi;
+import org.killbill.billing.retry.plugin.api.PriorPaymentControlResult;
 import org.killbill.billing.util.api.TagUserApi;
 import org.killbill.billing.util.callcontext.CallContext;
 import org.killbill.billing.util.callcontext.InternalCallContextFactory;
@@ -112,7 +115,7 @@ public final class InvoicePaymentControlPluginApi implements PaymentControlPlugi
             return new DefaultPriorPaymentControlResult(true);
         }
 
-        final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(paymentControlContext.getAccount().getId(), paymentControlContext);
+        final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(paymentControlContext.getAccountId(), paymentControlContext);
         if (transactionType == TransactionType.PURCHASE) {
             return getPluginPurchaseResult(paymentControlContext, internalContext);
         } else /* TransactionType.REFUND */ {
@@ -121,10 +124,10 @@ public final class InvoicePaymentControlPluginApi implements PaymentControlPlugi
     }
 
     @Override
-    public void onCompletionCall(final PaymentControlContext paymentControlContext) throws PaymentControlApiException {
+    public void onSuccessCall(final PaymentControlContext paymentControlContext) throws PaymentControlApiException {
 
         final UUID invoiceId = UUID.fromString(paymentControlContext.getPaymentExternalKey());
-        final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(paymentControlContext.getAccount().getId(), paymentControlContext);
+        final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(paymentControlContext.getAccountId(), paymentControlContext);
         try {
             invoiceApi.notifyOfPayment(invoiceId,
                                        paymentControlContext.getAmount(),
@@ -142,7 +145,7 @@ public final class InvoicePaymentControlPluginApi implements PaymentControlPlugi
     @Override
     public FailureCallResult onFailureCall(final PaymentControlContext paymentControlContext) throws PaymentControlApiException {
 
-        final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(paymentControlContext.getAccount().getId(), paymentControlContext);
+        final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(paymentControlContext.getAccountId(), paymentControlContext);
         switch (paymentControlContext.getTransactionType()) {
             case PURCHASE:
                 final DateTime nextRetryDate = computeNextRetryDate(paymentControlContext.getPaymentExternalKey(), paymentControlContext.isApiPayment(), internalContext);
@@ -377,10 +380,10 @@ public final class InvoicePaymentControlPluginApi implements PaymentControlPlugi
     }
 
     private boolean insert_AUTO_PAY_OFF_ifRequired(final PaymentControlContext paymentControlContext) {
-        if (!isAccountAutoPayOff(paymentControlContext.getAccount().getId(), paymentControlContext)) {
+        if (!isAccountAutoPayOff(paymentControlContext.getAccountId(), paymentControlContext)) {
             return false;
         }
-        final PluginAutoPayOffModelDao data = new PluginAutoPayOffModelDao(paymentControlContext.getPaymentExternalKey(), paymentControlContext.getTransactionExternalKey(), paymentControlContext.getAccount().getId(), PLUGIN_NAME,
+        final PluginAutoPayOffModelDao data = new PluginAutoPayOffModelDao(paymentControlContext.getPaymentExternalKey(), paymentControlContext.getTransactionExternalKey(), paymentControlContext.getAccountId(), PLUGIN_NAME,
                                                                            paymentControlContext.getPaymentId(), paymentControlContext.getPaymentMethodId(), paymentControlContext.getAmount(), paymentControlContext.getCurrency(), CREATED_BY, clock.getUTCNow());
         controlDao.insertAutoPayOff(data);
         return true;
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/DirectPaymentProcessor.java b/payment/src/main/java/org/killbill/billing/payment/core/DirectPaymentProcessor.java
index 62e2199..adbaa16 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/DirectPaymentProcessor.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/DirectPaymentProcessor.java
@@ -236,9 +236,9 @@ public class DirectPaymentProcessor extends ProcessorBase {
                                                                     );
     }
 
-    public void notifyPendingPaymentOfStateChanged(final Account account, String transactionExternalKey, final boolean isSuccess, final CallContext callContext, final InternalCallContext internalCallContext) throws PaymentApiException {
+    public void notifyPendingPaymentOfStateChanged(final Account account, UUID transactionId, final boolean isSuccess, final CallContext callContext, final InternalCallContext internalCallContext) throws PaymentApiException {
 
-        final DirectPaymentTransactionModelDao transactionModelDao = paymentDao.getDirectPaymentTransactionByExternalKey(transactionExternalKey, internalCallContext);
+        final DirectPaymentTransactionModelDao transactionModelDao = paymentDao.getDirectPaymentTransaction(transactionId, internalCallContext);
         if (transactionModelDao.getPaymentStatus() != PaymentStatus.PENDING) {
             throw new PaymentApiException(ErrorCode.PAYMENT_NO_SUCH_SUCCESS_PAYMENT, transactionModelDao.getDirectPaymentId());
 
@@ -255,20 +255,19 @@ public class DirectPaymentProcessor extends ProcessorBase {
                                                                  transactionModelDao.getGatewayErrorCode(), transactionModelDao.getGatewayErrorMsg(), internalCallContext);
     }
 
-    public void notifyPaymentPaymentOfChargeback(final Account account, final String paymentExternalKey, final String chargebackExternalKey, BigDecimal amount, Currency currency, final CallContext callContext, final InternalCallContext internalCallContext) throws PaymentApiException {
-        final DirectPaymentModelDao paymentModelDao = paymentDao.getDirectPaymentByExternalKey(paymentExternalKey, internalCallContext);
-        Preconditions.checkState(paymentModelDao != null);
+    public void notifyPaymentPaymentOfChargeback(final Account account, final UUID transactionId, final String chargebackTransactionExternalKey, final BigDecimal amount, final Currency currency, final CallContext callContext, final InternalCallContext internalCallContext) throws PaymentApiException {
+        final DirectPaymentTransactionModelDao transactionModelDao = paymentDao.getDirectPaymentTransaction(transactionId, internalCallContext);
+        Preconditions.checkState(transactionModelDao != null);
 
         final DateTime utcNow = clock.getUTCNow();
-
-        final DirectPaymentTransactionModelDao chargebackTransaction = new DirectPaymentTransactionModelDao(utcNow, utcNow, chargebackExternalKey, paymentModelDao.getId(),
+        final DirectPaymentTransactionModelDao chargebackTransaction = new DirectPaymentTransactionModelDao(utcNow, utcNow, chargebackTransactionExternalKey, transactionModelDao.getId(),
 
                                                                                                             TransactionType.CHARGEBACK, utcNow, PaymentStatus.SUCCESS, amount, currency, null, null);
         final State currentPaymentState = directPaymentAutomatonRunner.fetchNextState("CHARGEBACK_INIT", true);
 
         // TODO STEPH we could create a DAO operation to do both steps at once
-        paymentDao.updateDirectPaymentWithNewTransaction(paymentModelDao.getId(), chargebackTransaction, internalCallContext);
-        paymentDao.updateDirectPaymentAndTransactionOnCompletion(paymentModelDao.getId(), currentPaymentState.getName(), chargebackTransaction.getId(), PaymentStatus.SUCCESS,
+        paymentDao.updateDirectPaymentWithNewTransaction(transactionModelDao.getId(), chargebackTransaction, internalCallContext);
+        paymentDao.updateDirectPaymentAndTransactionOnCompletion(transactionModelDao.getId(), currentPaymentState.getName(), chargebackTransaction.getId(), PaymentStatus.SUCCESS,
                                                                  chargebackTransaction.getAmount(), chargebackTransaction.getCurrency(),
                                                                  chargebackTransaction.getGatewayErrorCode(), chargebackTransaction.getGatewayErrorMsg(), internalCallContext);
 
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/PaymentMethodProcessor.java b/payment/src/main/java/org/killbill/billing/payment/core/PaymentMethodProcessor.java
index 409cfd1..fe62885 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/PaymentMethodProcessor.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/PaymentMethodProcessor.java
@@ -125,12 +125,12 @@ public class PaymentMethodProcessor extends ProcessorBase {
         }
     }
 
-    public List<PaymentMethod> getPaymentMethods(final Account account, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final InternalTenantContext context) throws PaymentApiException {
-        return getPaymentMethods(account, withPluginInfo, properties, buildTenantContext(context), context);
+    public List<PaymentMethod> getPaymentMethods(final UUID accountId, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final InternalTenantContext context) throws PaymentApiException {
+        return getPaymentMethods(accountId, withPluginInfo, properties, buildTenantContext(context), context);
     }
 
-    public List<PaymentMethod> getPaymentMethods(final Account account, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final TenantContext tenantContext, final InternalTenantContext context) throws PaymentApiException {
-        final List<PaymentMethodModelDao> paymentMethodModels = paymentDao.getPaymentMethods(account.getId(), context);
+    public List<PaymentMethod> getPaymentMethods(final UUID accountId, final boolean withPluginInfo, final Iterable<PluginProperty> properties, final TenantContext tenantContext, final InternalTenantContext context) throws PaymentApiException {
+        final List<PaymentMethodModelDao> paymentMethodModels = paymentDao.getPaymentMethods(accountId, context);
         if (paymentMethodModels.size() == 0) {
             return Collections.emptyList();
         }
@@ -259,8 +259,8 @@ public class PaymentMethodProcessor extends ProcessorBase {
                                   );
     }
 
-    public PaymentMethod getExternalPaymentMethod(final Account account, final Iterable<PluginProperty> properties, final TenantContext tenantContext, final InternalTenantContext context) throws PaymentApiException {
-        final List<PaymentMethod> paymentMethods = getPaymentMethods(account, false, properties, tenantContext, context);
+    public PaymentMethod getExternalPaymentMethod(final UUID accountId, final Iterable<PluginProperty> properties, final TenantContext tenantContext, final InternalTenantContext context) throws PaymentApiException {
+        final List<PaymentMethod> paymentMethods = getPaymentMethods(accountId, false, properties, tenantContext, context);
         for (final PaymentMethod paymentMethod : paymentMethods) {
             if (ExternalPaymentProviderPlugin.PLUGIN_NAME.equals(paymentMethod.getPluginName())) {
                 return paymentMethod;
@@ -273,7 +273,7 @@ public class PaymentMethodProcessor extends ProcessorBase {
     public UUID createOrGetExternalPaymentMethod(final Account account, final Iterable<PluginProperty> properties, final CallContext callContext, final InternalCallContext context) throws PaymentApiException {
         // Check if this account has already used the external payment plugin
         // If not, it's the first time - add a payment method for it
-        PaymentMethod externalPaymentMethod = getExternalPaymentMethod(account, properties, callContext, context);
+        PaymentMethod externalPaymentMethod = getExternalPaymentMethod(account.getId(), properties, callContext, context);
         if (externalPaymentMethod != null) {
             return externalPaymentMethod.getId();
         }
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/sm/PurchaseOperation.java b/payment/src/main/java/org/killbill/billing/payment/core/sm/PurchaseOperation.java
index 04e0f29..2fe96fc 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/sm/PurchaseOperation.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/sm/PurchaseOperation.java
@@ -39,7 +39,7 @@ public class PurchaseOperation extends DirectPaymentOperation {
     @Override
     protected PaymentTransactionInfoPlugin doPluginOperation() throws PaymentPluginApiException {
         logger.debug("Starting PURCHASE for payment {} ({} {})", directPaymentStateContext.getDirectPaymentId(), directPaymentStateContext.getAmount(), directPaymentStateContext.getCurrency());
-        return plugin.processPayment(directPaymentStateContext.getAccount().getId(),
+        return plugin.purchasePayment(directPaymentStateContext.getAccount().getId(),
                                      directPaymentStateContext.getDirectPaymentId(),
                                      directPaymentStateContext.getTransactionPaymentId(),
                                      directPaymentStateContext.getPaymentMethodId(),
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/sm/RefundOperation.java b/payment/src/main/java/org/killbill/billing/payment/core/sm/RefundOperation.java
index 7d9be71..6161f11 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/sm/RefundOperation.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/sm/RefundOperation.java
@@ -39,9 +39,10 @@ public class RefundOperation extends DirectPaymentOperation {
     @Override
     protected PaymentTransactionInfoPlugin doPluginOperation() throws PaymentPluginApiException {
         logger.debug("Starting REFUND for payment {} ({} {})", directPaymentStateContext.getDirectPaymentId(), directPaymentStateContext.getAmount(), directPaymentStateContext.getCurrency());
-        return plugin.processRefund(directPaymentStateContext.getAccount().getId(),
+        return plugin.refundPayment(directPaymentStateContext.getAccount().getId(),
                                     directPaymentStateContext.getDirectPaymentId(),
                                     directPaymentStateContext.getTransactionPaymentId(),
+                                    directPaymentStateContext.getPaymentMethodId(),
                                     directPaymentStateContext.getAmount(),
                                     directPaymentStateContext.getCurrency(),
                                     directPaymentStateContext.getProperties(),
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/sm/RetryOperationCallback.java b/payment/src/main/java/org/killbill/billing/payment/core/sm/RetryOperationCallback.java
index 7d9bc41..57eaa3d 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/sm/RetryOperationCallback.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/sm/RetryOperationCallback.java
@@ -39,11 +39,11 @@ import org.killbill.billing.payment.api.TransactionType;
 import org.killbill.billing.payment.core.DirectPaymentProcessor;
 import org.killbill.billing.payment.core.ProcessorBase.WithAccountLockCallback;
 import org.killbill.billing.payment.dispatcher.PluginDispatcher;
+import org.killbill.billing.retry.plugin.api.FailureCallResult;
 import org.killbill.billing.retry.plugin.api.PaymentControlApiException;
+import org.killbill.billing.retry.plugin.api.PaymentControlContext;
 import org.killbill.billing.retry.plugin.api.PaymentControlPluginApi;
-import org.killbill.billing.retry.plugin.api.PaymentControlPluginApi.FailureCallResult;
-import org.killbill.billing.retry.plugin.api.PaymentControlPluginApi.PaymentControlContext;
-import org.killbill.billing.retry.plugin.api.PaymentControlPluginApi.PriorPaymentControlResult;
+import org.killbill.billing.retry.plugin.api.PriorPaymentControlResult;
 import org.killbill.billing.util.callcontext.CallContext;
 import org.killbill.commons.locker.GlobalLocker;
 import org.slf4j.Logger;
@@ -83,7 +83,7 @@ public abstract class RetryOperationCallback extends PluginOperation implements 
     private void onCompletion(final String pluginName, final PaymentControlContext paymentControlContext) {
         final PaymentControlPluginApi plugin = paymentControlPluginRegistry.getServiceForName(pluginName);
         try {
-            plugin.onCompletionCall(paymentControlContext);
+            plugin.onSuccessCall(paymentControlContext);
         } catch (PaymentControlApiException e) {
             logger.warn("Plugin " + pluginName + " failed to complete onCompletion call for " + paymentControlContext.getPaymentExternalKey(), e);
         }
@@ -221,8 +221,8 @@ public abstract class RetryOperationCallback extends PluginOperation implements 
         }
 
         @Override
-        public Account getAccount() {
-            return account;
+        public UUID getAccountId() {
+            return account.getId();
         }
 
         @Override
diff --git a/payment/src/main/java/org/killbill/billing/payment/provider/DefaultNoOpPaymentControlProviderPlugin.java b/payment/src/main/java/org/killbill/billing/payment/provider/DefaultNoOpPaymentControlProviderPlugin.java
index 5ea4606..33ddf53 100644
--- a/payment/src/main/java/org/killbill/billing/payment/provider/DefaultNoOpPaymentControlProviderPlugin.java
+++ b/payment/src/main/java/org/killbill/billing/payment/provider/DefaultNoOpPaymentControlProviderPlugin.java
@@ -19,8 +19,11 @@ package org.killbill.billing.payment.provider;
 import org.joda.time.DateTime;
 import org.killbill.billing.payment.retry.DefaultFailureCallResult;
 import org.killbill.billing.payment.retry.DefaultPriorPaymentControlResult;
+import org.killbill.billing.retry.plugin.api.FailureCallResult;
 import org.killbill.billing.retry.plugin.api.PaymentControlApiException;
+import org.killbill.billing.retry.plugin.api.PaymentControlContext;
 import org.killbill.billing.retry.plugin.api.PaymentControlPluginApi;
+import org.killbill.billing.retry.plugin.api.PriorPaymentControlResult;
 
 public class DefaultNoOpPaymentControlProviderPlugin implements PaymentControlPluginApi {
 
@@ -34,7 +37,7 @@ public class DefaultNoOpPaymentControlProviderPlugin implements PaymentControlPl
     }
 
     @Override
-    public void onCompletionCall(final PaymentControlContext paymentControlContext) throws PaymentControlApiException {
+    public void onSuccessCall(final PaymentControlContext paymentControlContext) throws PaymentControlApiException {
     }
 
     @Override
diff --git a/payment/src/main/java/org/killbill/billing/payment/provider/DefaultNoOpPaymentMethodPlugin.java b/payment/src/main/java/org/killbill/billing/payment/provider/DefaultNoOpPaymentMethodPlugin.java
index 3982880..ca5ce3a 100644
--- a/payment/src/main/java/org/killbill/billing/payment/provider/DefaultNoOpPaymentMethodPlugin.java
+++ b/payment/src/main/java/org/killbill/billing/payment/provider/DefaultNoOpPaymentMethodPlugin.java
@@ -83,66 +83,6 @@ public class DefaultNoOpPaymentMethodPlugin implements PaymentMethodPlugin {
     }
 
     @Override
-    public String getType() {
-        return "noop";
-    }
-
-    @Override
-    public String getCCName() {
-        return null;
-    }
-
-    @Override
-    public String getCCType() {
-        return null;
-    }
-
-    @Override
-    public String getCCExpirationMonth() {
-        return null;
-    }
-
-    @Override
-    public String getCCExpirationYear() {
-        return null;
-    }
-
-    @Override
-    public String getCCLast4() {
-        return null;
-    }
-
-    @Override
-    public String getAddress1() {
-        return null;
-    }
-
-    @Override
-    public String getAddress2() {
-        return null;
-    }
-
-    @Override
-    public String getCity() {
-        return null;
-    }
-
-    @Override
-    public String getState() {
-        return null;
-    }
-
-    @Override
-    public String getZip() {
-        return null;
-    }
-
-    @Override
-    public String getCountry() {
-        return null;
-    }
-
-    @Override
     public String toString() {
         final StringBuilder sb = new StringBuilder();
         sb.append("DefaultNoOpPaymentMethodPlugin");
diff --git a/payment/src/main/java/org/killbill/billing/payment/provider/DefaultNoOpPaymentProviderPlugin.java b/payment/src/main/java/org/killbill/billing/payment/provider/DefaultNoOpPaymentProviderPlugin.java
index 427402e..2908799 100644
--- a/payment/src/main/java/org/killbill/billing/payment/provider/DefaultNoOpPaymentProviderPlugin.java
+++ b/payment/src/main/java/org/killbill/billing/payment/provider/DefaultNoOpPaymentProviderPlugin.java
@@ -105,7 +105,7 @@ public class DefaultNoOpPaymentProviderPlugin implements NoOpPaymentPluginApi {
     }
 
     @Override
-    public PaymentTransactionInfoPlugin processPayment(final UUID kbAccountId, final UUID kbPaymentId, final UUID kbTransactionId, final UUID kbPaymentMethodId, final BigDecimal amount, final Currency currency, final Iterable<PluginProperty> properties, final CallContext context) throws PaymentPluginApiException {
+    public PaymentTransactionInfoPlugin purchasePayment(final UUID kbAccountId, final UUID kbPaymentId, final UUID kbTransactionId, final UUID kbPaymentMethodId, final BigDecimal amount, final Currency currency, final Iterable<PluginProperty> properties, final CallContext context) throws PaymentPluginApiException {
         return getInternalNoopPaymentInfoResult(kbPaymentId, kbTransactionId, TransactionType.PURCHASE, amount, currency);
     }
 
@@ -208,13 +208,7 @@ public class DefaultNoOpPaymentProviderPlugin implements NoOpPaymentPluginApi {
         final ImmutableList<PaymentMethodPlugin> allResults = ImmutableList.<PaymentMethodPlugin>copyOf(Iterables.<PaymentMethodPlugin>filter(Iterables.<PaymentMethodPlugin>concat(paymentMethods.values()), new Predicate<PaymentMethodPlugin>() {
             @Override
             public boolean apply(final PaymentMethodPlugin input) {
-                return (input.getAddress1() != null && input.getAddress1().contains(searchKey)) ||
-                       (input.getAddress2() != null && input.getAddress2().contains(searchKey)) ||
-                       (input.getCCLast4() != null && input.getCCLast4().contains(searchKey)) ||
-                       (input.getCCName() != null && input.getCCName().contains(searchKey)) ||
-                       (input.getCity() != null && input.getCity().contains(searchKey)) ||
-                       (input.getState() != null && input.getState().contains(searchKey)) ||
-                       (input.getCountry() != null && input.getCountry().contains(searchKey));
+                return input.getKbPaymentMethodId().toString().equals(searchKey);
             }
         }));
 
@@ -245,7 +239,7 @@ public class DefaultNoOpPaymentProviderPlugin implements NoOpPaymentPluginApi {
     }
 
     @Override
-    public PaymentTransactionInfoPlugin processRefund(final UUID kbAccountId, final UUID kbPaymentId, final UUID kbTransactionId, final BigDecimal refundAmount, final Currency currency, final Iterable<PluginProperty> properties, final CallContext context) throws PaymentPluginApiException {
+    public PaymentTransactionInfoPlugin refundPayment(final UUID kbAccountId, final UUID kbPaymentId, final UUID kbTransactionId, final UUID kbPaymentMethodId, final BigDecimal refundAmount, final Currency currency, final Iterable<PluginProperty> properties, final CallContext context) throws PaymentPluginApiException {
         final List<PaymentTransactionInfoPlugin> transactions = getPaymentInfo(kbAccountId, kbPaymentId, properties, context);
         if (transactions == null || transactions.size() == 0) {
             throw new PaymentPluginApiException("", String.format("No payment found for payment id %s (plugin %s)", kbPaymentId.toString(), PLUGIN_NAME));
diff --git a/payment/src/main/java/org/killbill/billing/payment/provider/DefaultPaymentControlProviderPlugin.java b/payment/src/main/java/org/killbill/billing/payment/provider/DefaultPaymentControlProviderPlugin.java
index d3c973e..575c1e5 100644
--- a/payment/src/main/java/org/killbill/billing/payment/provider/DefaultPaymentControlProviderPlugin.java
+++ b/payment/src/main/java/org/killbill/billing/payment/provider/DefaultPaymentControlProviderPlugin.java
@@ -18,21 +18,23 @@ package org.killbill.billing.payment.provider;
 
 import org.killbill.billing.payment.retry.DefaultFailureCallResult;
 import org.killbill.billing.payment.retry.DefaultPriorPaymentControlResult;
+import org.killbill.billing.retry.plugin.api.FailureCallResult;
 import org.killbill.billing.retry.plugin.api.PaymentControlApiException;
+import org.killbill.billing.retry.plugin.api.PaymentControlContext;
 import org.killbill.billing.retry.plugin.api.PaymentControlPluginApi;
-import org.killbill.billing.retry.plugin.api.UnknownEntryException;
+import org.killbill.billing.retry.plugin.api.PriorPaymentControlResult;
 
 public class DefaultPaymentControlProviderPlugin implements PaymentControlPluginApi {
 
     public static final String PLUGIN_NAME = "__DEFAULT_PAYMENT_CONTROL__";
 
     @Override
-    public PriorPaymentControlResult priorCall(final PaymentControlContext paymentControlContext) throws PaymentControlApiException, UnknownEntryException {
+    public PriorPaymentControlResult priorCall(final PaymentControlContext paymentControlContext) throws PaymentControlApiException {
         return new DefaultPriorPaymentControlResult(false, null);
     }
 
     @Override
-    public void onCompletionCall(final PaymentControlContext paymentControlContext) {
+    public void onSuccessCall(final PaymentControlContext paymentControlContext) {
 
     }
 
diff --git a/payment/src/main/java/org/killbill/billing/payment/provider/ExternalPaymentProviderPlugin.java b/payment/src/main/java/org/killbill/billing/payment/provider/ExternalPaymentProviderPlugin.java
index 10f4cdb..a6167a8 100644
--- a/payment/src/main/java/org/killbill/billing/payment/provider/ExternalPaymentProviderPlugin.java
+++ b/payment/src/main/java/org/killbill/billing/payment/provider/ExternalPaymentProviderPlugin.java
@@ -72,7 +72,7 @@ public class ExternalPaymentProviderPlugin implements PaymentPluginApi {
     }
 
     @Override
-    public PaymentTransactionInfoPlugin processPayment(final UUID kbAccountId, final UUID kbPaymentId, final UUID kbTransactionId, final UUID kbPaymentMethodId, final BigDecimal amount, final Currency currency, final Iterable<PluginProperty> properties, final CallContext context) throws PaymentPluginApiException {
+    public PaymentTransactionInfoPlugin purchasePayment(final UUID kbAccountId, final UUID kbPaymentId, final UUID kbTransactionId, final UUID kbPaymentMethodId, final BigDecimal amount, final Currency currency, final Iterable<PluginProperty> properties, final CallContext context) throws PaymentPluginApiException {
         return new DefaultNoOpPaymentInfoPlugin(kbPaymentId, kbTransactionId, TransactionType.PURCHASE, amount, currency, clock.getUTCNow(), clock.getUTCNow(), PaymentPluginStatus.PROCESSED, null);
     }
 
@@ -88,7 +88,7 @@ public class ExternalPaymentProviderPlugin implements PaymentPluginApi {
 
     @Override
     public List<PaymentTransactionInfoPlugin> getPaymentInfo(final UUID kbAccountId, final UUID kbPaymentId, final Iterable<PluginProperty> properties, final TenantContext context) throws PaymentPluginApiException {
-        // STEPH broken...
+        // TODO broken...
         return ImmutableList.of();
     }
 
@@ -98,7 +98,7 @@ public class ExternalPaymentProviderPlugin implements PaymentPluginApi {
     }
 
     @Override
-    public PaymentTransactionInfoPlugin processRefund(final UUID kbAccountId, final UUID kbPaymentId, final UUID kbTransactionId, final BigDecimal refundAmount, final Currency currency, final Iterable<PluginProperty> properties, final CallContext context) throws PaymentPluginApiException {
+    public PaymentTransactionInfoPlugin refundPayment(final UUID kbAccountId, final UUID kbPaymentId, final UUID kbTransactionId, final UUID kbPaymentMethodId, final BigDecimal refundAmount, final Currency currency, final Iterable<PluginProperty> properties, final CallContext context) throws PaymentPluginApiException {
         return new DefaultNoOpPaymentInfoPlugin(kbPaymentId, kbTransactionId, TransactionType.REFUND, BigDecimal.ZERO, currency, clock.getUTCNow(), clock.getUTCNow(), PaymentPluginStatus.PROCESSED, null);
     }
 
diff --git a/payment/src/main/java/org/killbill/billing/payment/retry/DefaultFailureCallResult.java b/payment/src/main/java/org/killbill/billing/payment/retry/DefaultFailureCallResult.java
index ab03dfa..6fad9f9 100644
--- a/payment/src/main/java/org/killbill/billing/payment/retry/DefaultFailureCallResult.java
+++ b/payment/src/main/java/org/killbill/billing/payment/retry/DefaultFailureCallResult.java
@@ -17,7 +17,7 @@
 package org.killbill.billing.payment.retry;
 
 import org.joda.time.DateTime;
-import org.killbill.billing.retry.plugin.api.PaymentControlPluginApi.FailureCallResult;
+import org.killbill.billing.retry.plugin.api.FailureCallResult;
 
 public class DefaultFailureCallResult implements FailureCallResult {
 
diff --git a/payment/src/main/java/org/killbill/billing/payment/retry/DefaultPriorPaymentControlResult.java b/payment/src/main/java/org/killbill/billing/payment/retry/DefaultPriorPaymentControlResult.java
index 02269d8..dc2e457 100644
--- a/payment/src/main/java/org/killbill/billing/payment/retry/DefaultPriorPaymentControlResult.java
+++ b/payment/src/main/java/org/killbill/billing/payment/retry/DefaultPriorPaymentControlResult.java
@@ -18,7 +18,7 @@ package org.killbill.billing.payment.retry;
 
 import java.math.BigDecimal;
 
-import org.killbill.billing.retry.plugin.api.PaymentControlPluginApi.PriorPaymentControlResult;
+import org.killbill.billing.retry.plugin.api.PriorPaymentControlResult;
 
 public class DefaultPriorPaymentControlResult implements PriorPaymentControlResult {
 
diff --git a/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApi.java b/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApi.java
index 8a487a7..7c1c2ef 100644
--- a/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApi.java
+++ b/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApi.java
@@ -436,11 +436,12 @@ public class TestPaymentApi extends PaymentTestSuiteWithEmbeddedDB {
         final String paymentExternalKey = "couic";
         final String transactionExternalKey = "couac";
         final String transactionExternalKey2 = "couyc";
+        final UUID transactionId = UUID.randomUUID();
 
         final DirectPayment payment = paymentApi.createPurchase(account, account.getPaymentMethodId(), null, requestedAmount, Currency.AED, paymentExternalKey, transactionExternalKey,
                                                                 ImmutableList.<PluginProperty>of(), callContext);
 
-        paymentApi.notifyPaymentPaymentOfChargeback(account, payment.getExternalKey(), transactionExternalKey2, requestedAmount, Currency.AED, callContext);
+        paymentApi.notifyPendingTransactionOfStateChanged(account, transactionId, false, callContext);
         final DirectPayment payment2 = paymentApi.getPayment(payment.getId(), false, ImmutableList.<PluginProperty>of(), callContext);
 
 
diff --git a/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApiNoDB.java b/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApiNoDB.java
index 21e463e..ef42757 100644
--- a/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApiNoDB.java
+++ b/payment/src/test/java/org/killbill/billing/payment/api/TestPaymentApiNoDB.java
@@ -157,37 +157,37 @@ public class TestPaymentApiNoDB extends PaymentTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testPaymentMethods() throws Exception {
-        List<PaymentMethod> methods = paymentApi.getPaymentMethods(account, false, PLUGIN_PROPERTIES, callContext);
+        List<PaymentMethod> methods = paymentApi.getAccountPaymentMethods(account.getId(), false, PLUGIN_PROPERTIES, callContext);
         assertEquals(methods.size(), 1);
 
         final PaymentMethod initDefaultMethod = methods.get(0);
         assertEquals(initDefaultMethod.getId(), account.getPaymentMethodId());
 
         final PaymentMethodPlugin newPaymenrMethod = new DefaultNoOpPaymentMethodPlugin(UUID.randomUUID().toString(), true, null);
-        final UUID newPaymentMethodId = paymentApi.addPaymentMethod(MockPaymentProviderPlugin.PLUGIN_NAME, account, true, newPaymenrMethod, PLUGIN_PROPERTIES, callContext);
+        final UUID newPaymentMethodId = paymentApi.addPaymentMethod(account, MockPaymentProviderPlugin.PLUGIN_NAME, true, newPaymenrMethod, PLUGIN_PROPERTIES, callContext);
         Mockito.when(account.getPaymentMethodId()).thenReturn(newPaymentMethodId);
 
-        methods = paymentApi.getPaymentMethods(account, false, PLUGIN_PROPERTIES, callContext);
+        methods = paymentApi.getAccountPaymentMethods(account.getId(), false, PLUGIN_PROPERTIES, callContext);
         assertEquals(methods.size(), 2);
 
         assertEquals(newPaymentMethodId, account.getPaymentMethodId());
 
         boolean failed = false;
         try {
-            paymentApi.deletedPaymentMethod(account, newPaymentMethodId, false, PLUGIN_PROPERTIES, callContext);
+            paymentApi.deletePaymentMethod(account, newPaymentMethodId, false, PLUGIN_PROPERTIES, callContext);
         } catch (final PaymentApiException e) {
             failed = true;
         }
         assertTrue(failed);
 
-        paymentApi.deletedPaymentMethod(account, initDefaultMethod.getId(), true, PLUGIN_PROPERTIES, callContext);
-        methods = paymentApi.getPaymentMethods(account, false, PLUGIN_PROPERTIES, callContext);
+        paymentApi.deletePaymentMethod(account, initDefaultMethod.getId(), true, PLUGIN_PROPERTIES, callContext);
+        methods = paymentApi.getAccountPaymentMethods(account.getId(), false, PLUGIN_PROPERTIES, callContext);
         assertEquals(methods.size(), 1);
 
         // NOW retry with default payment method with special flag
-        paymentApi.deletedPaymentMethod(account, newPaymentMethodId, true, PLUGIN_PROPERTIES, callContext);
+        paymentApi.deletePaymentMethod(account, newPaymentMethodId, true, PLUGIN_PROPERTIES, callContext);
 
-        methods = paymentApi.getPaymentMethods(account, false, PLUGIN_PROPERTIES, callContext);
+        methods = paymentApi.getAccountPaymentMethods(account.getId(), false, PLUGIN_PROPERTIES, callContext);
         assertEquals(methods.size(), 0);
     }
 }
diff --git a/payment/src/test/java/org/killbill/billing/payment/core/TestPaymentMethodProcessorNoDB.java b/payment/src/test/java/org/killbill/billing/payment/core/TestPaymentMethodProcessorNoDB.java
index b1dc65e..1630d98 100644
--- a/payment/src/test/java/org/killbill/billing/payment/core/TestPaymentMethodProcessorNoDB.java
+++ b/payment/src/test/java/org/killbill/billing/payment/core/TestPaymentMethodProcessorNoDB.java
@@ -42,11 +42,11 @@ public class TestPaymentMethodProcessorNoDB extends PaymentTestSuiteNoDB {
         Mockito.when(account.getId()).thenReturn(accountId);
         Mockito.when(account.getExternalKey()).thenReturn(accountId.toString());
 
-        Assert.assertEquals(paymentMethodProcessor.getPaymentMethods(account, false, properties, internalCallContext).size(), 0);
+        Assert.assertEquals(paymentMethodProcessor.getPaymentMethods(account.getId(), false, properties, internalCallContext).size(), 0);
 
         // The first call should create the payment method
         final ExternalPaymentProviderPlugin providerPlugin = paymentMethodProcessor.createPaymentMethodAndGetExternalPaymentProviderPlugin(account, properties, callContext, internalCallContext);
-        final List<PaymentMethod> paymentMethods = paymentMethodProcessor.getPaymentMethods(account, false, properties, internalCallContext);
+        final List<PaymentMethod> paymentMethods = paymentMethodProcessor.getPaymentMethods(account.getId(), false, properties, internalCallContext);
         Assert.assertEquals(paymentMethods.size(), 1);
         Assert.assertEquals(paymentMethods.get(0).getPluginName(), ExternalPaymentProviderPlugin.PLUGIN_NAME);
         Assert.assertEquals(paymentMethods.get(0).getAccountId(), account.getId());
@@ -57,7 +57,7 @@ public class TestPaymentMethodProcessorNoDB extends PaymentTestSuiteNoDB {
             final ExternalPaymentProviderPlugin foundProviderPlugin = paymentMethodProcessor.createPaymentMethodAndGetExternalPaymentProviderPlugin(account, properties, callContext, internalCallContext);
             Assert.assertNotNull(foundProviderPlugin);
 
-            final List<PaymentMethod> foundPaymentMethods = paymentMethodProcessor.getPaymentMethods(account, false, properties, internalCallContext);
+            final List<PaymentMethod> foundPaymentMethods = paymentMethodProcessor.getPaymentMethods(account.getId(), false, properties, internalCallContext);
             Assert.assertEquals(foundPaymentMethods.size(), 1);
             Assert.assertEquals(foundPaymentMethods.get(0).getPluginName(), ExternalPaymentProviderPlugin.PLUGIN_NAME);
             Assert.assertEquals(foundPaymentMethods.get(0).getAccountId(), account.getId());
diff --git a/payment/src/test/java/org/killbill/billing/payment/core/TestPaymentMethodProcessorRefreshWithDB.java b/payment/src/test/java/org/killbill/billing/payment/core/TestPaymentMethodProcessorRefreshWithDB.java
index 771f29c..eac353c 100644
--- a/payment/src/test/java/org/killbill/billing/payment/core/TestPaymentMethodProcessorRefreshWithDB.java
+++ b/payment/src/test/java/org/killbill/billing/payment/core/TestPaymentMethodProcessorRefreshWithDB.java
@@ -68,14 +68,14 @@ public class TestPaymentMethodProcessorRefreshWithDB extends PaymentTestSuiteWit
         Assert.assertEquals(getPluginApi().getPaymentMethods(account.getId(), true, PLUGIN_PROPERTIES, callContext).size(), 1);
         final UUID firstPmId = account.getPaymentMethodId();
 
-        final UUID secondPmId = paymentApi.addPaymentMethod(MockPaymentProviderPlugin.PLUGIN_NAME, account, true, new DefaultNoOpPaymentMethodPlugin(UUID.randomUUID().toString(), false, null), PLUGIN_PROPERTIES, callContext);
+        final UUID secondPmId = paymentApi.addPaymentMethod(account, MockPaymentProviderPlugin.PLUGIN_NAME, true, new DefaultNoOpPaymentMethodPlugin(UUID.randomUUID().toString(), false, null), PLUGIN_PROPERTIES, callContext);
         Assert.assertEquals(getPluginApi().getPaymentMethods(account.getId(), true, PLUGIN_PROPERTIES, callContext).size(), 2);
-        Assert.assertEquals(paymentApi.getPaymentMethods(account, false, PLUGIN_PROPERTIES, callContext).size(), 2);
+        Assert.assertEquals(paymentApi.getAccountPaymentMethods(account.getId(), false, PLUGIN_PROPERTIES, callContext).size(), 2);
 
         // Remove second PM from plugin
         getPluginApi().deletePaymentMethod(account.getId(), secondPmId, PLUGIN_PROPERTIES, callContext);
         Assert.assertEquals(getPluginApi().getPaymentMethods(account.getId(), true, PLUGIN_PROPERTIES, callContext).size(), 1);
-        Assert.assertEquals(paymentApi.getPaymentMethods(account, false, PLUGIN_PROPERTIES, callContext).size(), 2);
+        Assert.assertEquals(paymentApi.getAccountPaymentMethods(account.getId(), false, PLUGIN_PROPERTIES, callContext).size(), 2);
 
         // Verify that the refresh sees that PM as being deleted now
         final List<PaymentMethod> methods = paymentMethodProcessor.refreshPaymentMethods(MockPaymentProviderPlugin.PLUGIN_NAME, account, PLUGIN_PROPERTIES, callContext, internalCallContext);
diff --git a/payment/src/test/java/org/killbill/billing/payment/provider/MockPaymentControlProviderPlugin.java b/payment/src/test/java/org/killbill/billing/payment/provider/MockPaymentControlProviderPlugin.java
index a5b7cf4..fc0b8a3 100644
--- a/payment/src/test/java/org/killbill/billing/payment/provider/MockPaymentControlProviderPlugin.java
+++ b/payment/src/test/java/org/killbill/billing/payment/provider/MockPaymentControlProviderPlugin.java
@@ -19,9 +19,11 @@ package org.killbill.billing.payment.provider;
 import org.joda.time.DateTime;
 import org.killbill.billing.payment.retry.DefaultFailureCallResult;
 import org.killbill.billing.payment.retry.DefaultPriorPaymentControlResult;
+import org.killbill.billing.retry.plugin.api.FailureCallResult;
 import org.killbill.billing.retry.plugin.api.PaymentControlApiException;
+import org.killbill.billing.retry.plugin.api.PaymentControlContext;
 import org.killbill.billing.retry.plugin.api.PaymentControlPluginApi;
-import org.killbill.billing.retry.plugin.api.UnknownEntryException;
+import org.killbill.billing.retry.plugin.api.PriorPaymentControlResult;
 
 public class MockPaymentControlProviderPlugin implements PaymentControlPluginApi {
 
@@ -41,12 +43,12 @@ public class MockPaymentControlProviderPlugin implements PaymentControlPluginApi
     }
 
     @Override
-    public PriorPaymentControlResult priorCall(final PaymentControlContext paymentControlContext) throws PaymentControlApiException, UnknownEntryException {
+    public PriorPaymentControlResult priorCall(final PaymentControlContext paymentControlContext) throws PaymentControlApiException{
         return new DefaultPriorPaymentControlResult(isAborted, null);
     }
 
     @Override
-    public void onCompletionCall(final PaymentControlContext paymentControlContext) throws PaymentControlApiException {
+    public void onSuccessCall(final PaymentControlContext paymentControlContext) throws PaymentControlApiException {
 
     }
 
diff --git a/payment/src/test/java/org/killbill/billing/payment/provider/MockPaymentProviderPlugin.java b/payment/src/test/java/org/killbill/billing/payment/provider/MockPaymentProviderPlugin.java
index 222ccc0..18c3649 100644
--- a/payment/src/test/java/org/killbill/billing/payment/provider/MockPaymentProviderPlugin.java
+++ b/payment/src/test/java/org/killbill/billing/payment/provider/MockPaymentProviderPlugin.java
@@ -211,7 +211,7 @@ public class MockPaymentProviderPlugin implements NoOpPaymentPluginApi {
     }
 
     @Override
-    public PaymentTransactionInfoPlugin processPayment(final UUID kbAccountId, final UUID kbPaymentId, final UUID kbTransactionId, final UUID kbPaymentMethodId, final BigDecimal amount, final Currency currency, final Iterable<PluginProperty> properties, final CallContext context) throws PaymentPluginApiException {
+    public PaymentTransactionInfoPlugin purchasePayment(final UUID kbAccountId, final UUID kbPaymentId, final UUID kbTransactionId, final UUID kbPaymentMethodId, final BigDecimal amount, final Currency currency, final Iterable<PluginProperty> properties, final CallContext context) throws PaymentPluginApiException {
         return getPaymentTransactionInfoPluginResult(kbPaymentId, kbTransactionId, TransactionType.PURCHASE, amount, currency);
     }
 
@@ -291,13 +291,7 @@ public class MockPaymentProviderPlugin implements NoOpPaymentPluginApi {
         final ImmutableList<PaymentMethodPlugin> results = ImmutableList.<PaymentMethodPlugin>copyOf(Iterables.<PaymentMethodPlugin>filter(paymentMethods.values(), new Predicate<PaymentMethodPlugin>() {
             @Override
             public boolean apply(final PaymentMethodPlugin input) {
-                return (input.getAddress1() != null && input.getAddress1().contains(searchKey)) ||
-                       (input.getAddress2() != null && input.getAddress2().contains(searchKey)) ||
-                       (input.getCCLast4() != null && input.getCCLast4().contains(searchKey)) ||
-                       (input.getCCName() != null && input.getCCName().contains(searchKey)) ||
-                       (input.getCity() != null && input.getCity().contains(searchKey)) ||
-                       (input.getState() != null && input.getState().contains(searchKey)) ||
-                       (input.getCountry() != null && input.getCountry().contains(searchKey));
+                return (input.getKbPaymentMethodId().toString().equals(searchKey));
             }
         }));
         return DefaultPagination.<PaymentMethodPlugin>build(offset, limit, results);
@@ -324,7 +318,7 @@ public class MockPaymentProviderPlugin implements NoOpPaymentPluginApi {
     }
 
     @Override
-    public PaymentTransactionInfoPlugin processRefund(final UUID kbAccountId, final UUID kbPaymentId, final UUID kbTransactionId, final BigDecimal refundAmount, final Currency currency, final Iterable<PluginProperty> properties, final CallContext context) throws PaymentPluginApiException {
+    public PaymentTransactionInfoPlugin refundPayment(final UUID kbAccountId, final UUID kbPaymentId, final UUID kbPaymentMethodId, final UUID kbTransactionId, final BigDecimal refundAmount, final Currency currency, final Iterable<PluginProperty> properties, final CallContext context) throws PaymentPluginApiException {
 
         final InternalPaymentInfo info = payments.get(kbPaymentId.toString());
         if (info == null) {
diff --git a/payment/src/test/java/org/killbill/billing/payment/provider/TestExternalPaymentProviderPlugin.java b/payment/src/test/java/org/killbill/billing/payment/provider/TestExternalPaymentProviderPlugin.java
index 87783cb..65d9791 100644
--- a/payment/src/test/java/org/killbill/billing/payment/provider/TestExternalPaymentProviderPlugin.java
+++ b/payment/src/test/java/org/killbill/billing/payment/provider/TestExternalPaymentProviderPlugin.java
@@ -56,7 +56,7 @@ public class TestExternalPaymentProviderPlugin extends PaymentTestSuiteNoDB {
         final UUID kbTransactionId = UUID.randomUUID();
         final UUID paymentMethodId = UUID.randomUUID();
         final BigDecimal amount = BigDecimal.TEN;
-        final PaymentTransactionInfoPlugin paymentInfoPlugin = plugin.processPayment(accountId, paymentId, kbTransactionId, paymentMethodId, amount, Currency.BRL, properties, callContext);
+        final PaymentTransactionInfoPlugin paymentInfoPlugin = plugin.purchasePayment(accountId, paymentId, kbTransactionId, paymentMethodId, amount, Currency.BRL, properties, callContext);
 
         Assert.assertEquals(paymentInfoPlugin.getAmount(), amount);
         Assert.assertNull(paymentInfoPlugin.getGatewayError());
diff --git a/payment/src/test/java/org/killbill/billing/payment/TestPaymentHelper.java b/payment/src/test/java/org/killbill/billing/payment/TestPaymentHelper.java
index d5e0481..e663cdc 100644
--- a/payment/src/test/java/org/killbill/billing/payment/TestPaymentHelper.java
+++ b/payment/src/test/java/org/killbill/billing/payment/TestPaymentHelper.java
@@ -32,14 +32,10 @@ import org.killbill.billing.invoice.api.InvoiceApiException;
 import org.killbill.billing.invoice.api.InvoiceInternalApi;
 import org.killbill.billing.invoice.api.InvoiceItem;
 import org.killbill.billing.payment.api.DirectPaymentApi;
-import org.killbill.billing.payment.api.PaymentApi;
 import org.killbill.billing.payment.api.PaymentMethodPlugin;
 import org.killbill.billing.payment.api.PluginProperty;
 import org.killbill.billing.payment.provider.DefaultNoOpPaymentMethodPlugin;
 import org.killbill.billing.payment.provider.MockPaymentProviderPlugin;
-import org.killbill.billing.util.cache.Cachable.CacheType;
-import org.killbill.billing.util.cache.CacheController;
-import org.killbill.billing.util.cache.CacheControllerDispatcher;
 import org.killbill.billing.util.callcontext.CallContext;
 import org.killbill.bus.api.PersistentBus;
 import org.killbill.bus.api.PersistentBus.EventBusException;
@@ -134,7 +130,7 @@ public class TestPaymentHelper {
     }
 
     public void addTestPaymentMethod(final Account account, final PaymentMethodPlugin paymentMethodInfo) throws Exception {
-        final UUID paymentMethodId = paymentApi.addPaymentMethod(MockPaymentProviderPlugin.PLUGIN_NAME, account, true, paymentMethodInfo, ImmutableList.<PluginProperty>of(), context);
+        final UUID paymentMethodId = paymentApi.addPaymentMethod(account, MockPaymentProviderPlugin.PLUGIN_NAME, true, paymentMethodInfo, ImmutableList.<PluginProperty>of(), context);
         Mockito.when(account.getPaymentMethodId()).thenReturn(paymentMethodId);
     }
 }
diff --git a/profiles/killbill/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java b/profiles/killbill/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java
index bf23f34..ff726a8 100644
--- a/profiles/killbill/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java
+++ b/profiles/killbill/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java
@@ -31,11 +31,10 @@ import org.killbill.billing.jaxrs.resources.BundleResource;
 import org.killbill.billing.jaxrs.resources.CatalogResource;
 import org.killbill.billing.jaxrs.resources.CustomFieldResource;
 import org.killbill.billing.jaxrs.resources.ExportResource;
+import org.killbill.billing.jaxrs.resources.InvoicePaymentResource;
 import org.killbill.billing.jaxrs.resources.InvoiceResource;
 import org.killbill.billing.jaxrs.resources.PaymentMethodResource;
-import org.killbill.billing.jaxrs.resources.PaymentResource;
 import org.killbill.billing.jaxrs.resources.PluginResource;
-import org.killbill.billing.jaxrs.resources.RefundResource;
 import org.killbill.billing.jaxrs.resources.SubscriptionResource;
 import org.killbill.billing.jaxrs.resources.TagDefinitionResource;
 import org.killbill.billing.jaxrs.resources.TagResource;
@@ -152,10 +151,9 @@ public class KillbillServerModule extends KillbillPlatformModule {
         bind(InvoiceResource.class).asEagerSingleton();
         bind(KillbillEventHandler.class).asEagerSingleton();
         bind(PaymentMethodResource.class).asEagerSingleton();
-        bind(PaymentResource.class).asEagerSingleton();
+        bind(InvoicePaymentResource.class).asEagerSingleton();
         bind(PluginResource.class).asEagerSingleton();
         bind(PluginResource.class).asEagerSingleton();
-        bind(RefundResource.class).asEagerSingleton();
         bind(SubscriptionResource.class).asEagerSingleton();
         bind(TagDefinitionResource.class).asEagerSingleton();
         bind(TagResource.class).asEagerSingleton();
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java
index f7631f2..2cdc2c6 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java
@@ -67,7 +67,7 @@ public class TestEntitlement extends TestJaxrsBase {
         newInput.setProductName(newProductName);
         newInput.setBillingPeriod(entitlementJson.getBillingPeriod());
         newInput.setPriceList(entitlementJson.getPriceList());
-        objFromJson = killBillClient.updateSubscription(newInput, CALL_COMPLETION_TIMEOUT_SEC, createdBy, reason, comment);
+        objFromJson = null; // STEPH  killBillClient.updateSubscription(newInput, CALL_COMPLETION_TIMEOUT_SEC, createdBy, reason, comment);
         Assert.assertNotNull(objFromJson);
 
         // MOVE AFTER TRIAL
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestInvoice.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestInvoice.java
index abbe591..041463c 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestInvoice.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestInvoice.java
@@ -51,7 +51,7 @@ public class TestInvoice extends TestJaxrsBase {
 
         final Account accountJson = createAccountWithPMBundleAndSubscriptionAndWaitForFirstInvoice();
 
-        final List<Invoice> invoices = killBillClient.getInvoicesForAccount(accountJson.getAccountId(), true, AuditLevel.FULL);
+        final List<Invoice> invoices = null; // STEPH killBillClient.getInvoicesForAccount(accountJson.getAccountId(), true, AuditLevel.FULL);
         assertEquals(invoices.size(), 2);
         for (final Invoice invoiceJson : invoices) {
             Assert.assertEquals(invoiceJson.getAuditLogs().size(), 1);
diff --git a/profiles/killpay/src/main/java/org/killbill/billing/server/modules/KillpayServerModule.java b/profiles/killpay/src/main/java/org/killbill/billing/server/modules/KillpayServerModule.java
index 2c4e51d..20d3457 100644
--- a/profiles/killpay/src/main/java/org/killbill/billing/server/modules/KillpayServerModule.java
+++ b/profiles/killpay/src/main/java/org/killbill/billing/server/modules/KillpayServerModule.java
@@ -28,10 +28,9 @@ import org.killbill.billing.invoice.glue.DefaultInvoiceModule;
 import org.killbill.billing.jaxrs.resources.AccountResource;
 import org.killbill.billing.jaxrs.resources.CustomFieldResource;
 import org.killbill.billing.jaxrs.resources.ExportResource;
+import org.killbill.billing.jaxrs.resources.InvoicePaymentResource;
 import org.killbill.billing.jaxrs.resources.PaymentMethodResource;
-import org.killbill.billing.jaxrs.resources.PaymentResource;
 import org.killbill.billing.jaxrs.resources.PluginResource;
-import org.killbill.billing.jaxrs.resources.RefundResource;
 import org.killbill.billing.jaxrs.resources.TagDefinitionResource;
 import org.killbill.billing.jaxrs.resources.TagResource;
 import org.killbill.billing.jaxrs.resources.TenantResource;
@@ -100,10 +99,9 @@ public class KillpayServerModule extends KillbillServerModule {
         bind(ExportResource.class).asEagerSingleton();
         bind(KillbillEventHandler.class).asEagerSingleton();
         bind(PaymentMethodResource.class).asEagerSingleton();
-        bind(PaymentResource.class).asEagerSingleton();
+        bind(InvoicePaymentResource.class).asEagerSingleton();
         bind(PluginResource.class).asEagerSingleton();
         bind(PluginResource.class).asEagerSingleton();
-        bind(RefundResource.class).asEagerSingleton();
         bind(TagDefinitionResource.class).asEagerSingleton();
         bind(TagResource.class).asEagerSingleton();
         bind(TenantResource.class).asEagerSingleton();
diff --git a/util/src/test/java/org/killbill/billing/mock/glue/MockPaymentModule.java b/util/src/test/java/org/killbill/billing/mock/glue/MockPaymentModule.java
index 1175270..645b8db 100644
--- a/util/src/test/java/org/killbill/billing/mock/glue/MockPaymentModule.java
+++ b/util/src/test/java/org/killbill/billing/mock/glue/MockPaymentModule.java
@@ -18,7 +18,7 @@
 
 package org.killbill.billing.mock.glue;
 
-import org.killbill.billing.payment.api.PaymentApi;
+import org.killbill.billing.payment.api.DirectPaymentApi;
 import org.killbill.billing.payment.api.PaymentInternalApi;
 import org.killbill.billing.platform.api.KillbillConfigSource;
 import org.killbill.billing.util.glue.KillBillModule;
@@ -32,7 +32,7 @@ public class MockPaymentModule extends KillBillModule {
 
     @Override
     protected void configure() {
-        bind(PaymentApi.class).toInstance(Mockito.mock(PaymentApi.class));
+        bind(DirectPaymentApi.class).toInstance(Mockito.mock(DirectPaymentApi.class));
         bind(PaymentInternalApi.class).toInstance(Mockito.mock(PaymentInternalApi.class));
     }
 }
diff --git a/util/src/test/java/org/killbill/billing/payment/api/TestPaymentMethodPluginBase.java b/util/src/test/java/org/killbill/billing/payment/api/TestPaymentMethodPluginBase.java
index 4515bb9..37948af 100644
--- a/util/src/test/java/org/killbill/billing/payment/api/TestPaymentMethodPluginBase.java
+++ b/util/src/test/java/org/killbill/billing/payment/api/TestPaymentMethodPluginBase.java
@@ -41,66 +41,6 @@ public class TestPaymentMethodPluginBase implements PaymentMethodPlugin {
     }
 
     @Override
-    public String getType() {
-        return "CreditCard";
-    }
-
-    @Override
-    public String getCCName() {
-        return "Bozo";
-    }
-
-    @Override
-    public String getCCType() {
-        return "Visa";
-    }
-
-    @Override
-    public String getCCExpirationMonth() {
-        return "12";
-    }
-
-    @Override
-    public String getCCExpirationYear() {
-        return "2013";
-    }
-
-    @Override
-    public String getCCLast4() {
-        return "4365";
-    }
-
-    @Override
-    public String getAddress1() {
-        return "34, street Foo";
-    }
-
-    @Override
-    public String getAddress2() {
-        return null;
-    }
-
-    @Override
-    public String getCity() {
-        return "SF";
-    }
-
-    @Override
-    public String getState() {
-        return "CA";
-    }
-
-    @Override
-    public String getZip() {
-        return "95321";
-    }
-
-    @Override
-    public String getCountry() {
-        return "Zimbawe";
-    }
-
-    @Override
     public List<PluginProperty> getProperties() {
         return ImmutableList.<PluginProperty>of();
     }