killbill-aplcache

Changes

Details

diff --git a/account/src/main/java/com/ning/billing/account/api/DefaultChangedField.java b/account/src/main/java/com/ning/billing/account/api/DefaultChangedField.java
index 8501b9f..0b762fd 100644
--- a/account/src/main/java/com/ning/billing/account/api/DefaultChangedField.java
+++ b/account/src/main/java/com/ning/billing/account/api/DefaultChangedField.java
@@ -18,6 +18,8 @@ package com.ning.billing.account.api;
 
 import org.joda.time.DateTime;
 
+import com.ning.billing.util.events.ChangedField;
+
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
diff --git a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java
index 00668f1..39cc93d 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java
@@ -21,7 +21,7 @@ import java.util.List;
 import java.util.UUID;
 
 import com.ning.billing.account.api.Account;
-import com.ning.billing.account.api.ChangedField;
+import com.ning.billing.util.events.ChangedField;
 import com.ning.billing.account.api.DefaultChangedField;
 import com.ning.billing.util.events.AccountChangeInternalEvent;
 import com.ning.billing.util.events.DefaultBusInternalEvent;
diff --git a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
index e192265..bd2c79c 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
@@ -155,11 +155,6 @@ public class DefaultAccountUserApi implements AccountUserApi {
     }
 
     @Override
-    public void saveEmails(final UUID accountId, final List<AccountEmail> newEmails, final CallContext context) {
-        accountEmailDao.saveEmails(accountId, newEmails, internalCallContextFactory.createInternalCallContext(accountId, context));
-    }
-
-    @Override
     public void addEmail(final UUID accountId, final AccountEmail email, final CallContext context) {
         accountEmailDao.addEmail(accountId, email, internalCallContextFactory.createInternalCallContext(accountId, context));
     }
@@ -168,18 +163,4 @@ public class DefaultAccountUserApi implements AccountUserApi {
     public void removeEmail(final UUID accountId, final AccountEmail email, final CallContext context) {
         accountEmailDao.removeEmail(accountId, email, internalCallContextFactory.createInternalCallContext(accountId, context));
     }
-
-    @Override
-    public void removePaymentMethod(final UUID accountId, final CallContext context) throws AccountApiException {
-        updatePaymentMethod(accountId, null, context);
-    }
-
-    @Override
-    public void updatePaymentMethod(final UUID accountId, @Nullable final UUID paymentMethodId, final CallContext context) throws AccountApiException {
-        try {
-            accountDao.updatePaymentMethod(accountId, paymentMethodId, internalCallContextFactory.createInternalCallContext(accountId, context));
-        } catch (EntityPersistenceException e) {
-            throw new AccountApiException(e, e.getCode(), e.getMessage());
-        }
-    }
 }
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountEmailSqlDao.java b/account/src/main/java/com/ning/billing/account/dao/AccountEmailSqlDao.java
index 2f3b02d..d001633 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountEmailSqlDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountEmailSqlDao.java
@@ -26,11 +26,11 @@ import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
 import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
 import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.AccountEmail;
 import com.ning.billing.util.callcontext.InternalTenantContextBinder;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.dao.EntityHistory;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.dao.ObjectTypeBinder;
 import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
 
diff --git a/account/src/main/java/com/ning/billing/account/dao/AuditedAccountDao.java b/account/src/main/java/com/ning/billing/account/dao/AuditedAccountDao.java
index 33da659..b51a4a8 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AuditedAccountDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AuditedAccountDao.java
@@ -31,7 +31,7 @@ import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.user.DefaultAccountChangeEvent;
 import com.ning.billing.account.api.user.DefaultAccountCreationEvent;
-import com.ning.billing.util.ChangeType;
+import com.ning.billing.util.audit.ChangeType;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.InternalTenantContext;
diff --git a/account/src/main/java/com/ning/billing/account/dao/AuditedAccountEmailDao.java b/account/src/main/java/com/ning/billing/account/dao/AuditedAccountEmailDao.java
index c161b31..d807f76 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AuditedAccountEmailDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AuditedAccountEmailDao.java
@@ -27,12 +27,12 @@ import org.skife.jdbi.v2.Transaction;
 import org.skife.jdbi.v2.TransactionStatus;
 import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.AccountEmail;
 import com.ning.billing.account.api.DefaultAccountEmail;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.dao.AuditedCollectionDaoBase;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.dao.TableName;
 import com.ning.billing.util.entity.EntityPersistenceException;
 import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
diff --git a/account/src/test/java/com/ning/billing/account/api/user/TestEventJson.java b/account/src/test/java/com/ning/billing/account/api/user/TestEventJson.java
index d5c4207..8dd87bb 100644
--- a/account/src/test/java/com/ning/billing/account/api/user/TestEventJson.java
+++ b/account/src/test/java/com/ning/billing/account/api/user/TestEventJson.java
@@ -24,7 +24,7 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.ning.billing.account.AccountTestSuite;
-import com.ning.billing.account.api.ChangedField;
+import com.ning.billing.util.events.ChangedField;
 import com.ning.billing.account.api.DefaultBillCycleDay;
 import com.ning.billing.account.api.DefaultChangedField;
 import com.ning.billing.account.api.user.DefaultAccountCreationEvent.DefaultAccountData;
diff --git a/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java b/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java
index 0b9f8e7..0a6b546 100644
--- a/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java
+++ b/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java
@@ -26,6 +26,7 @@ import org.skife.jdbi.v2.Handle;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.AccountData;
@@ -43,7 +44,6 @@ import com.ning.billing.util.customfield.CustomField;
 import com.ning.billing.util.customfield.StringCustomField;
 import com.ning.billing.util.customfield.dao.AuditedCustomFieldDao;
 import com.ning.billing.util.customfield.dao.CustomFieldDao;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.entity.EntityPersistenceException;
 import com.ning.billing.util.tag.DefaultTagDefinition;
 import com.ning.billing.util.tag.Tag;
diff --git a/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java b/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java
index 7830dab..cc434c9 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java
@@ -31,6 +31,7 @@ import javax.inject.Inject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.analytics.BusinessAccountDao;
 import com.ning.billing.analytics.BusinessInvoiceDao;
@@ -64,14 +65,13 @@ import com.ning.billing.analytics.model.BusinessSubscriptionTransitionModelDao;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.junction.api.Blockable.Type;
 import com.ning.billing.payment.api.Payment;
-import com.ning.billing.payment.api.PaymentApi;
 import com.ning.billing.payment.api.PaymentApiException;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.svcapi.payment.PaymentInternalApi;
 import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
 import com.ning.billing.util.svcapi.tag.TagInternalApi;
 import com.ning.billing.util.tag.Tag;
@@ -94,7 +94,7 @@ public class DefaultAnalyticsUserApi implements AnalyticsUserApi {
     private final BusinessInvoicePaymentDao bipDao;
     private final BusinessTagDao tagDao;
     private final EntitlementInternalApi entitlementInternalApi;
-    private final PaymentApi paymentApi;
+    private final PaymentInternalApi paymentApi;
     private final TagInternalApi tagInternalApi;
     private final InternalCallContextFactory internalCallContextFactory;
 
@@ -107,7 +107,7 @@ public class DefaultAnalyticsUserApi implements AnalyticsUserApi {
                                    final BusinessInvoicePaymentDao bipDao,
                                    final BusinessTagDao tagDao,
                                    final EntitlementInternalApi entitlementInternalApi,
-                                   final PaymentApi paymentApi,
+                                   final PaymentInternalApi paymentApi,
                                    final TagInternalApi tagInternalApi,
                                    final InternalCallContextFactory internalCallContextFactory) {
         this.analyticsDao = analyticsDao;
@@ -247,7 +247,7 @@ public class DefaultAnalyticsUserApi implements AnalyticsUserApi {
 
         // Update BIP for all invoices
         try {
-            updateBIP(account, context, internalCallContext);
+            updateBIP(account, internalCallContext);
         } catch (PaymentApiException e) {
             // Log and ignore
             log.warn(e.toString());
@@ -302,8 +302,8 @@ public class DefaultAnalyticsUserApi implements AnalyticsUserApi {
         return bundlesId;
     }
 
-    private void updateBIP(final Account account, final TenantContext tenantContext, final InternalCallContext internalCallContext) throws PaymentApiException {
-        final List<Payment> accountPayments = paymentApi.getAccountPayments(account.getId(), tenantContext);
+    private void updateBIP(final Account account, final InternalCallContext internalCallContext) throws PaymentApiException {
+        final List<Payment> accountPayments = paymentApi.getAccountPayments(account.getId(), internalCallContext);
         final Map<UUID, Payment> payments = new HashMap<UUID, Payment>();
         for (final Payment payment : accountPayments) {
             payments.put(payment.getId(), payment);
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessAccountDao.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessAccountDao.java
index f041e0c..cc8fcf7 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessAccountDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessAccountDao.java
@@ -34,12 +34,12 @@ import com.ning.billing.analytics.dao.BusinessAccountSqlDao;
 import com.ning.billing.analytics.model.BusinessAccountModelDao;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.payment.api.Payment;
-import com.ning.billing.payment.api.PaymentApi;
 import com.ning.billing.payment.api.PaymentApiException;
 import com.ning.billing.payment.api.PaymentMethod;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.payment.PaymentInternalApi;
 import com.ning.billing.util.svcapi.invoice.InvoiceInternalApi;
 
 import com.google.inject.Inject;
@@ -51,11 +51,11 @@ public class BusinessAccountDao {
     private final BusinessAccountSqlDao sqlDao;
     private final AccountInternalApi accountApi;
     private final InvoiceInternalApi invoiceApi;
-    private final PaymentApi paymentApi;
+    private final PaymentInternalApi paymentApi;
 
     @Inject
     public BusinessAccountDao(final BusinessAccountSqlDao sqlDao, final AccountInternalApi accountApi,
-                              final InvoiceInternalApi invoiceApi, final PaymentApi paymentApi) {
+                              final InvoiceInternalApi invoiceApi, final PaymentInternalApi paymentApi) {
         this.sqlDao = sqlDao;
         this.accountApi = accountApi;
         this.invoiceApi = invoiceApi;
@@ -115,7 +115,7 @@ public class BusinessAccountDao {
                 // Retrieve payments information for these invoices
                 DateTime lastPaymentDate = null;
 
-                final List<Payment> payments = paymentApi.getAccountPayments(account.getId(), context.toTenantContext());
+                final List<Payment> payments = paymentApi.getAccountPayments(account.getId(), context);
                 if (payments != null) {
                     for (final Payment cur : payments) {
                         // Use the last payment method/type/country as the default one for the account
@@ -128,7 +128,7 @@ public class BusinessAccountDao {
             }
 
             // Retrieve payment methods
-            for (final PaymentMethod paymentMethod : paymentApi.getPaymentMethods(account, true, context.toTenantContext())) {
+            for (final PaymentMethod paymentMethod : paymentApi.getPaymentMethods(account, true, context)) {
                 if (paymentMethod.getId().equals(account.getPaymentMethodId()) && paymentMethod.getPluginDetail() != null) {
                     paymentMethodType = PaymentMethodUtils.getPaymentMethodType(paymentMethod.getPluginDetail());
                     creditCardType = PaymentMethodUtils.getCardType(paymentMethod.getPluginDetail());
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentDao.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentDao.java
index 5eb2bc0..3592502 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoicePaymentDao.java
@@ -37,15 +37,14 @@ import com.ning.billing.analytics.model.BusinessInvoicePaymentModelDao;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceApiException;
 import com.ning.billing.invoice.api.InvoicePayment;
-import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.payment.api.Payment;
-import com.ning.billing.payment.api.PaymentApi;
 import com.ning.billing.payment.api.PaymentApiException;
 import com.ning.billing.payment.api.PaymentMethod;
 import com.ning.billing.payment.api.PaymentMethodPlugin;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.payment.PaymentInternalApi;
 import com.ning.billing.util.svcapi.invoice.InvoiceInternalApi;
 
 public class BusinessInvoicePaymentDao {
@@ -54,20 +53,18 @@ public class BusinessInvoicePaymentDao {
 
     private final BusinessInvoicePaymentSqlDao invoicePaymentSqlDao;
     private final AccountInternalApi accountApi;
-    private final InvoicePaymentApi invoicePaymentApi;
     private final InvoiceInternalApi invoiceApi;
-    private final PaymentApi paymentApi;
+    private final PaymentInternalApi paymentApi;
     private final Clock clock;
     private final BusinessInvoiceDao invoiceDao;
     private final BusinessAccountDao accountDao;
 
     @Inject
     public BusinessInvoicePaymentDao(final BusinessInvoicePaymentSqlDao invoicePaymentSqlDao, final AccountInternalApi accountApi,
-                                     final InvoicePaymentApi invoicePaymentApi, final InvoiceInternalApi invoiceApi, final PaymentApi paymentApi,
+                                     final InvoiceInternalApi invoiceApi, final PaymentInternalApi paymentApi,
                                      final Clock clock, final BusinessInvoiceDao invoiceDao, final BusinessAccountDao accountDao) {
         this.invoicePaymentSqlDao = invoicePaymentSqlDao;
         this.accountApi = accountApi;
-        this.invoicePaymentApi = invoicePaymentApi;
         this.invoiceApi = invoiceApi;
         this.paymentApi = paymentApi;
         this.clock = clock;
@@ -92,7 +89,7 @@ public class BusinessInvoicePaymentDao {
 
         final Payment payment;
         try {
-            payment = paymentApi.getPayment(paymentId, context.toCallContext());
+            payment = paymentApi.getPayment(paymentId, context);
         } catch (PaymentApiException e) {
             log.warn("Ignoring payment {}: payment does not exist", paymentId);
             return;
@@ -100,20 +97,22 @@ public class BusinessInvoicePaymentDao {
 
         final PaymentMethod paymentMethod;
         try {
-            paymentMethod = paymentApi.getPaymentMethod(account, payment.getPaymentMethodId(), true, context.toCallContext());
+            paymentMethod = paymentApi.getPaymentMethod(account, payment.getPaymentMethodId(), true, context);
         } catch (PaymentApiException e) {
             log.warn("Ignoring payment {}: payment method {} does not exist", paymentId, payment.getPaymentMethodId());
             return;
         }
 
-        final InvoicePayment invoicePayment = invoicePaymentApi.getInvoicePaymentForAttempt(paymentId, context.toCallContext());
         Invoice invoice = null;
-        if (invoicePayment != null) {
-            try {
+        InvoicePayment invoicePayment = null;
+        try {
+            invoicePayment = invoiceApi.getInvoicePaymentForAttempt(paymentId, context);
+            if (invoicePayment != null) {
                 invoice = invoiceApi.getInvoiceById(invoicePayment.getInvoiceId(), context);
-            } catch (InvoiceApiException e) {
-                log.warn("Unable to find invoice {} for payment {}", invoicePayment.getInvoiceId(), paymentId);
             }
+        } catch (InvoiceApiException e) {
+            log.warn("Unable to find invoice {} for payment {}",
+                     invoicePayment != null ? invoicePayment.getInvoiceId() : "unknown", paymentId);
         }
 
         createPayment(account, invoice, invoicePayment, payment, paymentMethod, extFirstPaymentRefId, extSecondPaymentRefId, message, context);
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessTagDao.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessTagDao.java
index 32ee506..dd83f5b 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessTagDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessTagDao.java
@@ -23,6 +23,7 @@ import javax.inject.Inject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.analytics.dao.BusinessAccountTagSqlDao;
@@ -32,7 +33,6 @@ import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionTagSqlDao;
 import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.util.callcontext.InternalCallContext;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
 
diff --git a/analytics/src/test/java/com/ning/billing/analytics/api/user/TestDefaultAnalyticsUserApi.java b/analytics/src/test/java/com/ning/billing/analytics/api/user/TestDefaultAnalyticsUserApi.java
index 0dad057..998e67a 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/api/user/TestDefaultAnalyticsUserApi.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/api/user/TestDefaultAnalyticsUserApi.java
@@ -65,6 +65,7 @@ import com.ning.billing.util.callcontext.TenantContext;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.clock.ClockMock;
 import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
+import com.ning.billing.util.svcapi.payment.PaymentInternalApi;
 import com.ning.billing.util.svcapi.tag.TagInternalApi;
 
 public class TestDefaultAnalyticsUserApi extends AnalyticsTestSuiteWithEmbeddedDB {
@@ -102,7 +103,7 @@ public class TestDefaultAnalyticsUserApi extends AnalyticsTestSuiteWithEmbeddedD
                                                        Mockito.mock(BusinessInvoicePaymentDao.class),
                                                        Mockito.mock(BusinessTagDao.class),
                                                        Mockito.mock(EntitlementInternalApi.class),
-                                                       Mockito.mock(PaymentApi.class),
+                                                       Mockito.mock(PaymentInternalApi.class),
                                                        Mockito.mock(TagInternalApi.class),
                                                        new InternalCallContextFactory(dbi, clock));
     }
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java
index 239e4fb..7e2d9cf 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java
@@ -25,6 +25,7 @@ import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.account.api.svcs.DefaultAccountInternalApi;
@@ -41,7 +42,7 @@ import com.ning.billing.catalog.DefaultCatalogService;
 import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.catalog.io.VersionedCatalogLoader;
-import com.ning.billing.config.CatalogConfig;
+import com.ning.billing.util.config.CatalogConfig;
 import com.ning.billing.entitlement.alignment.PlanAligner;
 import com.ning.billing.entitlement.api.svcs.DefaultEntitlementInternalApi;
 import com.ning.billing.entitlement.api.user.DefaultEntitlementUserApi;
@@ -58,7 +59,6 @@ import com.ning.billing.util.callcontext.DefaultCallContextFactory;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.clock.ClockMock;
 import com.ning.billing.util.clock.DefaultClock;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.notificationq.DefaultNotificationQueueService;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
diff --git a/api/src/main/java/com/ning/billing/account/api/Account.java b/api/src/main/java/com/ning/billing/account/api/Account.java
index 86dc8f5..7a9b8f9 100644
--- a/api/src/main/java/com/ning/billing/account/api/Account.java
+++ b/api/src/main/java/com/ning/billing/account/api/Account.java
@@ -19,9 +19,31 @@ package com.ning.billing.account.api;
 import com.ning.billing.junction.api.Blockable;
 import com.ning.billing.util.entity.UpdatableEntity;
 
+/**
+ * The interface <code>Account</code> represents an account within Killbill.
+ * <p>
+ * An <code>Account</code> has a unique UUID and also an externalKey that it set when it is created.
+ * The billCycleDay can be specified when creating the account, or it will be set automatically
+ * by the system.
+ *
+ * @see com.ning.billing.account.api.AccountData
+ */
 
 public interface Account extends AccountData, UpdatableEntity, Blockable {
+
+    /**
+     *
+     * @return the mutable account data
+     */
     public MutableAccountData toMutableAccountData();
 
+    /**
+     * The current account object will have its fields updated with those of the deleted account.
+     * <p>
+     * Some fields cannot be updated when they already have a value:
+     *
+     * @param delegate the input account used to update the fields
+     * @return         the new account
+     */
     public Account mergeWithDelegate(final Account delegate);
 }
diff --git a/api/src/main/java/com/ning/billing/account/api/AccountData.java b/api/src/main/java/com/ning/billing/account/api/AccountData.java
index 6816c4f..9a6cbeb 100644
--- a/api/src/main/java/com/ning/billing/account/api/AccountData.java
+++ b/api/src/main/java/com/ning/billing/account/api/AccountData.java
@@ -22,42 +22,131 @@ import org.joda.time.DateTimeZone;
 
 import com.ning.billing.catalog.api.Currency;
 
+/**
+ * The interface <code>AccountData</code> specifies all the fields on the <code>Account</code>.
+ *
+ */
 public interface AccountData {
+
+    /**
+     *
+     * @return  the account externalKey
+     */
     public String getExternalKey();
 
+    /**
+     * The first and last name when that applies are combined into one name.
+     *
+     * @return  the name of the account
+     * @see     AccountData#getFirstNameLength()
+     */
     public String getName();
 
+    /**
+     * @return  the length of the first name that can be extracted from the name
+     */
     public Integer getFirstNameLength();
 
+    /**
+     *
+     * @return  the primary accunt email
+     */
     public String getEmail();
 
+    /**
+     *
+     * The billCycleDay should be interpreted in the account timezone.
+     * The billCycleDay is used to determine when to bill an account
+     * <p>
+     * Its is either set at account creation time or automatically set by the system.
+     *
+     * @return  the billCycleDay for that account
+     *
+     * @see  com.ning.billing.catalog.api.BillingAlignment
+     */
     public BillCycleDay getBillCycleDay();
 
+    /**
+     *
+     * @return  the currency on the account
+     */
     public Currency getCurrency();
 
+    /**
+     *
+     * @return  the UUID of the current default paymentMethod
+     */
     public UUID getPaymentMethodId();
 
+    /**
+     *
+     * @return  the timezone for that account
+     */
     public DateTimeZone getTimeZone();
 
+    /**
+     *
+     * @return  the locale for that account
+     */
     public String getLocale();
 
+    /**
+     *
+     * @return  the address for that account (first line)
+     */
     public String getAddress1();
 
+    /**
+     *
+     * @return  the address for that account (second line)
+     */
     public String getAddress2();
 
+    /**
+     *
+     * @return  the company for that account
+     */
     public String getCompanyName();
 
+    /**
+     *
+     * @return  the city for that account
+     */
     public String getCity();
 
+    /**
+     *
+     * @return  the state or province for that account
+     */
     public String getStateOrProvince();
 
+    /**
+     *
+     * @return  the postal code for that account
+     */
     public String getPostalCode();
 
+    /**
+     *
+     * @return  the country for that account
+     */
     public String getCountry();
 
+    /**
+     *
+     * @return  the phone number for that account
+     */
     public String getPhone();
 
+    /**
+     *
+     * @return  whether or not that account was migrated into the system
+     */
     public Boolean isMigrated();
 
+    /**
+     *
+     * @return  whether or not that account will receive invoice notifications
+     */
     public Boolean isNotifiedForInvoices();
 }
diff --git a/api/src/main/java/com/ning/billing/account/api/AccountEmail.java b/api/src/main/java/com/ning/billing/account/api/AccountEmail.java
index a1b535f..5ac42af 100644
--- a/api/src/main/java/com/ning/billing/account/api/AccountEmail.java
+++ b/api/src/main/java/com/ning/billing/account/api/AccountEmail.java
@@ -21,7 +21,16 @@ import java.util.UUID;
 import com.ning.billing.util.entity.UpdatableEntity;
 
 public interface AccountEmail extends UpdatableEntity {
+
+    /**
+     *
+     * @return  the accountId for this email
+     */
     UUID getAccountId();
 
+    /**
+     *
+     * @return  the email body
+     */
     String getEmail();
 }
diff --git a/api/src/main/java/com/ning/billing/account/api/AccountService.java b/api/src/main/java/com/ning/billing/account/api/AccountService.java
index febe8dd..f03bed2 100644
--- a/api/src/main/java/com/ning/billing/account/api/AccountService.java
+++ b/api/src/main/java/com/ning/billing/account/api/AccountService.java
@@ -18,6 +18,11 @@ package com.ning.billing.account.api;
 
 import com.ning.billing.lifecycle.KillbillService;
 
+/**
+ * The interface {@code AccountService} is a {@code KillbillService} required to handle account operations
+ *
+ * @see KillbillService
+ */
 public interface AccountService extends KillbillService {
 
 }
diff --git a/api/src/main/java/com/ning/billing/account/api/AccountUserApi.java b/api/src/main/java/com/ning/billing/account/api/AccountUserApi.java
index e0914a5..da18c28 100644
--- a/api/src/main/java/com/ning/billing/account/api/AccountUserApi.java
+++ b/api/src/main/java/com/ning/billing/account/api/AccountUserApi.java
@@ -22,42 +22,122 @@ import java.util.UUID;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TenantContext;
 
+/**
+ * The interface {@code AccountUserApi} offers APIs related to account operations.
+ */
 public interface AccountUserApi {
 
+    /**
+     *
+     * @param data      the account data
+     * @param context   the user context
+     * @return          the created Account
+     *
+     * @throws AccountApiException
+     */
     public Account createAccount(AccountData data, CallContext context) throws AccountApiException;
 
+    /**
+     *
+     * @param data      the account data
+     * @param context   the user context
+     * @return          the migrated account
+     *
+     * @throws AccountApiException
+     */
     public Account migrateAccount(MigrationAccountData data, CallContext context) throws AccountApiException;
 
     /**
-     * Note: does not update the external key
+     * Updates the account by specifying the destination {@code Account} object
+     * <p>
      *
      * @param account account to be updated
      * @param context contains specific information about the call
+     *
      * @throws AccountApiException if a failure occurs
      */
     public void updateAccount(Account account, CallContext context) throws AccountApiException;
 
+    /**
+     * Updates the account by specifying the {@code AccountData} object
+     * <p>
+     *
+     * @param key account external key
+     * @param context contains specific information about the call
+     *
+     * @throws AccountApiException if a failure occurs
+     */
     public void updateAccount(String key, AccountData accountData, CallContext context) throws AccountApiException;
 
+    /**
+     * Updates the account by specifying the {@code AccountData} object
+     * <p>
+     *
+     * @param accountId account unique id
+     * @param context contains specific information about the call
+     *
+     * @throws AccountApiException if a failure occurs
+     */
     public void updateAccount(UUID accountId, AccountData accountData, CallContext context) throws AccountApiException;
 
-    public void removePaymentMethod(UUID accountId, CallContext context) throws AccountApiException;
-
-    public void updatePaymentMethod(UUID accountId, UUID paymentMethodId, CallContext context) throws AccountApiException;
-
+    /**
+     *
+     * @param key       the externalKey for the account
+     * @param context   the user context
+     * @return          the account
+     *
+     * @throws AccountApiException if there is no such account
+     */
     public Account getAccountByKey(String key, TenantContext context) throws AccountApiException;
 
+    /**
+     *
+     * @param accountId the unique id for the account
+     * @param context   the user context
+     * @return          the account
+     *
+     * @throws AccountApiException if there is no such account
+     */
     public Account getAccountById(UUID accountId, TenantContext context) throws AccountApiException;
 
+    /**
+     *
+     * @param context   the user context
+     * @return          the list of accounts for that tenant
+     */
     public List<Account> getAccounts(TenantContext context);
 
+    /**
+     *
+     * @param externalKey   the externalKey for the account
+     * @param context       the user context
+     * @return              the unique id for that account
+     *
+     * @throws AccountApiException  if there is no such account
+     */
     public UUID getIdFromKey(String externalKey, TenantContext context) throws AccountApiException;
 
+    /**
+     *
+     * @param accountId the account unique id
+     * @param context   the user context
+     * @return          the laist of emails configured for that account
+     */
     public List<AccountEmail> getEmails(UUID accountId, TenantContext context);
 
-    public void saveEmails(UUID accountId, List<AccountEmail> emails, CallContext context);
-
+    /**
+     *
+     * @param accountId the account unique id
+     * @param email     the email to be added
+     * @param context   the user context
+     */
     public void addEmail(UUID accountId, AccountEmail email, CallContext context);
 
+    /**
+     *
+     * @param accountId the account unique id
+     * @param email     the email to be removed
+     * @param context   the user context
+     */
     public void removeEmail(UUID accountId, AccountEmail email, CallContext context);
 }
diff --git a/api/src/main/java/com/ning/billing/account/api/BillCycleDay.java b/api/src/main/java/com/ning/billing/account/api/BillCycleDay.java
index 1fc203d..014bc0b 100644
--- a/api/src/main/java/com/ning/billing/account/api/BillCycleDay.java
+++ b/api/src/main/java/com/ning/billing/account/api/BillCycleDay.java
@@ -16,6 +16,9 @@
 
 package com.ning.billing.account.api;
 
+/**
+ * The interface {@code BillCycleDay} represents the default account billing date
+ */
 public interface BillCycleDay {
 
     int getDayOfMonthUTC();
diff --git a/api/src/main/java/com/ning/billing/account/api/MigrationAccountData.java b/api/src/main/java/com/ning/billing/account/api/MigrationAccountData.java
index 1b00586..275c612 100644
--- a/api/src/main/java/com/ning/billing/account/api/MigrationAccountData.java
+++ b/api/src/main/java/com/ning/billing/account/api/MigrationAccountData.java
@@ -20,8 +20,15 @@ import java.util.List;
 
 import org.joda.time.DateTime;
 
+/**
+ * The interface {@code MigrationAccountData}
+ */
 public interface MigrationAccountData extends AccountData {
 
+    /**
+     *
+     * @return the createdDate for
+     */
     public DateTime getCreatedDate();
 
     public DateTime getUpdatedDate();
diff --git a/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java b/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java
index b1716ec..e2560c3 100644
--- a/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java
+++ b/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java
@@ -22,43 +22,141 @@ import org.joda.time.DateTimeZone;
 
 import com.ning.billing.catalog.api.Currency;
 
+/**
+ * The interface {@code MutableAccountData} is used to set the  {@code AccountData} fields individually and pass them as the whole
+ * to the {@code AccountUserApi}.
+ *
+ */
 public interface MutableAccountData extends AccountData {
+
+    /**
+     * Sets the account external Key
+     *
+     * @param externalKey
+     */
     public void setExternalKey(String externalKey);
 
+    /**
+     * Sets the default account email
+     *
+     * @param email
+     */
     public void setEmail(String email);
 
+    /**
+     * Sets the account name
+     *
+     * @param name
+     */
     public void setName(String name);
 
+    /**
+     * Sets the length for the first name-- if applicable
+     *
+     * @param firstNameLength
+     */
     public void setFirstNameLength(int firstNameLength);
 
+    /**
+     * Sets the account currency
+     *
+     * @param currency
+     */
     public void setCurrency(Currency currency);
 
+    /**
+     * Sets the account billCycleDay
+     *
+     * @param billCycleDay
+     */
     public void setBillCycleDay(BillCycleDay billCycleDay);
 
+    /**
+     * Sets the UUID of the default paymentMethod
+     *
+     * @param paymentMethodId
+     */
     public void setPaymentMethodId(UUID paymentMethodId);
 
+    /**
+     * Sets the account timezone
+     *
+     * @param timeZone
+     */
     public void setTimeZone(DateTimeZone timeZone);
 
+    /**
+     * Sets the account locale
+     *
+     * @param locale
+     */
     public void setLocale(String locale);
 
+    /**
+     * Sets the account address (first line)
+     * @param address1
+     */
     public void setAddress1(String address1);
 
+    /**
+     * Sets the account address (second line)
+     * @param address2
+     */
     public void setAddress2(String address2);
 
+    /**
+     * Sets the account company name
+     *
+     * @param companyName
+     */
     public void setCompanyName(String companyName);
 
+    /**
+     * Sets the account city
+     *
+     * @param city
+     */
     public void setCity(String city);
 
+    /**
+     * Sets the account state or province
+     *
+     * @param stateOrProvince
+     */
     public void setStateOrProvince(String stateOrProvince);
 
+    /**
+     * Sets the account country
+     *
+     * @param country
+     */
     public void setCountry(String country);
 
+    /**
+     * Sets the account postalCode
+     *
+     * @param postalCode
+     */
     public void setPostalCode(String postalCode);
 
+    /**
+     * Sets the account phone number
+     *
+     * @param phone
+     */
     public void setPhone(String phone);
 
+    /**
+     * Sets whether the account has been migrated or not
+     *
+     * @param isMigrated
+     */
     public void setIsMigrated(boolean isMigrated);
 
+    /**
+     * Sets whether or not the account should receive notification on future invoices
+     * @param isNotifiedForInvoices
+     */
     public void setIsNotifiedForInvoices(boolean isNotifiedForInvoices);
 
 }
diff --git a/api/src/main/java/com/ning/billing/analytics/api/AnalyticsService.java b/api/src/main/java/com/ning/billing/analytics/api/AnalyticsService.java
index 23d31be..82c8346 100644
--- a/api/src/main/java/com/ning/billing/analytics/api/AnalyticsService.java
+++ b/api/src/main/java/com/ning/billing/analytics/api/AnalyticsService.java
@@ -18,5 +18,8 @@ package com.ning.billing.analytics.api;
 
 import com.ning.billing.lifecycle.KillbillService;
 
+/**
+ * The interface {@code AnalyticsService} is a {@code KillbillService} required to handle analytics operations.
+ */
 public interface AnalyticsService extends KillbillService {
 }
diff --git a/api/src/main/java/com/ning/billing/analytics/api/user/AnalyticsUserApi.java b/api/src/main/java/com/ning/billing/analytics/api/user/AnalyticsUserApi.java
index 8d4dcbe..42e2484 100644
--- a/api/src/main/java/com/ning/billing/analytics/api/user/AnalyticsUserApi.java
+++ b/api/src/main/java/com/ning/billing/analytics/api/user/AnalyticsUserApi.java
@@ -30,6 +30,9 @@ import com.ning.billing.analytics.api.TimeSeriesData;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TenantContext;
 
+/**
+ * The interface {@code AnalyticsUserApi} is used to retrieve analytics information on a pre tenant basis
+ */
 public interface AnalyticsUserApi {
 
     public BusinessSnapshot getBusinessSnapshot(Account account, TenantContext context);
@@ -59,7 +62,9 @@ public interface AnalyticsUserApi {
     public TimeSeriesData getSubscriptionsCreatedOverTime(String productType, String slug, TenantContext context);
 
     /**
-     * Rebuild all analytics tables for an account
+     * Rebuild all analytics tables for an account based on the Killbill row tables
+     * <p>
+     * This endpoint should only be used when those tables are not in sync due (bugs?)
      *
      * @param account account
      * @param context call context
diff --git a/api/src/main/java/com/ning/billing/beatrix/bus/api/BeatrixService.java b/api/src/main/java/com/ning/billing/beatrix/bus/api/BeatrixService.java
index d8b5dfa..2d47066 100644
--- a/api/src/main/java/com/ning/billing/beatrix/bus/api/BeatrixService.java
+++ b/api/src/main/java/com/ning/billing/beatrix/bus/api/BeatrixService.java
@@ -17,6 +17,9 @@ package com.ning.billing.beatrix.bus.api;
 
 import com.ning.billing.lifecycle.KillbillService;
 
+/**
+ * The interface {@code BeatrixService} is a {@code KillbillService} required to manage the {@code ExternalBus}
+ *
+ */
 public interface BeatrixService extends KillbillService {
-
 }
diff --git a/api/src/main/java/com/ning/billing/beatrix/bus/api/ExtBusEvent.java b/api/src/main/java/com/ning/billing/beatrix/bus/api/ExtBusEvent.java
index 6318b28..2804dbd 100644
--- a/api/src/main/java/com/ning/billing/beatrix/bus/api/ExtBusEvent.java
+++ b/api/src/main/java/com/ning/billing/beatrix/bus/api/ExtBusEvent.java
@@ -17,21 +17,41 @@ package com.ning.billing.beatrix.bus.api;
 
 import java.util.UUID;
 
-import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.ObjectType;
 
+/**
+ * The interface {@code ExtBusEvent} represents the event type that is published for Killbill users.
+ */
 public interface ExtBusEvent {
 
+    /**
+     *
+     * @return the {@code ExtBusEventType}
+     */
     public ExtBusEventType getEventType();
 
+    /**
+     *
+     * @return the {@code ObjectType}
+     */
     public ObjectType getObjectType();
 
+    /**
+     *
+     * @return the unique id for the object that was created/modified
+     */
     public UUID getObjectId();
 
+    /**
+     *
+     * @return the unique id for the account associated woth that object
+     */
     public UUID getAccountId();
 
+
     public UUID getTenantId();
 
-    /*
+/*
     public UUID getUserToken();
-     */
+    */
 }
diff --git a/api/src/main/java/com/ning/billing/beatrix/bus/api/ExtBusEventType.java b/api/src/main/java/com/ning/billing/beatrix/bus/api/ExtBusEventType.java
index 037cbd5..53358e1 100644
--- a/api/src/main/java/com/ning/billing/beatrix/bus/api/ExtBusEventType.java
+++ b/api/src/main/java/com/ning/billing/beatrix/bus/api/ExtBusEventType.java
@@ -15,6 +15,9 @@
  */
 package com.ning.billing.beatrix.bus.api;
 
+/**
+ * The enum {@code ExtBusEventType} rerpesents the user visible bus event types.
+ */
 public enum ExtBusEventType {
     ACCOUNT_CREATION,
     ACCOUNT_CHANGE,
diff --git a/api/src/main/java/com/ning/billing/beatrix/bus/api/ExternalBus.java b/api/src/main/java/com/ning/billing/beatrix/bus/api/ExternalBus.java
index 7e5b814..10b2887 100644
--- a/api/src/main/java/com/ning/billing/beatrix/bus/api/ExternalBus.java
+++ b/api/src/main/java/com/ning/billing/beatrix/bus/api/ExternalBus.java
@@ -16,9 +16,23 @@
 package com.ning.billing.beatrix.bus.api;
 
 
+/**
+ * The interface {@code ExternalBus} represents the bus on which Killbill users can register handlers
+ * to receive notifications when change happen in the system
+ */
 public interface ExternalBus {
 
+    /**
+     * Registers a callback.
+     *
+     * @param handlerInstance the handler that will be called back by the system when something changed
+     */
     public void register(final Object handlerInstance); /* throws EventBusException */
 
+    /**
+     * Unregister a callback.
+     *
+     * @param handlerInstance the handler that was previously registered
+     */
     public void unregister(final Object handlerInstance); /* throws EventBusException */
 }
diff --git a/api/src/main/java/com/ning/billing/BillingExceptionBase.java b/api/src/main/java/com/ning/billing/BillingExceptionBase.java
index 251773a..44c922f 100644
--- a/api/src/main/java/com/ning/billing/BillingExceptionBase.java
+++ b/api/src/main/java/com/ning/billing/BillingExceptionBase.java
@@ -22,6 +22,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class BillingExceptionBase extends Exception {
+
     private static final Logger log = LoggerFactory.getLogger(BillingExceptionBase.class);
 
     private static final long serialVersionUID = 165720101383L;
diff --git a/api/src/main/java/com/ning/billing/catalog/api/ActionPolicy.java b/api/src/main/java/com/ning/billing/catalog/api/ActionPolicy.java
index 831a3f2..5dbe51b 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/ActionPolicy.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/ActionPolicy.java
@@ -16,8 +16,19 @@
 
 package com.ning.billing.catalog.api;
 
+/**
+ * Specifies how {@code Subscription} cancellation or plan change should operate
+ * <p>
+ */
 public enum ActionPolicy {
-    END_OF_TERM, // transition occurs at end of term
-    IMMEDIATE,   // transition occurs immediately
-    ILLEGAL      // transition is not allowed
+    /**
+     * The cancellation or {@code Plan} change effectiveDate will occur at the end of the current invoiced service
+     * period, and that will not trigger any proration and credit.
+     */
+    END_OF_TERM,
+    /**
+     * The cancellation or {@code Plan} change effectiveDate will occur at the requestedDate
+     */
+    IMMEDIATE,
+    ILLEGAL
 }
diff --git a/api/src/main/java/com/ning/billing/catalog/api/BillingAlignment.java b/api/src/main/java/com/ning/billing/catalog/api/BillingAlignment.java
index a774936..7ac463b 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/BillingAlignment.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/BillingAlignment.java
@@ -16,8 +16,33 @@
 
 package com.ning.billing.catalog.api;
 
+/**
+ * The various <code>BillingAlignement<code/> supported in Killbill.
+ * <p>
+ * The <code>Catalog</code> will define the billing alignement for each <code>Plan</code>
+ *
+ * @see com.ning.billing.catalog.api.Plan
+ * @see com.ning.billing.catalog.api.PlanPhase
+ * @see com.ning.billing.catalog.api.ProductCategory
+ */
 public enum BillingAlignment {
+    /**
+     * All {@code Subscription}s whose {@code Plan} has been configured with this alignment will
+     * be invoiced using the {@code Account} billCycleDay.
+     */
     ACCOUNT,
+
+    /**
+     * All {@code Subscription}s whose {@code Plan} has been configured with this alignment will
+     * be invoiced using the startDate of the first billable {@code PlanPhase} for the {@code ProductCategory.BASE}
+     * {@code Plan}.
+     */
     BUNDLE,
+
+    /**
+     * All {@code Subscription}s whose {@code Plan} has been configured with this alignment will
+     * be invoiced using the startDate of the first billable {@code PlanPhase} for the
+     * {@code Subscription}.
+     */
     SUBSCRIPTION
 }
diff --git a/api/src/main/java/com/ning/billing/catalog/api/BillingPeriod.java b/api/src/main/java/com/ning/billing/catalog/api/BillingPeriod.java
index 6ab91ed..a0e8011 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/BillingPeriod.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/BillingPeriod.java
@@ -16,12 +16,13 @@
 
 package com.ning.billing.catalog.api;
 
+/**
+ * The {@code BillingPeriod} supported in the system
+ */
 public enum BillingPeriod {
     MONTHLY(1),
     QUARTERLY(3),
-    //SEMI_ANNUAL(6), ** not yet supported
     ANNUAL(12),
-    //BI_ANNUAL(24); ** not yet supported
     NO_BILLING_PERIOD(0);
 
     private final int numberOfMonths;
diff --git a/api/src/main/java/com/ning/billing/catalog/api/Catalog.java b/api/src/main/java/com/ning/billing/catalog/api/Catalog.java
index af96414..f6fd855 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/Catalog.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/Catalog.java
@@ -18,66 +18,140 @@ package com.ning.billing.catalog.api;
 
 import org.joda.time.DateTime;
 
+/**
+ * The {@code Catalog} information for a specific tenant.
+ *
+ */
 public interface Catalog {
-    //
-    // Simple getters
-    //
-    public abstract String getCatalogName();
-
-    public abstract Currency[] getSupportedCurrencies(DateTime requestedDate) throws CatalogApiException;
-
-    public abstract Product[] getProducts(DateTime requestedDate) throws CatalogApiException;
-
-    public abstract Plan[] getPlans(DateTime requestedDate) throws CatalogApiException;
 
-
-    //
-    // Find a plan
-    //
-
-    public abstract Plan findPlan(String name, DateTime requestedDate) throws CatalogApiException;
-
-    public abstract Plan findPlan(String productName, BillingPeriod term, String priceListName,
+    /**
+     *
+     * @return  the catalogName
+     */
+    public String getCatalogName();
+
+    /**
+     *
+     * @param requestedDate specifies the state of the catalog for that date
+     * @return              an array of available {@code Currency}s
+     *
+     * @throws CatalogApiException
+     */
+    public Currency[] getSupportedCurrencies(DateTime requestedDate) throws CatalogApiException;
+
+    /**
+     *
+     * @param requestedDate specifies the state of the catalog for that date
+     * @return              an array of available {@code Product}s
+     *
+     * @throws CatalogApiException
+     */
+    public Product[] getProducts(DateTime requestedDate) throws CatalogApiException;
+
+    /**
+     *
+     * @param requestedDate specifies the state of the catalog for that date
+     * @return              an array of available {@code Plan}s
+     * @throws CatalogApiException
+     */
+    public Plan[] getPlans(DateTime requestedDate) throws CatalogApiException;
+
+    /**
+     *
+     * @param name          the unique name of the plan
+     * @param requestedDate specifies the state of the catalog for that date
+     * @return              the {@code Plan}
+     *
+     * @throws CatalogApiException if {@code Plan} does not exist
+     */
+    public Plan findPlan(String name, DateTime requestedDate) throws CatalogApiException;
+
+    /**
+     *
+     * @param productName   the unique name for the {@code Product}
+     * @param billingPeriod the unique name for the {@code BillingPeriod}
+     * @param priceListName the unique name for the {@code PriceList}
+     * @param requestedDate specifies the state of the catalog for that date
+     * @return              the {@code Plan}
+     *
+     * @throws CatalogApiException if {@code Plan} does not exist
+     */
+    public Plan findPlan(String productName, BillingPeriod billingPeriod, String priceListName,
                                   DateTime requestedDate) throws CatalogApiException;
 
-    public abstract Plan findPlan(String name, DateTime effectiveDate, DateTime subscriptionStartDate) throws CatalogApiException;
-
-    public abstract Plan findPlan(String productName, BillingPeriod term, String priceListName,
+    /**
+     *
+     * @param name                  the unique name of the plan
+     * @param requestedDate         specifies the state of the catalog for that date
+     * @param subscriptionStartDate the startDate of the subscription
+     * @return                      the {@code Plan}
+     *
+     * @throws CatalogApiException if {@code Plan} does not exist
+     */
+    public Plan findPlan(String name, DateTime requestedDate, DateTime subscriptionStartDate) throws CatalogApiException;
+
+    /**
+     *
+     * @param productName   the unique name for the {@code Product}
+     * @param billingPeriod the unique name for the {@code BillingPeriod}
+     * @param priceListName the unique name for the {@code PriceList}
+     * @param requestedDate specifies the state of the catalog for that date
+     * @return              the {@code Plan}
+     *
+     * @throws CatalogApiException if {@code Plan} does not exist
+     */
+    public Plan findPlan(String productName, BillingPeriod billingPeriod, String priceListName,
                                   DateTime requestedDate, DateTime subscriptionStartDate) throws CatalogApiException;
 
-    //
-    // Find a product
-    //
-    public abstract Product findProduct(String name, DateTime requestedDate) throws CatalogApiException;
-
-    //
-    // Find a phase
-    //  
-    public abstract PlanPhase findPhase(String name, DateTime requestedDate, DateTime subscriptionStartDate) throws CatalogApiException;
-
-    //
-    // Find a priceList
-    //  
-    public abstract PriceList findPriceList(String name, DateTime requestedDate) throws CatalogApiException;
-
-    //
-    // Rules
-    //
-    public abstract ActionPolicy planChangePolicy(PlanPhaseSpecifier from,
+    /**
+     *
+     * @param name          the unique name for the {@code Product}
+     * @param requestedDate specifies the state of the catalog for that date
+     * @return              the {@code Product}
+     *
+     * @throws CatalogApiException if {@code Product} does not exist
+     */
+    public Product findProduct(String name, DateTime requestedDate) throws CatalogApiException;
+
+    /**
+     *
+     * @param name          the unique name for the {@code PlanPhase}
+     * @param requestedDate specifies the state of the catalog for that date
+     * @return              the {@code PlanPhase}
+     *
+     * @throws CatalogApiException if the {@code PlanPhase} does not exist
+     */
+    public PriceList findPriceList(String name, DateTime requestedDate) throws CatalogApiException;
+
+
+    /**
+     *
+     * @param name                  the unique name for the {@code PlanPhase}
+     * @param requestedDate         specifies the state of the catalog for that date
+     * @param subscriptionStartDate the startDate of the subscription
+     * @return                      the {@code PlanPhase}
+     * @throws CatalogApiException if the {@code PlanPhase} does not exist
+     */
+    public PlanPhase findPhase(String name, DateTime requestedDate, DateTime subscriptionStartDate) throws CatalogApiException;
+
+
+    // TODO : should they be private APIs
+
+    public ActionPolicy planChangePolicy(PlanPhaseSpecifier from,
                                                   PlanSpecifier to, DateTime requestedDate) throws CatalogApiException;
 
-    public abstract PlanChangeResult planChange(PlanPhaseSpecifier from,
+    public PlanChangeResult planChange(PlanPhaseSpecifier from,
                                                 PlanSpecifier to, DateTime requestedDate) throws CatalogApiException;
 
-    public abstract ActionPolicy planCancelPolicy(PlanPhaseSpecifier planPhase, DateTime requestedDate) throws CatalogApiException;
+    public ActionPolicy planCancelPolicy(PlanPhaseSpecifier planPhase, DateTime requestedDate) throws CatalogApiException;
 
-    public abstract PlanAlignmentCreate planCreateAlignment(PlanSpecifier specifier, DateTime requestedDate) throws CatalogApiException;
+    public PlanAlignmentCreate planCreateAlignment(PlanSpecifier specifier, DateTime requestedDate) throws CatalogApiException;
 
-    public abstract BillingAlignment billingAlignment(PlanPhaseSpecifier planPhase, DateTime requestedDate) throws CatalogApiException;
+    public BillingAlignment billingAlignment(PlanPhaseSpecifier planPhase, DateTime requestedDate) throws CatalogApiException;
 
-    public abstract PlanAlignmentChange planChangeAlignment(PlanPhaseSpecifier from,
+    public PlanAlignmentChange planChangeAlignment(PlanPhaseSpecifier from,
                                                             PlanSpecifier to, DateTime requestedDate) throws CatalogApiException;
 
-    public abstract boolean canCreatePlan(PlanSpecifier specifier, DateTime requestedDate) throws CatalogApiException;
+    public boolean canCreatePlan(PlanSpecifier specifier, DateTime requestedDate) throws CatalogApiException;
 
 }
diff --git a/api/src/main/java/com/ning/billing/catalog/api/CatalogService.java b/api/src/main/java/com/ning/billing/catalog/api/CatalogService.java
index 6b7b673..541d7e0 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/CatalogService.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/CatalogService.java
@@ -18,6 +18,10 @@ package com.ning.billing.catalog.api;
 
 import com.ning.billing.lifecycle.KillbillService;
 
+
+/**
+ * The interface {@code CatalogService} is a {@code KillbillService} required to handle catalog operations.
+ */
 public interface CatalogService extends KillbillService {
 
     public abstract Catalog getFullCatalog();
diff --git a/api/src/main/java/com/ning/billing/catalog/api/CatalogUserApi.java b/api/src/main/java/com/ning/billing/catalog/api/CatalogUserApi.java
index e7c9cb9..6225e84 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/CatalogUserApi.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/CatalogUserApi.java
@@ -18,7 +18,16 @@ package com.ning.billing.catalog.api;
 
 import com.ning.billing.util.callcontext.TenantContext;
 
+/**
+ * The interface {@code CatalogUserApi} to retrieve catalog information
+ */
 public interface CatalogUserApi {
 
+    /**
+     *
+     * @param catalogName   the name of the catalog
+     * @param context       the user context that specifies the enant information
+     * @return              the {@code Catalog}
+     */
     Catalog getCatalog(String catalogName, TenantContext context);
 }
diff --git a/api/src/main/java/com/ning/billing/catalog/api/Duration.java b/api/src/main/java/com/ning/billing/catalog/api/Duration.java
index fe1b01a..ad9ae26 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/Duration.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/Duration.java
@@ -21,10 +21,23 @@ import org.joda.time.Period;
 
 public interface Duration {
 
-    public abstract TimeUnit getUnit();
+    /**
+     *
+     * @return the {@code TimeUnit}
+     */
+    public TimeUnit getUnit();
 
-    public abstract int getNumber();
+    /**
+     *
+     * @return the number of units
+     */
+    public int getNumber();
 
+    /**
+     *
+     * @param dateTime  the date to add to that duration
+     * @return          the joda {@code Period}
+     */
     public DateTime addToDateTime(DateTime dateTime);
 
     public Period toJodaPeriod();
diff --git a/api/src/main/java/com/ning/billing/catalog/api/InternationalPrice.java b/api/src/main/java/com/ning/billing/catalog/api/InternationalPrice.java
index 7f8ffef..266cc97 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/InternationalPrice.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/InternationalPrice.java
@@ -19,12 +19,31 @@ package com.ning.billing.catalog.api;
 import java.math.BigDecimal;
 
 
+/**
+ * The interface {@code InternationalPrice} allows to associate a set of prices in different currencies to
+ * a given object.
+ */
 public interface InternationalPrice {
 
+    /**
+     *
+     * @return an array of {@code Price} in the various currencies
+     */
     public abstract Price[] getPrices();
 
+    /**
+     *
+     * @param currency  the currency
+     * @return          the price associated with that currency
+     *
+     * @throws CatalogApiException if there is no entry
+     */
     public abstract BigDecimal getPrice(Currency currency) throws CatalogApiException;
 
+    /**
+     *
+     * @return whether this is a zero price
+     */
     public abstract boolean isZero();
 
 }
diff --git a/api/src/main/java/com/ning/billing/catalog/api/Listing.java b/api/src/main/java/com/ning/billing/catalog/api/Listing.java
index 69ac8b5..3c07299 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/Listing.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/Listing.java
@@ -18,7 +18,15 @@ package com.ning.billing.catalog.api;
 
 public interface Listing {
 
+    /**
+     *
+     * @return the {@code Plan}
+     */
     Plan getPlan();
 
+    /**
+     *
+     * @return the {@code PriceList}
+     */
     PriceList getPriceList();
 }
diff --git a/api/src/main/java/com/ning/billing/catalog/api/MigrationPlan.java b/api/src/main/java/com/ning/billing/catalog/api/MigrationPlan.java
index cdb0433..7ae53a8 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/MigrationPlan.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/MigrationPlan.java
@@ -17,6 +17,7 @@
 package com.ning.billing.catalog.api;
 
 public interface MigrationPlan extends Plan {
+
     public static final String MIGRATION_PLAN_NAME = "__KILLBILL_MIGRATION_PLAN__";
     public static final String MIGRATION_PLAN_PHASE_NAME = "__KILLBILL_MIGRATION_PLAN_PHASE__";
 }
diff --git a/api/src/main/java/com/ning/billing/catalog/api/OverdueActions.java b/api/src/main/java/com/ning/billing/catalog/api/OverdueActions.java
index d73db06..e9b937d 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/OverdueActions.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/OverdueActions.java
@@ -16,6 +16,9 @@
 
 package com.ning.billing.catalog.api;
 
+/**
+ * The enum {@code OverdueActions} specifies the policies that should be taken when a specific object becomes overdue
+ */
 public enum OverdueActions {
     CANCEL,
     PAYMENT_RETRY
diff --git a/api/src/main/java/com/ning/billing/catalog/api/Plan.java b/api/src/main/java/com/ning/billing/catalog/api/Plan.java
index 551a9e1..1116401 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/Plan.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/Plan.java
@@ -21,30 +21,86 @@ import java.util.Iterator;
 
 import org.joda.time.DateTime;
 
+/**
+ * The interface {@code Plan}
+ */
 public interface Plan {
 
-    public abstract PlanPhase[] getInitialPhases();
-
-    public abstract Product getProduct();
-
-    public abstract String getName();
-
-    public abstract boolean isRetired();
-
-    public abstract Iterator<PlanPhase> getInitialPhaseIterator();
-
-    public abstract PlanPhase getFinalPhase();
-
-    public abstract BillingPeriod getBillingPeriod();
-
-    public abstract int getPlansAllowedInBundle();
-
-    public abstract PlanPhase[] getAllPhases();
-
-    public abstract Date getEffectiveDateForExistingSubscriptons();
-
-    public abstract PlanPhase findPhase(String name) throws CatalogApiException;
-
-    public abstract DateTime dateOfFirstRecurringNonZeroCharge(DateTime subscriptionStartDate, PhaseType intialPhaseType);
+    /**
+     * 
+     * @return an array of {@code PlanPhase}
+     */
+    public PlanPhase[] getInitialPhases();
+
+    /**
+     *
+     * @return the {@code Product} associated with that {@code Plan}
+     */
+    public Product getProduct();
+
+    /**
+     *
+     * @return the name of the {@code Plan}
+     */
+    public String getName();
+
+    /**
+     *
+     * @return whether the {@code Plan} has been retired
+     */
+    public boolean isRetired();
+
+    /**
+     *
+     * @return an iterator through the {@code PlanPhase}
+     */
+    public Iterator<PlanPhase> getInitialPhaseIterator();
+
+    /**
+     *
+     * @return the final {@code PlanPhase}
+     */
+    public PlanPhase getFinalPhase();
+
+    /**
+     *
+     * @return the {@code BillingPeriod}
+     */
+    public BillingPeriod getBillingPeriod();
+
+    /**
+     *
+     * @return the number of instance of subscriptions in a bundle with that {@code Plan}
+     */
+    public int getPlansAllowedInBundle();
+
+    /**
+     *
+     * @return an array of {@code PlanPhase}
+     */
+    public PlanPhase[] getAllPhases();
+
+    /**
+     *
+     * @return the date for which existing subscriptions become effective with that {@code Plan}
+     */
+    public Date getEffectiveDateForExistingSubscriptons();
+
+    /**
+     *
+     * @param name  the name of the {@code PlanPhase}
+     * @return      the {@code PlanPhase}
+     *
+     * @throws CatalogApiException if there is not such {@code PlanPhase}
+     */
+    public PlanPhase findPhase(String name) throws CatalogApiException;
+
+    /**
+     *
+     * @param subscriptionStartDate the subscriptionStartDate
+     * @param intialPhaseType       the type of the initial phase
+     * @return                      the date at which we see the first recurring non zero charge
+     */
+    public DateTime dateOfFirstRecurringNonZeroCharge(DateTime subscriptionStartDate, PhaseType intialPhaseType);
 
 }
diff --git a/api/src/main/java/com/ning/billing/catalog/api/PlanAlignmentCreate.java b/api/src/main/java/com/ning/billing/catalog/api/PlanAlignmentCreate.java
index 5f4a851..33944b5 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/PlanAlignmentCreate.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/PlanAlignmentCreate.java
@@ -16,6 +16,11 @@
 
 package com.ning.billing.catalog.api;
 
+// TODO private?
+
+/**
+ * The available alignments for the entitlement system
+ */
 public enum PlanAlignmentCreate {
     START_OF_BUNDLE,
     START_OF_SUBSCRIPTION,
diff --git a/api/src/main/java/com/ning/billing/catalog/api/PlanPhase.java b/api/src/main/java/com/ning/billing/catalog/api/PlanPhase.java
index fa43433..6b9082e 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/PlanPhase.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/PlanPhase.java
@@ -17,21 +17,52 @@
 package com.ning.billing.catalog.api;
 
 
+/**
+ * The interface {@code PlanPhase} is used to express the various phases available on a given {@code Plan}
+ * 
+ * @see com.ning.billing.catalog.api.Plan
+  */
 public interface PlanPhase {
 
-    public abstract InternationalPrice getRecurringPrice();
+    /**
+     *
+     * @return the recurring {@code InternationalPrice} for that {@code Phase} if defined
+     */
+    public InternationalPrice getRecurringPrice();
 
-    public abstract InternationalPrice getFixedPrice();
+    /**
+     *
+     * @return the fixed {@code InternationalPrice} for that {@code Phase} if defined
+     */
+    public InternationalPrice getFixedPrice();
 
-    public abstract BillingPeriod getBillingPeriod();
+    /**
+     *
+     * @return the {@code BillingPeriod}
+     */
+    public BillingPeriod getBillingPeriod();
 
-    public abstract String getName();
+    /**
+     *
+     * @return the unique name for that {@code Phase}
+     */
+    public String getName();
 
-    public abstract Plan getPlan();
-
-    public abstract Duration getDuration();
-
-    public abstract PhaseType getPhaseType();
+    /**
+     *
+     * @return the parent {@code Plan}
+     */
+    public Plan getPlan();
 
+    /**
+     *
+     * @return the duration of that {@code PlanPhase}
+     */
+    public Duration getDuration();
 
+    /**
+     *
+     * @return  the {@code PhaseType}
+     */
+    public PhaseType getPhaseType();
 }
diff --git a/api/src/main/java/com/ning/billing/catalog/api/PlanPhaseSpecifier.java b/api/src/main/java/com/ning/billing/catalog/api/PlanPhaseSpecifier.java
index d737426..9206720 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/PlanPhaseSpecifier.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/PlanPhaseSpecifier.java
@@ -16,6 +16,11 @@
 
 package com.ning.billing.catalog.api;
 
+// TODO should be interface ?
+
+/**
+ * The class {@code PlanPhaseSpecifier} specifies the attributes of a {@code PlanPhase}
+ */
 public class PlanPhaseSpecifier {
 
     private final PhaseType phaseType;
@@ -33,26 +38,50 @@ public class PlanPhaseSpecifier {
         this.priceListName = priceListName;
     }
 
+    /**
+     *
+     * @return the {@code Product} name
+     */
     public String getProductName() {
         return productName;
     }
 
+    /**
+     *
+     * @return the {@code ProductCategory}
+     */
     public ProductCategory getProductCategory() {
         return productCategory;
     }
 
+    /**
+     *
+     * @return the {@code BillingPeriod}
+     */
     public BillingPeriod getBillingPeriod() {
         return billingPeriod;
     }
 
+    /**
+     *
+     * @return the name of the {@code PriceList}
+     */
     public String getPriceListName() {
         return priceListName;
     }
 
+    /**
+     *
+     * @return the {@code PhaseType}
+     */
     public PhaseType getPhaseType() {
         return phaseType;
     }
 
+    /**
+     *
+     * @return the {@code PlanSpecifier}
+     */
     public PlanSpecifier toPlanSpecifier() {
         return new PlanSpecifier(productName, productCategory, billingPeriod, priceListName);
     }
diff --git a/api/src/main/java/com/ning/billing/catalog/api/PlanSpecifier.java b/api/src/main/java/com/ning/billing/catalog/api/PlanSpecifier.java
index bc88ae6..a1dce56 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/PlanSpecifier.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/PlanSpecifier.java
@@ -16,7 +16,13 @@
 
 package com.ning.billing.catalog.api;
 
+// TODO should be interface?
+
+/**
+ * The class {@code PlanSpecifier} specifies the attributes of a {@code Plan}
+ */
 public class PlanSpecifier {
+
     private final String productName;
     private final ProductCategory productCategory;
     private final BillingPeriod billingPeriod;
@@ -39,18 +45,34 @@ public class PlanSpecifier {
         this.priceListName = planPhase.getPriceListName();
     }
 
+    /**
+     *
+     * @return the name of the product
+     */
     public String getProductName() {
         return productName;
     }
 
+    /**
+     *
+     * @return the {@code ProductCategory}
+     */
     public ProductCategory getProductCategory() {
         return productCategory;
     }
 
+    /**
+     *
+     * @return the {@code BillingPeriod}
+     */
     public BillingPeriod getBillingPeriod() {
         return billingPeriod;
     }
 
+    /**
+     *
+     * @return the name of the {@code PriceList}
+     */
     public String getPriceListName() {
         return priceListName;
     }
diff --git a/api/src/main/java/com/ning/billing/catalog/api/Price.java b/api/src/main/java/com/ning/billing/catalog/api/Price.java
index a98275a..213b533 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/Price.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/Price.java
@@ -21,8 +21,18 @@ import java.math.BigDecimal;
 
 public interface Price {
 
-    public abstract Currency getCurrency();
+    /**
+     *
+     * @return the {@code Currency}
+     */
+    public Currency getCurrency();
 
-    public abstract BigDecimal getValue() throws CurrencyValueNull;
+    /**
+     *
+     * @return the price amount
+     *
+     * @throws CurrencyValueNull
+     */
+    public BigDecimal getValue() throws CurrencyValueNull;
 
 }
diff --git a/api/src/main/java/com/ning/billing/catalog/api/PriceListSet.java b/api/src/main/java/com/ning/billing/catalog/api/PriceListSet.java
index 5e78044..5e0565d 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/PriceListSet.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/PriceListSet.java
@@ -20,6 +20,13 @@ public interface PriceListSet {
 
     public static final String DEFAULT_PRICELIST_NAME = "DEFAULT";
 
-    public abstract Plan getPlanListFrom(String priceListName, Product product, BillingPeriod period);
+    /**
+     *
+     * @param priceListName the name of the {@code PriceList}
+     * @param product       the {@code Product}
+     * @param period        the {@code BillingPeriod}
+     * @return              the {@code Plan}
+     */
+    public Plan getPlanListFrom(String priceListName, Product product, BillingPeriod period);
 
 }
diff --git a/api/src/main/java/com/ning/billing/catalog/api/Product.java b/api/src/main/java/com/ning/billing/catalog/api/Product.java
index cb08271..21f1502 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/Product.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/Product.java
@@ -16,20 +16,46 @@
 
 package com.ning.billing.catalog.api;
 
-
+/**
+ * The interface {@code Product}
+ */
 public interface Product {
 
-    public abstract String getName();
-
-    public abstract boolean isRetired();
-
-    public abstract Product[] getAvailable();
-
-    public abstract Product[] getIncluded();
-
-    public abstract ProductCategory getCategory();
-
-    public abstract String getCatalogName();
+    /**
+     * 
+     * @return the name of the {@code Product}
+     */
+    public String getName();
+
+    /**
+     * 
+     * @return whether this {@code Product} has been retired
+     */
+    public boolean isRetired();
+
+    /**
+     * 
+     * @return an array of other {@code Product} that can be purchased with that one
+     */
+    public Product[] getAvailable();
+
+    /**
+     * 
+     * @return an array of other {@code Product} that are already included within this one
+     */
+    public Product[] getIncluded();
+
+    /**
+     * 
+     * @return the {@code ProductCategory} associated with that {@code Product}
+     */
+    public ProductCategory getCategory();
+
+    /**
+     * 
+     * @return the name of tha catalog where this {@code Product} has been defined
+     */
+    public String getCatalogName();
 
 
 }
diff --git a/api/src/main/java/com/ning/billing/catalog/api/StaticCatalog.java b/api/src/main/java/com/ning/billing/catalog/api/StaticCatalog.java
index 8f2fbcf..9ce760b 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/StaticCatalog.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/StaticCatalog.java
@@ -20,64 +20,122 @@ import java.util.Date;
 import java.util.List;
 
 
+/**
+ * The interface {@code StaticCatalog} gives the view of that {@code Catalog} at a given time.
+ * This represents a specific version of the {@code Catalog}
+ */
 public interface StaticCatalog {
-    //
-    // Simple getters
-    //
-    public abstract String getCatalogName();
-
-    public abstract Date getEffectiveDate() throws CatalogApiException;
-
-    public abstract Currency[] getCurrentSupportedCurrencies() throws CatalogApiException;
-
-    public abstract Product[] getCurrentProducts() throws CatalogApiException;
-
-    public abstract Plan[] getCurrentPlans() throws CatalogApiException;
-
-    //
-    // Find a plan
-    //
-    public abstract Plan findCurrentPlan(String productName, BillingPeriod term, String priceList) throws CatalogApiException;
 
-    public abstract Plan findCurrentPlan(String name) throws CatalogApiException;
-
-    //
-    // Find a product
-    //
-    public abstract Product findCurrentProduct(String name) throws CatalogApiException;
-
-    //
-    // Find a phase
-    //
-    public abstract PlanPhase findCurrentPhase(String name) throws CatalogApiException;
-
-    //
-    // Find a pricelist
-    //
-    public abstract PriceList findCurrentPricelist(String name) throws CatalogApiException;
-
-    //
-    //
-    //
-    public abstract ActionPolicy planChangePolicy(PlanPhaseSpecifier from,
+    /**
+     *
+     * @return the {@code Catalog} name
+     */
+    public String getCatalogName();
+
+    /**
+     *
+     * @return the date at which this version of {@code Catalog} becomes effective
+     *
+     * @throws CatalogApiException
+     */
+    public Date getEffectiveDate() throws CatalogApiException;
+
+    /**
+     *
+     * @return an array of supported {@code Currency}
+     *
+     * @throws CatalogApiException
+     */
+    public Currency[] getCurrentSupportedCurrencies() throws CatalogApiException;
+
+    /**
+     *
+     * @return an array of supported {@code Product}
+     *
+     * @throws CatalogApiException
+     */
+    public Product[] getCurrentProducts() throws CatalogApiException;
+
+    /**
+     *
+     * @return an array of supported {@code Plan}
+     *
+     * @throws CatalogApiException
+     */
+    public Plan[] getCurrentPlans() throws CatalogApiException;
+
+    /**
+     *
+     * @param productName   the {@code Product} name
+     * @param billingPeriod the billingPeriod
+     * @param priceList     the name of the {@code PriceList}
+     * @return              the {@code Plan}
+     *
+     * @throws CatalogApiException if not such {@code Plan} can be found
+     */
+    public Plan findCurrentPlan(String productName, BillingPeriod billingPeriod, String priceList) throws CatalogApiException;
+
+    /**
+     *
+     * @param name  the name of the {@Plan}
+     * @return      the {@code Plan}
+     *
+     * @throws CatalogApiException if not such {@code Plan} can be found
+     */
+    public Plan findCurrentPlan(String name) throws CatalogApiException;
+
+    /**
+     *
+     * @param name  the name of the {@code Product}
+     * @return      the {@code Product}
+     *
+     * @throws CatalogApiException if no such {@code Product} exists
+     */
+    public Product findCurrentProduct(String name) throws CatalogApiException;
+
+    /**
+     *
+     * @param name  the name of the {@code PlanPhase}
+     * @return      the {@code PlanPhase}
+     *
+     * @throws CatalogApiException if no such {@code PlanPhase} exists
+     */
+    public PlanPhase findCurrentPhase(String name) throws CatalogApiException;
+
+
+    /**
+     *
+     * @param name  the name of the {@code PriceList}
+     * @return      the {@code PriceList}
+     *
+     * @throws CatalogApiException if no such {@code PriceList} exists
+     */
+    public PriceList findCurrentPricelist(String name) throws CatalogApiException;
+
+
+    // TODO private APIs ?
+
+    public ActionPolicy planChangePolicy(PlanPhaseSpecifier from,
                                                   PlanSpecifier to) throws CatalogApiException;
 
-    public abstract PlanChangeResult planChange(PlanPhaseSpecifier from,
+    public PlanChangeResult planChange(PlanPhaseSpecifier from,
                                                 PlanSpecifier to) throws CatalogApiException;
 
 
-    public abstract ActionPolicy planCancelPolicy(PlanPhaseSpecifier planPhase) throws CatalogApiException;
 
-    public abstract PlanAlignmentCreate planCreateAlignment(PlanSpecifier specifier) throws CatalogApiException;
 
-    public abstract BillingAlignment billingAlignment(PlanPhaseSpecifier planPhase) throws CatalogApiException;
+    public ActionPolicy planCancelPolicy(PlanPhaseSpecifier planPhase) throws CatalogApiException;
+
+    public PlanAlignmentCreate planCreateAlignment(PlanSpecifier specifier) throws CatalogApiException;
+
+    public BillingAlignment billingAlignment(PlanPhaseSpecifier planPhase) throws CatalogApiException;
 
-    public abstract PlanAlignmentChange planChangeAlignment(PlanPhaseSpecifier from,
+    public PlanAlignmentChange planChangeAlignment(PlanPhaseSpecifier from,
                                                             PlanSpecifier to) throws CatalogApiException;
 
-    public abstract boolean canCreatePlan(PlanSpecifier specifier) throws CatalogApiException;
+    public boolean canCreatePlan(PlanSpecifier specifier) throws CatalogApiException;
 
-    public abstract List<Listing> getAvailableBasePlanListings() throws CatalogApiException;
-    public abstract List<Listing> getAvailableAddonListings(String baseProductName) throws CatalogApiException;
+    public List<Listing> getAvailableBasePlanListings() throws CatalogApiException;
+    public List<Listing> getAvailableAddonListings(String baseProductName) throws CatalogApiException;
 
 }
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/EntitlementService.java b/api/src/main/java/com/ning/billing/entitlement/api/EntitlementService.java
index 50d45a1..357c37c 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/EntitlementService.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/EntitlementService.java
@@ -18,5 +18,8 @@ package com.ning.billing.entitlement.api;
 
 import com.ning.billing.lifecycle.KillbillService;
 
+/**
+ * The interface {@code EntitlementService} is a {@code KillbillService} required to handle entitlement operations
+ */
 public interface EntitlementService extends KillbillService {
 }
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/migration/EntitlementMigrationApi.java b/api/src/main/java/com/ning/billing/entitlement/api/migration/EntitlementMigrationApi.java
index f0352e7..04a41a6 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/migration/EntitlementMigrationApi.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/migration/EntitlementMigrationApi.java
@@ -24,37 +24,98 @@ import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.util.callcontext.CallContext;
 
+/**
+ * The interface {@code EntitlementMigrationApi} is used to migrate entitlement data from third party system
+ * in an atomic way.
+ */
 public interface EntitlementMigrationApi {
 
 
+    /**
+     * The interface {@code EntitlementAccountMigration} captures all the {@code SubscriptionBundle} associated with
+     * that account.
+     */
     public interface EntitlementAccountMigration {
+
+        /**
+         *
+         * @return the unique id for the account
+         */
         public UUID getAccountKey();
 
+        /**
+         *
+         * @return an array of {@code EntitlementBundleMigration}
+         */
         public EntitlementBundleMigration[] getBundles();
     }
 
+    /**
+     * The interface {@code EntitlementBundleMigration} captures all the {@code Subscription} asociated with a given
+     * {@code SubscriptionBundle}
+     */
     public interface EntitlementBundleMigration {
+
+        /**
+         *
+         * @return the bundle external key
+         */
         public String getBundleKey();
 
+        /**
+         *
+         * @return an array of {@code Subscription}
+         */
         public EntitlementSubscriptionMigration[] getSubscriptions();
     }
 
+    /**
+     * The interface {@code EntitlementSubscriptionMigration} captures the detail for each {@code Subscription} to be
+     * migrated.
+     */
     public interface EntitlementSubscriptionMigration {
+
+        /**
+         *
+         * @return the {@code ProductCategory}
+         */
         public ProductCategory getCategory();
 
+        /**
+         *
+         * @return the chargeTroughDate for that {@code Subscription}
+         */
         public DateTime getChargedThroughDate();
 
+        /**
+         *
+         * @return the various phase information for that {@code Subscription}
+         */
         public EntitlementSubscriptionMigrationCase[] getSubscriptionCases();
     }
 
     /**
-     * Each case is either a PHASE or a different PlanSpecifier
+     * The interface {@code EntitlementSubscriptionMigrationCase} captures the details of
+     * phase for a {@code Subscription}.
+     *
      */
     public interface EntitlementSubscriptionMigrationCase {
+        /**
+         *
+         * @return the {@code PlanPhaseSpecifier}
+         */
         public PlanPhaseSpecifier getPlanPhaseSpecifier();
 
+        /**
+         *
+         * @return the date at which this phase starts.
+         */
         public DateTime getEffectiveDate();
 
+        /**
+         *
+         * @return the date at which this phase is stopped.
+         */
         public DateTime getCancelledDate();
     }
 
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/SubscriptionTransitionType.java b/api/src/main/java/com/ning/billing/entitlement/api/SubscriptionTransitionType.java
index 939b56b..6e6947e 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/SubscriptionTransitionType.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/SubscriptionTransitionType.java
@@ -15,18 +15,52 @@
  */
 package com.ning.billing.entitlement.api;
 
+/**
+ * The {@code SubscriptionTransitionType}
+ */
 public enum SubscriptionTransitionType {
+    /**
+     * Occurs when a {@code Subscription} got migrated to mark the start of the entitlement
+     */
     MIGRATE_ENTITLEMENT,
+    /**
+     * Occurs when a a user created a {@code Subscription} (not migrated)
+     */
     CREATE,
+    /**
+     * Occurs when a {@code Subscription} got migrated to mark the start of the billing
+     */
     MIGRATE_BILLING,
+    /**
+     * Occurs when a {@code Subscription} got transferred to mark the start of the entitlement
+     */
     TRANSFER,
+    /**
+     * Occurs when a user changed the current {@code Plan} of the {@code Subscription}
+     */
     CHANGE,
+    /**
+     * Occurs when a user restarted a {@code Subscription} after it had been cancelled
+     */
     RE_CREATE,
+    /**
+     * Occurs when a user cancelled the {@code Subscription}
+     */
     CANCEL,
+    /**
+     * Occurs when a user uncancelled the {@code Subscription} before it reached its cancellation date
+     */
     UNCANCEL,
+    /**
+     * Generated by the system to mark a change of phase
+     */
     PHASE,
-    // Transition to start of blocked billing overdue state
+    /**
+     * Generated by the system to mark the start of blocked billing overdue state
+     */
     START_BILLING_DISABLED,
-    // Transition to end of blocked billing overdue state
+    /**
+     * Generated by the system to mark the end of blocked billing overdue state
+     */
     END_BILLING_DISABLED
 }
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/timeline/BundleTimeline.java b/api/src/main/java/com/ning/billing/entitlement/api/timeline/BundleTimeline.java
index 150af02..cfc3bab 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/timeline/BundleTimeline.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/timeline/BundleTimeline.java
@@ -19,13 +19,34 @@ package com.ning.billing.entitlement.api.timeline;
 import java.util.List;
 import java.util.UUID;
 
+/**
+ *  The interface {@code BundleTimeline} shows a view of all the entitlement events for a specific
+ *  {@code SubscriptionBundle}.
+ *
+ */
 public interface BundleTimeline {
 
+    /**
+     *
+     * @return a unique viewId to identify whether two calls who display the same view or a different view
+     */
     String getViewId();
 
+    /**
+     *
+     * @return the unique id for the {@SubscriptionBundle}
+     */
     UUID getBundleId();
 
+    /**
+     *
+     * @return the external Key for the {@SubscriptionBundle}
+     */
     String getExternalKey();
 
+    /**
+     *
+     * @return the list of {@code SubscriptionTimeline}
+     */
     List<SubscriptionTimeline> getSubscriptions();
 }
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/timeline/SubscriptionTimeline.java b/api/src/main/java/com/ning/billing/entitlement/api/timeline/SubscriptionTimeline.java
index 81ed298..a521e89 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/timeline/SubscriptionTimeline.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/timeline/SubscriptionTimeline.java
@@ -23,34 +23,87 @@ import org.joda.time.DateTime;
 import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.entitlement.api.SubscriptionTransitionType;
 
+/**
+ * The interface {@code} shows a view of all the events for a particular {@code Subscription}.
+ * <p>
+ * It can be used to display information, or it can be used to modify the entitlement stream of events
+ * and 'repair' the stream by versioning the events.
+ */
 public interface SubscriptionTimeline {
 
+    /**
+     *
+     * @return the unique id for that {@code Subscription}
+     */
     public UUID getId();
 
+    /**
+     *
+     * @return the list of events that should be deleted when repairing the stream.
+     */
     public List<DeletedEvent> getDeletedEvents();
 
+    /**
+     *
+     * @return the list of events that should be added when repairing the stream
+     */
     public List<NewEvent> getNewEvents();
 
+    /**
+     *
+     * @return the current list of events for that {@code Subscription}
+     */
     public List<ExistingEvent> getExistingEvents();
 
+    /**
+     *
+     * @return the active version for the event stream
+     */
     public long getActiveVersion();
 
+
     public interface DeletedEvent {
+
+        /**
+         *
+         * @return the unique if for the event to delete
+         */
         public UUID getEventId();
     }
 
     public interface NewEvent {
+
+        /**
+         *
+         * @return the description for the event to be added
+         */
         public PlanPhaseSpecifier getPlanPhaseSpecifier();
 
+        /**
+         *
+         * @return the date at which this event should be inserted into the stream
+         */
         public DateTime getRequestedDate();
 
+        /**
+         *
+         * @return the {@code SubscriptionTransitionType} for the event
+         */
         public SubscriptionTransitionType getSubscriptionTransitionType();
 
     }
 
     public interface ExistingEvent extends DeletedEvent, NewEvent {
+        /**
+         *
+         * @return the date at which this event was effective
+         */
         public DateTime getEffectiveDate();
 
+        /**
+         *
+         * @return the name of the phase
+         */
         public String getPlanPhaseName();
     }
 }
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/transfer/EntitlementTransferApi.java b/api/src/main/java/com/ning/billing/entitlement/api/transfer/EntitlementTransferApi.java
index 71e325f..4d2b3dd 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/transfer/EntitlementTransferApi.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/transfer/EntitlementTransferApi.java
@@ -23,8 +23,24 @@ import org.joda.time.DateTime;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.util.callcontext.CallContext;
 
+/**
+ * The interface {@code EntitlementTransferApi} is used to transfer a bundle from one account to another account.
+ */
 public interface EntitlementTransferApi {
 
+    /**
+     *
+     * @param sourceAccountId   the unique id for the account on which the bundle will be transferred from
+     * @param destAccountId     the unique id for the account on which the bundle will be transferred to
+     * @param bundleKey         the externalKey for the bundle
+     * @param requestedDate     the date at which this transfer should occur
+     * @param transferAddOn     whether or not we should also transfer ADD_ON subscriptions existing on that {@code SubscriptionBundle}
+     * @param cancelImmediately whether cancellation on the sourceAccount occurs immediately
+     * @param context           the user context
+     * @return                  the newly created {@code SubscriptionBundle}
+     *
+     * @throws EntitlementTransferApiException if the system could not transfer the {@code SubscriptionBundle}
+     */
     public SubscriptionBundle transferBundle(final UUID sourceAccountId, final UUID destAccountId, final String bundleKey, final DateTime requestedDate,
                                              final boolean transferAddOn, final boolean cancelImmediately, final CallContext context)
             throws EntitlementTransferApiException;
diff --git a/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java b/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
index e000af6..cb7f3f3 100644
--- a/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
+++ b/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
@@ -37,31 +37,10 @@ public interface InvoicePaymentApi {
 
     public Invoice getInvoice(UUID invoiceId, TenantContext context) throws InvoiceApiException;
 
-    public Invoice getInvoiceForPaymentId(UUID paymentId, TenantContext context) throws InvoiceApiException;
-
     public List<InvoicePayment> getInvoicePayments(UUID paymentId, TenantContext context);
 
     public InvoicePayment getInvoicePaymentForAttempt(UUID paymentId, TenantContext context);
 
-    public void notifyOfPayment(InvoicePayment invoicePayment, CallContext context) throws InvoiceApiException;
-
-    public void notifyOfPayment(UUID invoiceId, BigDecimal amountOutstanding, Currency currency, UUID paymentId, DateTime paymentDate, CallContext context) throws InvoiceApiException;
-
-    /**
-     * Create a refund.
-     *
-     * @param paymentId                 payment associated with that refund
-     * @param amount                    amount to refund
-     * @param isInvoiceAdjusted         whether the refund should trigger an invoice or invoice item adjustment
-     * @param invoiceItemIdsWithAmounts invoice item ids and associated amounts to adjust
-     * @param paymentCookieId           payment cookie id
-     * @param context                   the call context
-     * @return the created invoice payment object associated with this refund
-     * @throws InvoiceApiException
-     */
-    public InvoicePayment createRefund(UUID paymentId, BigDecimal amount, boolean isInvoiceAdjusted, final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts,
-                                       UUID paymentCookieId, CallContext context) throws InvoiceApiException;
-
     public InvoicePayment createChargeback(UUID invoicePaymentId, BigDecimal amount, CallContext context) throws InvoiceApiException;
 
     public InvoicePayment createChargeback(UUID invoicePaymentId, CallContext context) throws InvoiceApiException;
diff --git a/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java b/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
index 3db2693..e04fed7 100644
--- a/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
+++ b/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
@@ -87,13 +87,6 @@ public interface InvoiceUserApi {
      */
     public Invoice getInvoiceByNumber(Integer number, TenantContext context) throws InvoiceApiException;
 
-    /**
-     * Record a payment for an invoice.
-     *
-     * @param invoicePayment invoice payment
-     * @param context        call context
-     */
-    public void notifyOfPayment(InvoicePayment invoicePayment, CallContext context) throws InvoiceApiException;
 
     /**
      * Find unpaid invoices for a given account, up to a given day.
diff --git a/api/src/main/java/com/ning/billing/junction/api/Blockable.java b/api/src/main/java/com/ning/billing/junction/api/Blockable.java
index daab418..20ac9ca 100644
--- a/api/src/main/java/com/ning/billing/junction/api/Blockable.java
+++ b/api/src/main/java/com/ning/billing/junction/api/Blockable.java
@@ -18,10 +18,10 @@ package com.ning.billing.junction.api;
 
 import java.util.UUID;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
-import com.ning.billing.util.dao.ObjectType;
 
 public interface Blockable {
 
diff --git a/api/src/main/java/com/ning/billing/lifecycle/KillbillService.java b/api/src/main/java/com/ning/billing/lifecycle/KillbillService.java
index df00532..148bf15 100644
--- a/api/src/main/java/com/ning/billing/lifecycle/KillbillService.java
+++ b/api/src/main/java/com/ning/billing/lifecycle/KillbillService.java
@@ -16,6 +16,14 @@
 
 package com.ning.billing.lifecycle;
 
+/**
+ * The interface <code>KillbillService<code/> represents a service that will go through the Killbill lifecyle.
+ * <p>
+ * A <code>KillbillService<code> can register handlers for the various phases of the lifecycle, so
+ * that its proper initialization/shutdown sequence occurs at the right time with regard
+ * to other <code>KillbillService</code>.
+ *
+ */
 public interface KillbillService {
 
     public static class ServiceException extends Exception {
diff --git a/api/src/main/java/com/ning/billing/util/api/AuditUserApi.java b/api/src/main/java/com/ning/billing/util/api/AuditUserApi.java
index 498507c..d6a7a4f 100644
--- a/api/src/main/java/com/ning/billing/util/api/AuditUserApi.java
+++ b/api/src/main/java/com/ning/billing/util/api/AuditUserApi.java
@@ -19,6 +19,7 @@ package com.ning.billing.util.api;
 import java.util.List;
 import java.util.UUID;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.entitlement.api.timeline.BundleTimeline;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoicePayment;
@@ -31,7 +32,6 @@ import com.ning.billing.util.audit.AuditLogsForInvoices;
 import com.ning.billing.util.audit.AuditLogsForPayments;
 import com.ning.billing.util.audit.AuditLogsForRefunds;
 import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.dao.ObjectType;
 
 public interface AuditUserApi {
 
diff --git a/api/src/main/java/com/ning/billing/util/api/CustomFieldUserApi.java b/api/src/main/java/com/ning/billing/util/api/CustomFieldUserApi.java
index 7a6328e..c233a44 100644
--- a/api/src/main/java/com/ning/billing/util/api/CustomFieldUserApi.java
+++ b/api/src/main/java/com/ning/billing/util/api/CustomFieldUserApi.java
@@ -20,10 +20,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TenantContext;
 import com.ning.billing.util.customfield.CustomField;
-import com.ning.billing.util.dao.ObjectType;
 
 public interface CustomFieldUserApi {
 
diff --git a/api/src/main/java/com/ning/billing/util/api/TagUserApi.java b/api/src/main/java/com/ning/billing/util/api/TagUserApi.java
index 3e31e4d..cde9535 100644
--- a/api/src/main/java/com/ning/billing/util/api/TagUserApi.java
+++ b/api/src/main/java/com/ning/billing/util/api/TagUserApi.java
@@ -21,9 +21,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.Tag;
 import com.ning.billing.util.tag.TagDefinition;
 
diff --git a/api/src/main/java/com/ning/billing/util/audit/AuditLog.java b/api/src/main/java/com/ning/billing/util/audit/AuditLog.java
index be89e7f..1544931 100644
--- a/api/src/main/java/com/ning/billing/util/audit/AuditLog.java
+++ b/api/src/main/java/com/ning/billing/util/audit/AuditLog.java
@@ -18,7 +18,6 @@ package com.ning.billing.util.audit;
 
 import org.joda.time.DateTime;
 
-import com.ning.billing.util.ChangeType;
 
 public interface AuditLog {
 
diff --git a/api/src/main/java/com/ning/billing/util/entity/Entity.java b/api/src/main/java/com/ning/billing/util/entity/Entity.java
index 83b2151..f486dfd 100644
--- a/api/src/main/java/com/ning/billing/util/entity/Entity.java
+++ b/api/src/main/java/com/ning/billing/util/entity/Entity.java
@@ -22,9 +22,21 @@ import org.joda.time.DateTime;
 
 public interface Entity {
 
+    /**
+     *
+     * @return  the UUID of the object
+     */
     public UUID getId();
 
+    /**
+     *
+     * @return  the createdDate of that object
+     */
     public DateTime getCreatedDate();
 
+    /**
+     *
+     * @return  the last updatedDate of that object
+     */
     public DateTime getUpdatedDate();
 }
diff --git a/api/src/main/java/com/ning/billing/util/tag/ControlTagType.java b/api/src/main/java/com/ning/billing/util/tag/ControlTagType.java
index 2f9555f..fe98ad6 100644
--- a/api/src/main/java/com/ning/billing/util/tag/ControlTagType.java
+++ b/api/src/main/java/com/ning/billing/util/tag/ControlTagType.java
@@ -19,7 +19,7 @@ package com.ning.billing.util.tag;
 import java.util.List;
 import java.util.UUID;
 
-import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.ObjectType;
 
 import com.google.common.collect.ImmutableList;
 
diff --git a/api/src/main/java/com/ning/billing/util/tag/TagDefinition.java b/api/src/main/java/com/ning/billing/util/tag/TagDefinition.java
index 6114060..94b9b48 100644
--- a/api/src/main/java/com/ning/billing/util/tag/TagDefinition.java
+++ b/api/src/main/java/com/ning/billing/util/tag/TagDefinition.java
@@ -18,7 +18,7 @@ package com.ning.billing.util.tag;
 
 import java.util.List;
 
-import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.entity.Entity;
 
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/BeatrixListener.java b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/BeatrixListener.java
index 319f166..ef98c42 100644
--- a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/BeatrixListener.java
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/BeatrixListener.java
@@ -22,6 +22,7 @@ import javax.inject.Inject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.beatrix.bus.api.ExtBusEventType;
 import com.ning.billing.beatrix.bus.api.ExternalBus;
 import com.ning.billing.beatrix.extbus.dao.ExtBusEventEntry;
@@ -31,7 +32,6 @@ import com.ning.billing.util.callcontext.CallOrigin;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.UserType;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.events.AccountChangeInternalEvent;
 import com.ning.billing.util.events.AccountCreationInternalEvent;
 import com.ning.billing.util.events.BusInternalEvent;
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusEventEntry.java b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusEventEntry.java
index 8d21129..b882a7c 100644
--- a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusEventEntry.java
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusEventEntry.java
@@ -20,8 +20,8 @@ import java.util.UUID;
 
 import org.joda.time.DateTime;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.beatrix.bus.api.ExtBusEventType;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.queue.PersistentQueueEntryLifecycle;
 
 public class ExtBusEventEntry implements PersistentQueueEntryLifecycle {
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusSqlDao.java b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusSqlDao.java
index 004ff07..2f3c3d0 100644
--- a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusSqlDao.java
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusSqlDao.java
@@ -33,13 +33,13 @@ import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
 import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
 import org.skife.jdbi.v2.tweak.ResultSetMapper;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.beatrix.bus.api.ExtBusEventType;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.callcontext.InternalTenantContextBinder;
 import com.ning.billing.util.dao.BinderBase;
 import com.ning.billing.util.dao.MapperBase;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.queue.PersistentQueueEntryLifecycle.PersistentQueueEntryLifecycleState;
 
 
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/DefaultBusEvent.java b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/DefaultBusEvent.java
index 6df7129..70edcce 100644
--- a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/DefaultBusEvent.java
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/DefaultBusEvent.java
@@ -17,9 +17,9 @@ package com.ning.billing.beatrix.extbus;
 
 import java.util.UUID;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.beatrix.bus.api.ExtBusEvent;
 import com.ning.billing.beatrix.bus.api.ExtBusEventType;
-import com.ning.billing.util.dao.ObjectType;
 
 public class DefaultBusEvent implements ExtBusEvent {
 
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixModule.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixModule.java
index 82428ea..09a4d65 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixModule.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixModule.java
@@ -40,7 +40,7 @@ import com.ning.billing.beatrix.util.InvoiceChecker;
 import com.ning.billing.beatrix.util.PaymentChecker;
 import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.catalog.glue.CatalogModule;
-import com.ning.billing.config.PaymentConfig;
+import com.ning.billing.util.config.PaymentConfig;
 import com.ning.billing.dbi.DBIProvider;
 import com.ning.billing.dbi.DbiConfig;
 import com.ning.billing.dbi.MysqlTestingHelper;
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueBase.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueBase.java
index aeb1907..0eef9b1 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueBase.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueBase.java
@@ -41,7 +41,7 @@ import com.ning.billing.payment.api.PaymentApi;
 import com.ning.billing.payment.api.PaymentMethodPlugin;
 import com.ning.billing.payment.provider.MockPaymentProviderPlugin;
 import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.config.XMLLoader;
+import com.ning.billing.util.config.catalog.XMLLoader;
 import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
 
 import com.google.inject.Inject;
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueIntegration.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueIntegration.java
index a08877d..4ce0c2f 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueIntegration.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueIntegration.java
@@ -198,7 +198,7 @@ public class TestOverdueIntegration extends TestOverdueBase {
         clock.setTime(new DateTime(2012, 5, 1, 0, 3, 42, 0));
 
         // Make sure the account doesn't have any payment method
-        accountUserApi.removePaymentMethod(account.getId(), callContext);
+        accountInternalApi.removePaymentMethod(account.getId(), internalCallContext);
 
         // Create subscription
         final Subscription baseSubscription = createSubscriptionAndCheckForCompletion(bundle.getId(), productName, ProductCategory.BASE, term, NextEvent.CREATE, NextEvent.INVOICE);
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java
index 5a80511..328ab3f 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java
@@ -30,6 +30,7 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.AccountData;
@@ -59,8 +60,7 @@ import com.ning.billing.overdue.config.OverdueConfig;
 import com.ning.billing.payment.api.PaymentStatus;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.api.TagDefinitionApiException;
-import com.ning.billing.util.config.XMLLoader;
-import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.config.catalog.XMLLoader;
 import com.ning.billing.util.tag.TagDefinition;
 
 import static org.testng.Assert.assertTrue;
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
index 3eaea42..bbd2e47 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
@@ -82,6 +82,7 @@ import com.ning.billing.payment.api.PaymentMethodPlugin;
 import com.ning.billing.payment.provider.MockPaymentProviderPlugin;
 import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.clock.ClockMock;
+import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcsapi.bus.BusService;
 
 import com.google.common.base.Function;
@@ -173,10 +174,12 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
     @Inject
     protected PaymentChecker paymentChecker;
 
-
     @Inject
     protected ExternalBus externalBus;
 
+    @Inject
+    protected AccountInternalApi accountInternalApi;
+
     protected TestApiListener busHandler;
 
     private boolean isListenerFailed;
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoInvoiceOffTag.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoInvoiceOffTag.java
index 103145e..14cde9d 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoInvoiceOffTag.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoInvoiceOffTag.java
@@ -25,6 +25,7 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.api.TestApiListener.NextEvent;
 import com.ning.billing.catalog.api.BillingPeriod;
@@ -38,7 +39,6 @@ import com.ning.billing.invoice.api.InvoiceUserApi;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.api.TagUserApi;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.ControlTagType;
 import com.ning.billing.util.tag.Tag;
 
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoPayOff.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoPayOff.java
index 31688f8..4871538 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoPayOff.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoPayOff.java
@@ -25,13 +25,14 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.api.TestApiListener.NextEvent;
 import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.config.PaymentConfig;
+import com.ning.billing.util.config.PaymentConfig;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.entitlement.api.user.SubscriptionData;
 import com.ning.billing.invoice.api.Invoice;
@@ -39,7 +40,6 @@ import com.ning.billing.invoice.api.InvoiceUserApi;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.api.TagUserApi;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.ControlTagType;
 import com.ning.billing.util.tag.Tag;
 
diff --git a/catalog/src/main/java/com/ning/billing/catalog/DefaultCatalogService.java b/catalog/src/main/java/com/ning/billing/catalog/DefaultCatalogService.java
index 9685457..2405d68 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/DefaultCatalogService.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/DefaultCatalogService.java
@@ -22,7 +22,7 @@ import com.ning.billing.catalog.api.Catalog;
 import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.catalog.api.StaticCatalog;
 import com.ning.billing.catalog.io.VersionedCatalogLoader;
-import com.ning.billing.config.CatalogConfig;
+import com.ning.billing.util.config.CatalogConfig;
 import com.ning.billing.lifecycle.KillbillService;
 import com.ning.billing.lifecycle.LifecycleHandlerType;
 import com.ning.billing.lifecycle.LifecycleHandlerType.LifecycleLevel;
diff --git a/catalog/src/main/java/com/ning/billing/catalog/DefaultDuration.java b/catalog/src/main/java/com/ning/billing/catalog/DefaultDuration.java
index 87659e5..85d8917 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/DefaultDuration.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/DefaultDuration.java
@@ -25,9 +25,9 @@ import org.joda.time.Period;
 
 import com.ning.billing.catalog.api.Duration;
 import com.ning.billing.catalog.api.TimeUnit;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationError;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationError;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 @XmlAccessorType(XmlAccessType.NONE)
 public class DefaultDuration extends ValidatingConfig<StandaloneCatalog> implements Duration {
diff --git a/catalog/src/main/java/com/ning/billing/catalog/DefaultInternationalPrice.java b/catalog/src/main/java/com/ning/billing/catalog/DefaultInternationalPrice.java
index 7411935..44fb950 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/DefaultInternationalPrice.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/DefaultInternationalPrice.java
@@ -28,8 +28,8 @@ import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.catalog.api.CurrencyValueNull;
 import com.ning.billing.catalog.api.InternationalPrice;
 import com.ning.billing.catalog.api.Price;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 @XmlAccessorType(XmlAccessType.NONE)
 public class DefaultInternationalPrice extends ValidatingConfig<StandaloneCatalog> implements InternationalPrice {
diff --git a/catalog/src/main/java/com/ning/billing/catalog/DefaultPlan.java b/catalog/src/main/java/com/ning/billing/catalog/DefaultPlan.java
index efb16c9..26300b6 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/DefaultPlan.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/DefaultPlan.java
@@ -39,9 +39,9 @@ import com.ning.billing.catalog.api.PhaseType;
 import com.ning.billing.catalog.api.Plan;
 import com.ning.billing.catalog.api.PlanPhase;
 import com.ning.billing.catalog.api.Product;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationError;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationError;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 @XmlAccessorType(XmlAccessType.NONE)
 public class DefaultPlan extends ValidatingConfig<StandaloneCatalog> implements Plan {
diff --git a/catalog/src/main/java/com/ning/billing/catalog/DefaultPlanPhase.java b/catalog/src/main/java/com/ning/billing/catalog/DefaultPlanPhase.java
index 3bb0cb1..2b55f16 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/DefaultPlanPhase.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/DefaultPlanPhase.java
@@ -30,9 +30,9 @@ import com.ning.billing.catalog.api.InternationalPrice;
 import com.ning.billing.catalog.api.PhaseType;
 import com.ning.billing.catalog.api.Plan;
 import com.ning.billing.catalog.api.PlanPhase;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationError;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationError;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 @XmlAccessorType(XmlAccessType.NONE)
 public class DefaultPlanPhase extends ValidatingConfig<StandaloneCatalog> implements PlanPhase {
diff --git a/catalog/src/main/java/com/ning/billing/catalog/DefaultPrice.java b/catalog/src/main/java/com/ning/billing/catalog/DefaultPrice.java
index d07bc37..aba040d 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/DefaultPrice.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/DefaultPrice.java
@@ -24,8 +24,8 @@ import java.math.BigDecimal;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.catalog.api.CurrencyValueNull;
 import com.ning.billing.catalog.api.Price;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 @XmlAccessorType(XmlAccessType.NONE)
 public class DefaultPrice extends ValidatingConfig<StandaloneCatalog> implements Price {
diff --git a/catalog/src/main/java/com/ning/billing/catalog/DefaultPriceList.java b/catalog/src/main/java/com/ning/billing/catalog/DefaultPriceList.java
index f2bd4e1..5131241 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/DefaultPriceList.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/DefaultPriceList.java
@@ -27,9 +27,9 @@ import javax.xml.bind.annotation.XmlIDREF;
 import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.PriceList;
 import com.ning.billing.catalog.api.Product;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationError;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationError;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 @XmlAccessorType(XmlAccessType.NONE)
 public class DefaultPriceList extends ValidatingConfig<StandaloneCatalog> implements PriceList {
diff --git a/catalog/src/main/java/com/ning/billing/catalog/DefaultPriceListSet.java b/catalog/src/main/java/com/ning/billing/catalog/DefaultPriceListSet.java
index a47abb8..9cb7ad5 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/DefaultPriceListSet.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/DefaultPriceListSet.java
@@ -28,9 +28,9 @@ import com.ning.billing.catalog.api.CatalogApiException;
 import com.ning.billing.catalog.api.PriceList;
 import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.api.Product;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationError;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationError;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 @XmlAccessorType(XmlAccessType.NONE)
 public class DefaultPriceListSet extends ValidatingConfig<StandaloneCatalog> {
diff --git a/catalog/src/main/java/com/ning/billing/catalog/DefaultProduct.java b/catalog/src/main/java/com/ning/billing/catalog/DefaultProduct.java
index 0c14bc5..023a8d0 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/DefaultProduct.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/DefaultProduct.java
@@ -28,8 +28,8 @@ import java.util.Arrays;
 
 import com.ning.billing.catalog.api.Product;
 import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 @XmlAccessorType(XmlAccessType.NONE)
 public class DefaultProduct extends ValidatingConfig<StandaloneCatalog> implements Product {
diff --git a/catalog/src/main/java/com/ning/billing/catalog/glue/CatalogModule.java b/catalog/src/main/java/com/ning/billing/catalog/glue/CatalogModule.java
index 6194d60..3091f04 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/glue/CatalogModule.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/glue/CatalogModule.java
@@ -27,7 +27,7 @@ import com.ning.billing.catalog.DefaultCatalogService;
 import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.catalog.io.ICatalogLoader;
 import com.ning.billing.catalog.io.VersionedCatalogLoader;
-import com.ning.billing.config.CatalogConfig;
+import com.ning.billing.util.config.CatalogConfig;
 
 public class CatalogModule extends AbstractModule {
     final ConfigSource configSource;
diff --git a/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java b/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java
index 4bc57e3..ec8c6b4 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java
@@ -28,8 +28,8 @@ import com.ning.billing.catalog.StandaloneCatalog;
 import com.ning.billing.catalog.VersionedCatalog;
 import com.ning.billing.lifecycle.KillbillService.ServiceException;
 import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.config.UriAccessor;
-import com.ning.billing.util.config.XMLLoader;
+import com.ning.billing.util.config.catalog.UriAccessor;
+import com.ning.billing.util.config.catalog.XMLLoader;
 
 public class VersionedCatalogLoader implements ICatalogLoader {
     private static final Object PROTOCOL_FOR_FILE = "file";
diff --git a/catalog/src/main/java/com/ning/billing/catalog/PriceListDefault.java b/catalog/src/main/java/com/ning/billing/catalog/PriceListDefault.java
index 91bdc43..215807a 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/PriceListDefault.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/PriceListDefault.java
@@ -20,8 +20,8 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 
 import com.ning.billing.catalog.api.PriceListSet;
-import com.ning.billing.util.config.ValidationError;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidationError;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 @XmlAccessorType(XmlAccessType.NONE)
 public class PriceListDefault extends DefaultPriceList {
diff --git a/catalog/src/main/java/com/ning/billing/catalog/rules/Case.java b/catalog/src/main/java/com/ning/billing/catalog/rules/Case.java
index e1a75f9..1aaadcd 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/rules/Case.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/rules/Case.java
@@ -24,8 +24,8 @@ import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.CatalogApiException;
 import com.ning.billing.catalog.api.PlanSpecifier;
 import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 public abstract class Case<T> extends ValidatingConfig<StandaloneCatalog> {
 
diff --git a/catalog/src/main/java/com/ning/billing/catalog/rules/CaseChange.java b/catalog/src/main/java/com/ning/billing/catalog/rules/CaseChange.java
index fd243a2..950518b 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/rules/CaseChange.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/rules/CaseChange.java
@@ -30,8 +30,8 @@ import com.ning.billing.catalog.api.PhaseType;
 import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.catalog.api.PlanSpecifier;
 import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 @XmlAccessorType(XmlAccessType.NONE)
 public abstract class CaseChange<T> extends ValidatingConfig<StandaloneCatalog> {
diff --git a/catalog/src/main/java/com/ning/billing/catalog/rules/CasePhase.java b/catalog/src/main/java/com/ning/billing/catalog/rules/CasePhase.java
index b7d71da..122d60c 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/rules/CasePhase.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/rules/CasePhase.java
@@ -23,7 +23,7 @@ import com.ning.billing.catalog.api.CatalogApiException;
 import com.ning.billing.catalog.api.PhaseType;
 import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.catalog.api.PlanSpecifier;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 public abstract class CasePhase<T> extends CaseStandardNaming<T> {
 
diff --git a/catalog/src/main/java/com/ning/billing/catalog/rules/PlanRules.java b/catalog/src/main/java/com/ning/billing/catalog/rules/PlanRules.java
index f4b1a5e..c34c18f 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/rules/PlanRules.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/rules/PlanRules.java
@@ -32,8 +32,8 @@ import com.ning.billing.catalog.api.PlanAlignmentCreate;
 import com.ning.billing.catalog.api.PlanChangeResult;
 import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.catalog.api.PlanSpecifier;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 @XmlAccessorType(XmlAccessType.NONE)
 public class PlanRules extends ValidatingConfig<StandaloneCatalog> {
diff --git a/catalog/src/main/java/com/ning/billing/catalog/StandaloneCatalog.java b/catalog/src/main/java/com/ning/billing/catalog/StandaloneCatalog.java
index 8be724f..896bf0c 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/StandaloneCatalog.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/StandaloneCatalog.java
@@ -47,9 +47,9 @@ import com.ning.billing.catalog.api.Product;
 import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.catalog.api.StaticCatalog;
 import com.ning.billing.catalog.rules.PlanRules;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationError;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationError;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 @XmlRootElement(name = "catalog")
 @XmlAccessorType(XmlAccessType.NONE)
diff --git a/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java b/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java
index 81e1c02..e58b89a 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java
@@ -51,8 +51,8 @@ import com.ning.billing.catalog.api.PriceList;
 import com.ning.billing.catalog.api.Product;
 import com.ning.billing.catalog.api.StaticCatalog;
 import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 
 @XmlRootElement(name = "catalog")
diff --git a/catalog/src/test/java/com/ning/billing/catalog/CreateCatalogSchema.java b/catalog/src/test/java/com/ning/billing/catalog/CreateCatalogSchema.java
index b037f6e..1ccaf64 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/CreateCatalogSchema.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/CreateCatalogSchema.java
@@ -20,7 +20,7 @@ import java.io.File;
 import java.io.FileWriter;
 import java.io.Writer;
 
-import com.ning.billing.util.config.XMLSchemaGenerator;
+import com.ning.billing.util.config.catalog.XMLSchemaGenerator;
 
 public class CreateCatalogSchema {
 
diff --git a/catalog/src/test/java/com/ning/billing/catalog/io/TestXMLReader.java b/catalog/src/test/java/com/ning/billing/catalog/io/TestXMLReader.java
index 8d91c8e..32d97d3 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/io/TestXMLReader.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/io/TestXMLReader.java
@@ -22,7 +22,7 @@ import org.testng.annotations.Test;
 import com.google.common.io.Resources;
 import com.ning.billing.catalog.CatalogTestSuite;
 import com.ning.billing.catalog.StandaloneCatalog;
-import com.ning.billing.util.config.XMLLoader;
+import com.ning.billing.util.config.catalog.XMLLoader;
 
 public class TestXMLReader extends CatalogTestSuite {
     @Test(groups = "fast")
diff --git a/catalog/src/test/java/com/ning/billing/catalog/rules/TestLoadRules.java b/catalog/src/test/java/com/ning/billing/catalog/rules/TestLoadRules.java
index 27cf7d1..386fd72 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/rules/TestLoadRules.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/rules/TestLoadRules.java
@@ -28,7 +28,7 @@ import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.PlanAlignmentCreate;
 import com.ning.billing.catalog.api.PlanSpecifier;
 import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.util.config.XMLLoader;
+import com.ning.billing.util.config.catalog.XMLLoader;
 
 public class TestLoadRules extends CatalogTestSuite {
     @Test(groups = "fast")
diff --git a/catalog/src/test/java/com/ning/billing/catalog/TestCatalogService.java b/catalog/src/test/java/com/ning/billing/catalog/TestCatalogService.java
index 3fa6949..22c626f 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/TestCatalogService.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/TestCatalogService.java
@@ -20,7 +20,7 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.ning.billing.catalog.io.VersionedCatalogLoader;
-import com.ning.billing.config.CatalogConfig;
+import com.ning.billing.util.config.CatalogConfig;
 import com.ning.billing.lifecycle.KillbillService.ServiceException;
 import com.ning.billing.util.clock.DefaultClock;
 
diff --git a/catalog/src/test/java/com/ning/billing/catalog/TestInternationalPrice.java b/catalog/src/test/java/com/ning/billing/catalog/TestInternationalPrice.java
index f543071..8e57780 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/TestInternationalPrice.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/TestInternationalPrice.java
@@ -27,7 +27,7 @@ import org.testng.annotations.Test;
 
 import com.ning.billing.catalog.api.CatalogApiException;
 import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 public class TestInternationalPrice extends CatalogTestSuite {
     private static final Logger log = LoggerFactory.getLogger(TestInternationalPrice.class);
diff --git a/catalog/src/test/java/com/ning/billing/catalog/TestPlan.java b/catalog/src/test/java/com/ning/billing/catalog/TestPlan.java
index 3af91ed..38c6565 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/TestPlan.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/TestPlan.java
@@ -25,7 +25,7 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 public class TestPlan extends CatalogTestSuite {
     private static final Logger log = LoggerFactory.getLogger(TestPlan.class);
diff --git a/catalog/src/test/java/com/ning/billing/catalog/TestPlanPhase.java b/catalog/src/test/java/com/ning/billing/catalog/TestPlanPhase.java
index 600a620..019e8b7 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/TestPlanPhase.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/TestPlanPhase.java
@@ -24,7 +24,7 @@ import org.testng.annotations.Test;
 import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.CatalogApiException;
 import com.ning.billing.catalog.api.PhaseType;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 public class TestPlanPhase extends CatalogTestSuite {
     private final Logger log = LoggerFactory.getLogger(TestPlanPhase.class);
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/alignment/MigrationPlanAligner.java b/entitlement/src/main/java/com/ning/billing/entitlement/alignment/MigrationPlanAligner.java
index 404ac7c..f8ea053 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/alignment/MigrationPlanAligner.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/alignment/MigrationPlanAligner.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2010-2011 Ning, Inc.
+ * Copyright 2010-2012 Ning, Inc.
  *
  * Ning licenses this file to you under the Apache License, version 2.0
  * (the "License"); you may not use this file except in compliance with the
@@ -47,13 +47,13 @@ public class MigrationPlanAligner {
             throws EntitlementMigrationApiException {
 
         try {
-            TimedMigration[] events = null;
+            TimedMigration[] events;
             final Plan plan0 = catalogService.getFullCatalog().findPlan(input[0].getPlanPhaseSpecifier().getProductName(),
-                                                                  input[0].getPlanPhaseSpecifier().getBillingPeriod(), input[0].getPlanPhaseSpecifier().getPriceListName(), now);
+                                                                        input[0].getPlanPhaseSpecifier().getBillingPeriod(), input[0].getPlanPhaseSpecifier().getPriceListName(), now);
 
             final Plan plan1 = (input.length > 1) ? catalogService.getFullCatalog().findPlan(input[1].getPlanPhaseSpecifier().getProductName(),
-                                                                                       input[1].getPlanPhaseSpecifier().getBillingPeriod(), input[1].getPlanPhaseSpecifier().getPriceListName(), now) :
-                    null;
+                                                                                             input[1].getPlanPhaseSpecifier().getBillingPeriod(), input[1].getPlanPhaseSpecifier().getPriceListName(), now) :
+                               null;
 
             DateTime migrationStartDate = input[0].getEffectiveDate();
 
@@ -194,8 +194,8 @@ public class MigrationPlanAligner {
 
     private boolean isSamePlan(final PlanPhaseSpecifier plan0, final PlanPhaseSpecifier plan1) {
         if (plan0.getPriceListName().equals(plan1.getPriceListName()) &&
-                plan0.getProductName().equals(plan1.getProductName()) &&
-                plan0.getBillingPeriod() == plan1.getBillingPeriod()) {
+            plan0.getProductName().equals(plan1.getProductName()) &&
+            plan0.getBillingPeriod() == plan1.getBillingPeriod()) {
             return true;
         }
         return false;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/SubscriptionDataRepair.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/SubscriptionDataRepair.java
index 555b227..301f15f 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/SubscriptionDataRepair.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/SubscriptionDataRepair.java
@@ -23,6 +23,7 @@ import java.util.List;
 import org.joda.time.DateTime;
 
 import com.ning.billing.ErrorCode;
+import com.ning.billing.ObjectType;
 import com.ning.billing.catalog.api.Catalog;
 import com.ning.billing.catalog.api.CatalogApiException;
 import com.ning.billing.catalog.api.CatalogService;
@@ -45,7 +46,6 @@ import com.ning.billing.entitlement.events.user.ApiEventCancel;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.dao.ObjectType;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Collections2;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionApiService.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionApiService.java
index 6c85794..3dd5850 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionApiService.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionApiService.java
@@ -23,6 +23,7 @@ import java.util.UUID;
 import org.joda.time.DateTime;
 
 import com.ning.billing.ErrorCode;
+import com.ning.billing.ObjectType;
 import com.ning.billing.catalog.api.ActionPolicy;
 import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.CatalogApiException;
@@ -58,7 +59,6 @@ import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.clock.DefaultClock;
-import com.ning.billing.util.dao.ObjectType;
 
 import com.google.inject.Inject;
 
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
index a94ffc5..27c9eea 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
@@ -28,8 +28,8 @@ import org.slf4j.LoggerFactory;
 import com.ning.billing.catalog.api.Plan;
 import com.ning.billing.catalog.api.Product;
 import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.config.EntitlementConfig;
-import com.ning.billing.config.NotificationConfig;
+import com.ning.billing.util.config.EntitlementConfig;
+import com.ning.billing.util.config.NotificationConfig;
 import com.ning.billing.entitlement.alignment.PlanAligner;
 import com.ning.billing.entitlement.alignment.TimedPhase;
 import com.ning.billing.entitlement.api.EntitlementService;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java
index e7ce114..de8814c 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java
@@ -65,7 +65,7 @@ import com.ning.billing.entitlement.events.user.ApiEventCancel;
 import com.ning.billing.entitlement.events.user.ApiEventChange;
 import com.ning.billing.entitlement.events.user.ApiEventType;
 import com.ning.billing.entitlement.exceptions.EntitlementError;
-import com.ning.billing.util.ChangeType;
+import com.ning.billing.util.audit.ChangeType;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.clock.Clock;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/glue/DefaultEntitlementModule.java b/entitlement/src/main/java/com/ning/billing/entitlement/glue/DefaultEntitlementModule.java
index 497855e..96d5e66 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/glue/DefaultEntitlementModule.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/glue/DefaultEntitlementModule.java
@@ -18,7 +18,7 @@ package com.ning.billing.entitlement.glue;
 
 import org.skife.config.ConfigurationObjectFactory;
 
-import com.ning.billing.config.EntitlementConfig;
+import com.ning.billing.util.config.EntitlementConfig;
 import com.ning.billing.entitlement.alignment.MigrationPlanAligner;
 import com.ning.billing.entitlement.alignment.PlanAligner;
 import com.ning.billing.entitlement.api.EntitlementService;
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/alignment/TestPlanAligner.java b/entitlement/src/test/java/com/ning/billing/entitlement/alignment/TestPlanAligner.java
index 80473af..7a3ceaf 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/alignment/TestPlanAligner.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/alignment/TestPlanAligner.java
@@ -33,7 +33,7 @@ import com.ning.billing.catalog.api.PhaseType;
 import com.ning.billing.catalog.api.Plan;
 import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.io.VersionedCatalogLoader;
-import com.ning.billing.config.CatalogConfig;
+import com.ning.billing.util.config.CatalogConfig;
 import com.ning.billing.entitlement.api.user.DefaultSubscriptionFactory;
 import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
 import com.ning.billing.entitlement.api.user.SubscriptionData;
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java
index 02fe3b0..d9e7103 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestApiBase.java
@@ -58,7 +58,7 @@ import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.catalog.api.TimeUnit;
-import com.ning.billing.config.EntitlementConfig;
+import com.ning.billing.util.config.EntitlementConfig;
 import com.ning.billing.entitlement.EntitlementTestSuiteWithEmbeddedDB;
 import com.ning.billing.entitlement.api.migration.EntitlementMigrationApi;
 import com.ning.billing.entitlement.api.migration.EntitlementMigrationApi.EntitlementAccountMigration;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
index 4739213..c51f344 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
@@ -57,14 +57,6 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
     }
 
     @Override
-    public void notifyOfPayment(final InvoicePayment invoicePayment, final CallContext context) throws InvoiceApiException {
-        // Retrieve the account id for the internal call context
-        final Invoice invoice = dao.getById(invoicePayment.getInvoiceId(), internalCallContextFactory.createInternalTenantContext(context));
-        final UUID accountId = invoice.getAccountId();
-        dao.notifyOfPayment(invoicePayment, internalCallContextFactory.createInternalCallContext(accountId, context));
-    }
-
-    @Override
     public List<Invoice> getAllInvoicesByAccount(final UUID accountId, final TenantContext context) {
         return dao.getAllInvoicesByAccount(accountId, internalCallContextFactory.createInternalTenantContext(context));
     }
@@ -75,18 +67,10 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
     }
 
     @Override
-    public Invoice getInvoiceForPaymentId(final UUID paymentId, final TenantContext context) throws InvoiceApiException {
-        final InternalTenantContext internalTenantContext = internalCallContextFactory.createInternalTenantContext(context);
-        final UUID invoiceIdStr = dao.getInvoiceIdByPaymentId(paymentId, internalTenantContext);
-        return invoiceIdStr == null ? null : dao.getById(invoiceIdStr, internalTenantContext);
-    }
-
-    @Override
     public List<InvoicePayment> getInvoicePayments(final UUID paymentId, final TenantContext context) {
         return dao.getInvoicePayments(paymentId, internalCallContextFactory.createInternalTenantContext(context));
     }
 
-
     @Override
     public InvoicePayment getInvoicePaymentForAttempt(final UUID paymentId, final TenantContext context) {
         final List<InvoicePayment> invoicePayments = dao.getInvoicePayments(paymentId, internalCallContextFactory.createInternalTenantContext(context));
@@ -101,16 +85,6 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
         }).iterator().next();
     }
 
-    @Override
-    public void notifyOfPayment(final UUID invoiceId, final BigDecimal amount, final Currency currency, final UUID paymentId, final DateTime paymentDate, final CallContext context) throws InvoiceApiException {
-        final InvoicePayment invoicePayment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoiceId, paymentDate, amount, currency);
-
-        // Retrieve the account id for the internal call context
-        final Invoice invoice = dao.getById(invoiceId, internalCallContextFactory.createInternalTenantContext(context));
-        final UUID accountId = invoice.getAccountId();
-
-        dao.notifyOfPayment(invoicePayment, internalCallContextFactory.createInternalCallContext(accountId, context));
-    }
 
     @Override
     public BigDecimal getRemainingAmountPaid(final UUID invoicePaymentId, final TenantContext context) {
@@ -137,28 +111,6 @@ public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
         return dao.getAccountIdFromInvoicePaymentId(invoicePaymentId, internalCallContextFactory.createInternalTenantContext(context));
     }
 
-    @Override
-    public InvoicePayment createRefund(final UUID paymentId, final BigDecimal amount, final boolean isInvoiceAdjusted,
-                                       final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts, final UUID paymentCookieId,
-                                       final CallContext context) throws InvoiceApiException {
-
-        return invoicePaymentWithException.executeAndThrow(new WithInvoiceApiExceptionCallback<InvoicePayment>() {
-
-            @Override
-            public InvoicePayment doHandle() throws InvoiceApiException {
-                if (amount.compareTo(BigDecimal.ZERO) <= 0) {
-                    throw new InvoiceApiException(ErrorCode.PAYMENT_REFUND_AMOUNT_NEGATIVE_OR_NULL);
-                }
-
-                // Retrieve the account id for the internal call context
-                final InternalTenantContext internalCallContextNoAccountId = internalCallContextFactory.createInternalTenantContext(context);
-                final List<InvoicePayment> invoicePayments = dao.getInvoicePayments(paymentId, internalCallContextNoAccountId);
-                final UUID accountId = dao.getAccountIdFromInvoicePaymentId(invoicePayments.get(0).getId(), internalCallContextNoAccountId);
-
-                return dao.createRefund(paymentId, amount, isInvoiceAdjusted, invoiceItemIdsWithAmounts, paymentCookieId, internalCallContextFactory.createInternalCallContext(accountId, context));
-            }
-        });
-    }
 
     @Override
     public InvoicePayment createChargeback(final UUID invoicePaymentId, final CallContext context) throws InvoiceApiException {
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java
index d0aef0f..ace0d51 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java
@@ -18,20 +18,35 @@ package com.ning.billing.invoice.api.svcs;
 
 import java.math.BigDecimal;
 import java.util.Collection;
+import java.util.List;
+import java.util.Map;
 import java.util.UUID;
 
 import javax.inject.Inject;
 
+import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
+import org.skife.jdbi.v2.exceptions.TransactionFailedException;
 
+import com.ning.billing.ErrorCode;
+import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceApiException;
+import com.ning.billing.invoice.api.InvoicePayment;
+import com.ning.billing.invoice.api.InvoicePayment.InvoicePaymentType;
 import com.ning.billing.invoice.dao.InvoiceDao;
+import com.ning.billing.invoice.model.DefaultInvoicePayment;
+import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.svcapi.invoice.InvoiceInternalApi;
 
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
+
 public class DefaultInvoiceInternalApi implements InvoiceInternalApi {
 
+    private static final WithInvoiceApiException<InvoicePayment> invoicePaymentWithException = new WithInvoiceApiException<InvoicePayment>();
+
     private final InvoiceDao dao;
 
     @Inject
@@ -58,4 +73,77 @@ public class DefaultInvoiceInternalApi implements InvoiceInternalApi {
     public BigDecimal getAccountBalance(final UUID accountId, final InternalTenantContext context) {
         return dao.getAccountBalance(accountId, context);
     }
+
+    @Override
+    public void notifyOfPayment(final UUID invoiceId, final BigDecimal amount, final Currency currency, final UUID paymentId, final DateTime paymentDate, final InternalCallContext context) throws InvoiceApiException {
+        final InvoicePayment invoicePayment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoiceId, paymentDate, amount, currency);
+        dao.notifyOfPayment(invoicePayment, context);
+    }
+
+    @Override
+    public void notifyOfPayment(final InvoicePayment invoicePayment, final InternalCallContext context) throws InvoiceApiException {
+        dao.notifyOfPayment(invoicePayment, context);
+    }
+
+    @Override
+    public InvoicePayment getInvoicePaymentForAttempt(final UUID paymentId, final InternalTenantContext context) throws InvoiceApiException {
+        final List<InvoicePayment> invoicePayments = dao.getInvoicePayments(paymentId, context);
+        if (invoicePayments.size() == 0) {
+            return null;
+        }
+        return Collections2.filter(invoicePayments, new Predicate<InvoicePayment>() {
+            @Override
+            public boolean apply(InvoicePayment input) {
+                return input.getType() == InvoicePaymentType.ATTEMPT;
+            }
+        }).iterator().next();
+    }
+
+    @Override
+    public Invoice getInvoiceForPaymentId(final UUID paymentId, final InternalTenantContext context) throws InvoiceApiException {
+        final UUID invoiceIdStr = dao.getInvoiceIdByPaymentId(paymentId, context);
+        return invoiceIdStr == null ? null : dao.getById(invoiceIdStr, context);
+    }
+
+    @Override
+    public InvoicePayment createRefund(final UUID paymentId, final BigDecimal amount, final boolean isInvoiceAdjusted, final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts, final UUID paymentCookieId, final InternalCallContext context) throws InvoiceApiException {
+        return invoicePaymentWithException.executeAndThrow(new WithInvoiceApiExceptionCallback<InvoicePayment>() {
+
+            @Override
+            public InvoicePayment doHandle() throws InvoiceApiException {
+                if (amount.compareTo(BigDecimal.ZERO) <= 0) {
+                    throw new InvoiceApiException(ErrorCode.PAYMENT_REFUND_AMOUNT_NEGATIVE_OR_NULL);
+                }
+
+                final List<InvoicePayment> invoicePayments = dao.getInvoicePayments(paymentId, context);
+                final UUID accountId = dao.getAccountIdFromInvoicePaymentId(invoicePayments.get(0).getId(), context);
+
+                return dao.createRefund(paymentId, amount, isInvoiceAdjusted, invoiceItemIdsWithAmounts, paymentCookieId, context);
+            }
+        });
+    }
+
+    //
+    // Allow to safely catch TransactionFailedException exceptions and rethrow the correct InvoiceApiException exception
+    //
+    private interface WithInvoiceApiExceptionCallback<T> {
+
+        public T doHandle() throws InvoiceApiException;
+    }
+
+    private static final class WithInvoiceApiException<T> {
+
+        public T executeAndThrow(final WithInvoiceApiExceptionCallback<T> callback) throws InvoiceApiException {
+
+            try {
+                return callback.doHandle();
+            } catch (TransactionFailedException e) {
+                if (e.getCause() instanceof InvoiceApiException) {
+                    throw (InvoiceApiException) e.getCause();
+                } else {
+                    throw e;
+                }
+            }
+        }
+    }
 }
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
index 6cd74a6..3ea248f 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
@@ -30,6 +30,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.ning.billing.ErrorCode;
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.catalog.api.Currency;
@@ -49,7 +50,6 @@ import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.tag.TagInternalApi;
 import com.ning.billing.util.svcsapi.bus.InternalBus;
@@ -94,13 +94,6 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
     }
 
     @Override
-    public void notifyOfPayment(final InvoicePayment invoicePayment, final CallContext context) throws InvoiceApiException {
-        // Retrieve the account id for the internal call context
-        final UUID accountId = dao.getAccountIdFromInvoicePaymentId(invoicePayment.getId(), internalCallContextFactory.createInternalTenantContext(context));
-        dao.notifyOfPayment(invoicePayment, internalCallContextFactory.createInternalCallContext(accountId, context));
-    }
-
-    @Override
     public BigDecimal getAccountBalance(final UUID accountId, final TenantContext context) {
         final BigDecimal result = dao.getAccountBalance(accountId, internalCallContextFactory.createInternalTenantContext(context));
         return result == null ? BigDecimal.ZERO : result;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java
index ab3cc17..007e13b 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java
@@ -52,7 +52,7 @@ import com.ning.billing.invoice.model.ItemAdjInvoiceItem;
 import com.ning.billing.invoice.model.RecurringInvoiceItem;
 import com.ning.billing.invoice.model.RefundAdjInvoiceItem;
 import com.ning.billing.invoice.notification.NextBillingDatePoster;
-import com.ning.billing.util.ChangeType;
+import com.ning.billing.util.audit.ChangeType;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.clock.Clock;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/generator/DefaultInvoiceGenerator.java b/invoice/src/main/java/com/ning/billing/invoice/generator/DefaultInvoiceGenerator.java
index 5d72e6e..06cf2e0 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/generator/DefaultInvoiceGenerator.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/generator/DefaultInvoiceGenerator.java
@@ -37,7 +37,7 @@ import org.slf4j.LoggerFactory;
 import com.ning.billing.ErrorCode;
 import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.config.InvoiceConfig;
+import com.ning.billing.util.config.InvoiceConfig;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceApiException;
 import com.ning.billing.invoice.api.InvoiceItem;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/glue/DefaultInvoiceModule.java b/invoice/src/main/java/com/ning/billing/invoice/glue/DefaultInvoiceModule.java
index 97498b4..a163515 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/glue/DefaultInvoiceModule.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/glue/DefaultInvoiceModule.java
@@ -18,7 +18,7 @@ package com.ning.billing.invoice.glue;
 
 import org.skife.config.ConfigurationObjectFactory;
 
-import com.ning.billing.config.InvoiceConfig;
+import com.ning.billing.util.config.InvoiceConfig;
 import com.ning.billing.glue.InvoiceModule;
 import com.ning.billing.invoice.InvoiceListener;
 import com.ning.billing.invoice.TagHandler;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java b/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java
index 7e1ae49..13cca7a 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java
@@ -22,8 +22,8 @@ import org.joda.time.DateTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.ning.billing.config.InvoiceConfig;
-import com.ning.billing.config.NotificationConfig;
+import com.ning.billing.util.config.InvoiceConfig;
+import com.ning.billing.util.config.NotificationConfig;
 import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.invoice.InvoiceListener;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/notification/EmailInvoiceNotifier.java b/invoice/src/main/java/com/ning/billing/invoice/notification/EmailInvoiceNotifier.java
index d86c6e9..befb7fd 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/notification/EmailInvoiceNotifier.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/notification/EmailInvoiceNotifier.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.Map;
 
 import com.ning.billing.ErrorCode;
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountEmail;
 import com.ning.billing.invoice.api.Invoice;
@@ -31,7 +32,6 @@ import com.ning.billing.invoice.template.HtmlInvoiceGenerator;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.email.DefaultEmailSender;
 import com.ning.billing.util.email.EmailApiException;
 import com.ning.billing.util.email.EmailConfig;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/TagHandler.java b/invoice/src/main/java/com/ning/billing/invoice/TagHandler.java
index 714036b..a4d70d6 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/TagHandler.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/TagHandler.java
@@ -20,13 +20,13 @@ import java.util.UUID;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.invoice.api.InvoiceApiException;
 import com.ning.billing.util.callcontext.CallOrigin;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.UserType;
 import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.events.ControlTagDeletionInternalEvent;
 import com.ning.billing.util.tag.ControlTagType;
 
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java
index 3f14f86..ccd01ae 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java
@@ -16,9 +16,6 @@
 
 package com.ning.billing.invoice.api.invoice;
 
-import static com.ning.billing.invoice.tests.InvoiceTestUtils.createAndPersistInvoice;
-import static com.ning.billing.invoice.tests.InvoiceTestUtils.createAndPersistPayment;
-
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -41,6 +38,7 @@ import com.ning.billing.invoice.api.InvoiceApiException;
 import com.ning.billing.invoice.api.InvoicePayment;
 import com.ning.billing.invoice.api.InvoicePayment.InvoicePaymentType;
 import com.ning.billing.invoice.api.InvoicePaymentApi;
+import com.ning.billing.invoice.api.svcs.DefaultInvoiceInternalApi;
 import com.ning.billing.invoice.dao.AuditedInvoiceDao;
 import com.ning.billing.invoice.dao.InvoiceDao;
 import com.ning.billing.invoice.dao.InvoiceItemSqlDao;
@@ -50,11 +48,15 @@ import com.ning.billing.invoice.notification.NextBillingDatePoster;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.clock.ClockMock;
+import com.ning.billing.util.svcapi.invoice.InvoiceInternalApi;
 import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
+import static com.ning.billing.invoice.tests.InvoiceTestUtils.createAndPersistInvoice;
+import static com.ning.billing.invoice.tests.InvoiceTestUtils.createAndPersistPayment;
+
 public class TestDefaultInvoicePaymentApi extends InvoiceTestSuiteWithEmbeddedDB {
 
     private static final BigDecimal THIRTY = new BigDecimal("30.00");
@@ -65,6 +67,7 @@ public class TestDefaultInvoicePaymentApi extends InvoiceTestSuiteWithEmbeddedDB
     private InvoiceSqlDao invoiceSqlDao;
     private InvoiceItemSqlDao invoiceItemSqlDao;
     private InvoicePaymentApi invoicePaymentApi;
+    private InvoiceInternalApi invoiceInternalApi;
     private InternalCallContextFactory internalCallContextFactory;
 
     @BeforeSuite(groups = "slow")
@@ -82,6 +85,7 @@ public class TestDefaultInvoicePaymentApi extends InvoiceTestSuiteWithEmbeddedDB
         internalCallContextFactory = new InternalCallContextFactory(dbi, clock);
         final InvoiceDao invoiceDao = new AuditedInvoiceDao(dbi, nextBillingDatePoster, clock, Mockito.mock(InternalBus.class));
         invoicePaymentApi = new DefaultInvoicePaymentApi(invoiceDao, internalCallContextFactory);
+        invoiceInternalApi = new DefaultInvoiceInternalApi(invoiceDao);
     }
 
     @Test(groups = "slow")
@@ -150,15 +154,15 @@ public class TestDefaultInvoicePaymentApi extends InvoiceTestSuiteWithEmbeddedDB
 
     private void verifyRefund(final Invoice invoice, final BigDecimal invoiceAmount, final BigDecimal refundAmount, final BigDecimal finalInvoiceAmount,
                               final boolean adjusted, final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts) throws InvoiceApiException {
-        final InvoicePayment payment = createAndPersistPayment(invoicePaymentApi, clock, invoice.getId(), invoiceAmount, CURRENCY, callContext);
+        final InvoicePayment payment = createAndPersistPayment(invoiceInternalApi, clock, invoice.getId(), invoiceAmount, CURRENCY, internalCallContext);
 
         // Verify the initial invoice balance
         final BigDecimal initialInvoiceBalance = invoicePaymentApi.getInvoice(invoice.getId(), callContext).getBalance();
         Assert.assertEquals(initialInvoiceBalance.compareTo(BigDecimal.ZERO), 0);
 
         // Create a full refund with no adjustment
-        final InvoicePayment refund = invoicePaymentApi.createRefund(payment.getPaymentId(), refundAmount, adjusted, invoiceItemIdsWithAmounts,
-                                                                     UUID.randomUUID(), callContext);
+        final InvoicePayment refund = invoiceInternalApi.createRefund(payment.getPaymentId(), refundAmount, adjusted, invoiceItemIdsWithAmounts,
+                                                                      UUID.randomUUID(), internalCallContext);
         Assert.assertEquals(refund.getAmount().compareTo(refundAmount.negate()), 0);
         Assert.assertEquals(refund.getCurrency(), CURRENCY);
         Assert.assertEquals(refund.getInvoiceId(), invoice.getId());
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
index 66ba437..ecd23bd 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
@@ -20,7 +20,6 @@ import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.CopyOnWriteArrayList;
 
@@ -34,6 +33,7 @@ import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TenantContext;
 
 public class MockInvoicePaymentApi implements InvoicePaymentApi {
+
     private final CopyOnWriteArrayList<Invoice> invoices = new CopyOnWriteArrayList<Invoice>();
     private final CopyOnWriteArrayList<InvoicePayment> invoicePayments = new CopyOnWriteArrayList<InvoicePayment>();
 
@@ -42,16 +42,6 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi {
     }
 
     @Override
-    public void notifyOfPayment(final InvoicePayment invoicePayment, final CallContext context) {
-        for (final InvoicePayment existingInvoicePayment : invoicePayments) {
-            if (existingInvoicePayment.getInvoiceId().equals(invoicePayment.getInvoiceId()) && existingInvoicePayment.getPaymentId().equals(invoicePayment.getPaymentId())) {
-                invoicePayments.remove(existingInvoicePayment);
-            }
-        }
-        invoicePayments.add(invoicePayment);
-    }
-
-    @Override
     public List<Invoice> getAllInvoicesByAccount(final UUID accountId, final TenantContext context) {
         final ArrayList<Invoice> result = new ArrayList<Invoice>();
 
@@ -73,15 +63,6 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi {
         return null;
     }
 
-    @Override
-    public Invoice getInvoiceForPaymentId(final UUID paymentId, final TenantContext context) {
-        for (final InvoicePayment invoicePayment : invoicePayments) {
-            if (invoicePayment.getPaymentId().equals(paymentId)) {
-                return getInvoice(invoicePayment.getInvoiceId(), context);
-            }
-        }
-        return null;
-    }
 
     @Override
     public List<InvoicePayment> getInvoicePayments(final UUID paymentId, final TenantContext context) {
@@ -106,12 +87,6 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi {
 
 
     @Override
-    public void notifyOfPayment(final UUID invoiceId, final BigDecimal amountOutstanding, final Currency currency, final UUID paymentId, final DateTime paymentDate, final CallContext context) {
-        final InvoicePayment invoicePayment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoiceId, paymentDate, amountOutstanding, currency);
-        notifyOfPayment(invoicePayment, context);
-    }
-
-    @Override
     public InvoicePayment createChargeback(final UUID invoicePaymentId, final BigDecimal amount, final CallContext context) throws InvoiceApiException {
         InvoicePayment existingPayment = null;
         for (final InvoicePayment payment : invoicePayments) {
@@ -123,7 +98,7 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi {
 
         if (existingPayment != null) {
             invoicePayments.add(new DefaultInvoicePayment(UUID.randomUUID(), InvoicePaymentType.CHARGED_BACK, null, null, DateTime.now(DateTimeZone.UTC), amount,
-                    Currency.USD, null, existingPayment.getId()));
+                                                          Currency.USD, null, existingPayment.getId()));
         }
 
         return existingPayment;
@@ -180,12 +155,4 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi {
     public InvoicePayment getChargebackById(final UUID chargebackId, final TenantContext context) {
         throw new UnsupportedOperationException();
     }
-
-    @Override
-    public InvoicePayment createRefund(final UUID paymentId, final BigDecimal amount, final boolean isInvoiceAdjusted,
-                                       final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts, final UUID paymentCookieId,
-                                       final CallContext context)
-            throws InvoiceApiException {
-        return null;
-    }
 }
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/user/TestDefaultInvoiceUserApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/user/TestDefaultInvoiceUserApi.java
index cf256f0..97606ba 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/user/TestDefaultInvoiceUserApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/user/TestDefaultInvoiceUserApi.java
@@ -28,6 +28,7 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import com.ning.billing.ErrorCode;
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.invoice.api.InvoiceApiException;
 import com.ning.billing.invoice.api.InvoiceItem;
@@ -40,7 +41,6 @@ import com.ning.billing.util.callcontext.CallOrigin;
 import com.ning.billing.util.callcontext.DefaultCallContextFactory;
 import com.ning.billing.util.callcontext.TenantContext;
 import com.ning.billing.util.callcontext.UserType;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.ControlTagType;
 import com.ning.billing.util.tag.Tag;
 
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java
index 7af8b5e..75919ac 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java
@@ -27,7 +27,7 @@ import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 
 import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
-import com.ning.billing.config.InvoiceConfig;
+import com.ning.billing.util.config.InvoiceConfig;
 import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.invoice.generator.DefaultInvoiceGenerator;
 import com.ning.billing.invoice.generator.InvoiceGenerator;
diff --git a/invoice/src/test/java/com/ning/billing/invoice/generator/TestDefaultInvoiceGenerator.java b/invoice/src/test/java/com/ning/billing/invoice/generator/TestDefaultInvoiceGenerator.java
index 9dd602c..86488d9 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/generator/TestDefaultInvoiceGenerator.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/generator/TestDefaultInvoiceGenerator.java
@@ -44,7 +44,7 @@ import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.catalog.api.PhaseType;
 import com.ning.billing.catalog.api.Plan;
 import com.ning.billing.catalog.api.PlanPhase;
-import com.ning.billing.config.InvoiceConfig;
+import com.ning.billing.util.config.InvoiceConfig;
 import com.ning.billing.entitlement.api.SubscriptionTransitionType;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.invoice.MockBillingEventSet;
diff --git a/invoice/src/test/java/com/ning/billing/invoice/generator/TestDefaultInvoiceGeneratorUnit.java b/invoice/src/test/java/com/ning/billing/invoice/generator/TestDefaultInvoiceGeneratorUnit.java
index ead2db7..c78c286 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/generator/TestDefaultInvoiceGeneratorUnit.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/generator/TestDefaultInvoiceGeneratorUnit.java
@@ -26,7 +26,7 @@ import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
 import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.config.InvoiceConfig;
+import com.ning.billing.util.config.InvoiceConfig;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.api.InvoiceItemType;
diff --git a/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java b/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
index 170907a..fe1b45d 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
@@ -37,7 +37,7 @@ import org.testng.annotations.Test;
 
 import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
 import com.ning.billing.catalog.MockCatalogModule;
-import com.ning.billing.config.InvoiceConfig;
+import com.ning.billing.util.config.InvoiceConfig;
 import com.ning.billing.dbi.DBIProvider;
 import com.ning.billing.dbi.DbiConfig;
 import com.ning.billing.dbi.MysqlTestingHelper;
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/InvoiceTestUtils.java b/invoice/src/test/java/com/ning/billing/invoice/tests/InvoiceTestUtils.java
index d572117..574457f 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/InvoiceTestUtils.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/InvoiceTestUtils.java
@@ -29,13 +29,14 @@ import com.ning.billing.invoice.api.InvoiceApiException;
 import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.api.InvoicePayment;
 import com.ning.billing.invoice.api.InvoicePayment.InvoicePaymentType;
-import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.invoice.dao.InvoiceItemSqlDao;
 import com.ning.billing.invoice.dao.InvoiceSqlDao;
 import com.ning.billing.invoice.model.FixedPriceInvoiceItem;
 import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.clock.Clock;
+import com.ning.billing.util.svcapi.invoice.InvoiceInternalApi;
 
 import com.google.common.collect.ImmutableList;
 
@@ -90,12 +91,12 @@ public class InvoiceTestUtils {
                                          "charge back test", "charge back phase", clock.getUTCToday(), amount, currency);
     }
 
-    public static InvoicePayment createAndPersistPayment(final InvoicePaymentApi invoicePaymentApi,
+    public static InvoicePayment createAndPersistPayment(final InvoiceInternalApi invoicePaymentApi,
                                                          final Clock clock,
                                                          final UUID invoiceId,
                                                          final BigDecimal amount,
                                                          final Currency currency,
-                                                         final CallContext callContext) throws InvoiceApiException {
+                                                         final InternalCallContext callContext) throws InvoiceApiException {
         final InvoicePayment payment = Mockito.mock(InvoicePayment.class);
         Mockito.when(payment.getId()).thenReturn(UUID.randomUUID());
         Mockito.when(payment.getType()).thenReturn(InvoicePaymentType.ATTEMPT);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java b/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
index 5280304..78904ec 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
@@ -16,13 +16,6 @@
 
 package com.ning.billing.invoice.tests;
 
-import static com.ning.billing.invoice.tests.InvoiceTestUtils.createAndPersistInvoice;
-import static com.ning.billing.invoice.tests.InvoiceTestUtils.createAndPersistPayment;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.net.URL;
@@ -44,6 +37,7 @@ import com.ning.billing.invoice.api.InvoiceApiException;
 import com.ning.billing.invoice.api.InvoicePayment;
 import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.invoice.api.invoice.DefaultInvoicePaymentApi;
+import com.ning.billing.invoice.api.svcs.DefaultInvoiceInternalApi;
 import com.ning.billing.invoice.dao.AuditedInvoiceDao;
 import com.ning.billing.invoice.dao.InvoiceDao;
 import com.ning.billing.invoice.dao.InvoiceItemSqlDao;
@@ -54,8 +48,16 @@ import com.ning.billing.invoice.notification.NextBillingDatePoster;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.clock.ClockMock;
+import com.ning.billing.util.svcapi.invoice.InvoiceInternalApi;
 import com.ning.billing.util.svcsapi.bus.InternalBus;
 
+import static com.ning.billing.invoice.tests.InvoiceTestUtils.createAndPersistInvoice;
+import static com.ning.billing.invoice.tests.InvoiceTestUtils.createAndPersistPayment;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+
 public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
 
     private static final BigDecimal FIFTEEN = new BigDecimal("15.00");
@@ -64,6 +66,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
     private InvoiceSqlDao invoiceSqlDao;
     private InvoiceItemSqlDao invoiceItemSqlDao;
     private InvoicePaymentApi invoicePaymentApi;
+    private InvoiceInternalApi invoiceApi;
     private InternalCallContextFactory internalCallContextFactory;
 
     private final Clock clock = new ClockMock();
@@ -85,6 +88,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
         internalCallContextFactory = new InternalCallContextFactory(dbi, clock);
         final InvoiceDao invoiceDao = new AuditedInvoiceDao(dbi, nextBillingDatePoster, clock, Mockito.mock(InternalBus.class));
         invoicePaymentApi = new DefaultInvoicePaymentApi(invoiceDao, internalCallContextFactory);
+        invoiceApi = new DefaultInvoiceInternalApi(invoiceDao);
     }
 
     private static void loadSystemPropertiesFromClasspath(final String resource) {
@@ -100,7 +104,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
     @Test(groups = "slow")
     public void testCompleteChargeBack() throws InvoiceApiException {
         final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, THIRTY, CURRENCY, callContext, internalCallContextFactory);
-        final InvoicePayment payment = createAndPersistPayment(invoicePaymentApi, clock, invoice.getId(), THIRTY, CURRENCY, callContext);
+        final InvoicePayment payment = createAndPersistPayment(invoiceApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
 
         // create a full charge back
         invoicePaymentApi.createChargeback(payment.getId(), THIRTY, callContext);
@@ -113,7 +117,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
     @Test(groups = "slow")
     public void testPartialChargeBack() throws InvoiceApiException {
         final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, THIRTY, CURRENCY, callContext, internalCallContextFactory);
-        final InvoicePayment payment = createAndPersistPayment(invoicePaymentApi, clock, invoice.getId(), THIRTY, CURRENCY, callContext);
+        final InvoicePayment payment = createAndPersistPayment(invoiceApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
 
         // create a partial charge back
         invoicePaymentApi.createChargeback(payment.getId(), FIFTEEN, callContext);
@@ -127,7 +131,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
     public void testChargeBackLargerThanPaymentAmount() throws InvoiceApiException {
         try {
             final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, THIRTY, CURRENCY, callContext, internalCallContextFactory);
-            final InvoicePayment payment = createAndPersistPayment(invoicePaymentApi, clock, invoice.getId(), THIRTY, CURRENCY, callContext);
+            final InvoicePayment payment = createAndPersistPayment(invoiceApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
 
             // create a large charge back
             invoicePaymentApi.createChargeback(payment.getId(), ONE_MILLION, callContext);
@@ -141,7 +145,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
     public void testNegativeChargeBackAmount() throws InvoiceApiException {
         try {
             final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, THIRTY, CURRENCY, callContext, internalCallContextFactory);
-            final InvoicePayment payment = createAndPersistPayment(invoicePaymentApi, clock, invoice.getId(), THIRTY, CURRENCY, callContext);
+            final InvoicePayment payment = createAndPersistPayment(invoiceApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
 
             // create a partial charge back
             invoicePaymentApi.createChargeback(payment.getId(), BigDecimal.ONE.negate(), callContext);
@@ -153,7 +157,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
     @Test(groups = "slow")
     public void testGetAccountIdFromPaymentIdHappyPath() throws InvoiceApiException {
         final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, THIRTY, CURRENCY, callContext, internalCallContextFactory);
-        final InvoicePayment payment = createAndPersistPayment(invoicePaymentApi, clock, invoice.getId(), THIRTY, CURRENCY, callContext);
+        final InvoicePayment payment = createAndPersistPayment(invoiceApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
         final UUID accountId = invoicePaymentApi.getAccountIdFromInvoicePaymentId(payment.getId(), callContext);
         assertEquals(accountId, invoice.getAccountId());
     }
@@ -173,7 +177,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
     @Test(groups = "slow")
     public void testGetChargeBacksByAccountIdHappyPath() throws InvoiceApiException {
         final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, THIRTY, CURRENCY, callContext, internalCallContextFactory);
-        final InvoicePayment payment = createAndPersistPayment(invoicePaymentApi, clock, invoice.getId(), THIRTY, CURRENCY, callContext);
+        final InvoicePayment payment = createAndPersistPayment(invoiceApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
 
         // create a partial charge back
         invoicePaymentApi.createChargeback(payment.getId(), FIFTEEN, callContext);
@@ -194,7 +198,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
     @Test(groups = "slow")
     public void testGetChargeBacksByInvoicePaymentIdHappyPath() throws InvoiceApiException {
         final Invoice invoice = createAndPersistInvoice(invoiceSqlDao, invoiceItemSqlDao, clock, THIRTY, CURRENCY, callContext, internalCallContextFactory);
-        final InvoicePayment payment = createAndPersistPayment(invoicePaymentApi, clock, invoice.getId(), THIRTY, CURRENCY, callContext);
+        final InvoicePayment payment = createAndPersistPayment(invoiceApi, clock, invoice.getId(), THIRTY, CURRENCY, internalCallContext);
 
         // create a partial charge back
         invoicePaymentApi.createChargeback(payment.getId(), FIFTEEN, callContext);
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/TagDefinitionJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/TagDefinitionJson.java
index 630c5ae..d31ea05 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/TagDefinitionJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/TagDefinitionJson.java
@@ -20,7 +20,7 @@ import java.util.List;
 
 import javax.annotation.Nullable;
 
-import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.tag.TagDefinition;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
index 1039683..4777f64 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
@@ -40,6 +40,7 @@ import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.UriInfo;
 
 import com.ning.billing.ErrorCode;
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.AccountData;
@@ -86,7 +87,6 @@ import com.ning.billing.util.audit.AuditLogsForPayments;
 import com.ning.billing.util.audit.AuditLogsForRefunds;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.ControlTagType;
 
 import com.google.common.base.Function;
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java
index 13880d3..3bca566 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java
@@ -38,6 +38,7 @@ import javax.ws.rs.core.UriInfo;
 
 import org.joda.time.DateTime;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.entitlement.api.transfer.EntitlementTransferApi;
 import com.ning.billing.entitlement.api.transfer.EntitlementTransferApiException;
 import com.ning.billing.entitlement.api.user.EntitlementUserApi;
@@ -56,7 +57,6 @@ import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.dao.ObjectType;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Collections2;
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CatalogResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CatalogResource.java
index e709110..dac0ef8 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CatalogResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CatalogResource.java
@@ -38,7 +38,7 @@ import com.ning.billing.jaxrs.util.JaxrsUriBuilder;
 import com.ning.billing.util.api.AuditUserApi;
 import com.ning.billing.util.api.CustomFieldUserApi;
 import com.ning.billing.util.api.TagUserApi;
-import com.ning.billing.util.config.XMLWriter;
+import com.ning.billing.util.config.catalog.XMLWriter;
 
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargebackResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargebackResource.java
index b302360..185a7c6 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargebackResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargebackResource.java
@@ -31,6 +31,7 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.Response;
 
 import com.ning.billing.ErrorCode;
+import com.ning.billing.ObjectType;
 import com.ning.billing.invoice.api.InvoiceApiException;
 import com.ning.billing.invoice.api.InvoicePayment;
 import com.ning.billing.invoice.api.InvoicePaymentApi;
@@ -43,7 +44,6 @@ import com.ning.billing.util.api.CustomFieldUserApi;
 import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.dao.ObjectType;
 
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java
index 08286d9..6cd92d2 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java
@@ -30,6 +30,7 @@ import javax.ws.rs.core.Response;
 
 import org.joda.time.LocalDate;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.AccountUserApi;
@@ -44,7 +45,6 @@ import com.ning.billing.util.api.CustomFieldUserApi;
 import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.dao.ObjectType;
 
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
index 5b3b0dc..5e84036 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/InvoiceResource.java
@@ -44,6 +44,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.ning.billing.ErrorCode;
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.AccountUserApi;
@@ -71,7 +72,6 @@ import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TenantContext;
 import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.dao.ObjectType;
 
 import com.google.common.base.Objects;
 import com.google.inject.Inject;
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java
index 071c300..4114e9e 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxRsResourceBase.java
@@ -33,6 +33,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.ning.billing.ErrorCode;
+import com.ning.billing.ObjectType;
 import com.ning.billing.jaxrs.json.CustomFieldJson;
 import com.ning.billing.jaxrs.json.TagJson;
 import com.ning.billing.jaxrs.util.Context;
@@ -46,7 +47,6 @@ import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TenantContext;
 import com.ning.billing.util.customfield.CustomField;
 import com.ning.billing.util.customfield.StringCustomField;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.Tag;
 import com.ning.billing.util.tag.TagDefinition;
 
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentMethodResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentMethodResource.java
index 7008bd5..b7ce0ea 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentMethodResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentMethodResource.java
@@ -32,6 +32,7 @@ import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.AccountUserApi;
@@ -46,7 +47,6 @@ import com.ning.billing.util.api.CustomFieldUserApi;
 import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.dao.ObjectType;
 
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentResource.java
index 83c15d9..2b22ea1 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentResource.java
@@ -38,6 +38,7 @@ import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.UriInfo;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.AccountUserApi;
@@ -62,7 +63,6 @@ import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.dao.ObjectType;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Collections2;
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/RefundResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/RefundResource.java
index c0fe294..b9dd607 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/RefundResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/RefundResource.java
@@ -26,6 +26,7 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.jaxrs.json.RefundJson;
 import com.ning.billing.jaxrs.util.Context;
 import com.ning.billing.jaxrs.util.JaxrsUriBuilder;
@@ -35,7 +36,6 @@ import com.ning.billing.payment.api.Refund;
 import com.ning.billing.util.api.AuditUserApi;
 import com.ning.billing.util.api.CustomFieldUserApi;
 import com.ning.billing.util.api.TagUserApi;
-import com.ning.billing.util.dao.ObjectType;
 
 import com.google.inject.Inject;
 
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/SubscriptionResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/SubscriptionResource.java
index 82cc46a..590ec31 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/SubscriptionResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/SubscriptionResource.java
@@ -41,6 +41,7 @@ import org.joda.time.DateTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.catalog.api.ActionPolicy;
 import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.PlanPhaseSpecifier;
@@ -59,7 +60,6 @@ import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.events.EffectiveSubscriptionInternalEvent;
 import com.ning.billing.util.events.InvoiceCreationInternalEvent;
 import com.ning.billing.util.events.NullInvoiceInternalEvent;
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TagResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TagResource.java
index 962a927..13aa102 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TagResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TagResource.java
@@ -32,6 +32,7 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.jaxrs.json.TagDefinitionJson;
 import com.ning.billing.jaxrs.util.Context;
 import com.ning.billing.jaxrs.util.JaxrsUriBuilder;
@@ -39,7 +40,6 @@ import com.ning.billing.util.api.AuditUserApi;
 import com.ning.billing.util.api.CustomFieldUserApi;
 import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.api.TagUserApi;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.TagDefinition;
 
 import com.google.inject.Inject;
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TenantResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TenantResource.java
index d7cbf2a..453e34c 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TenantResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/TenantResource.java
@@ -36,6 +36,7 @@ import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.UriBuilder;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.jaxrs.json.TenantJson;
 import com.ning.billing.jaxrs.json.TenantKeyJson;
 import com.ning.billing.jaxrs.util.Context;
@@ -50,7 +51,6 @@ import com.ning.billing.util.api.CustomFieldUserApi;
 import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.dao.ObjectType;
 
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAuditLogJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAuditLogJson.java
index 4427556..e7784f2 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAuditLogJson.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAuditLogJson.java
@@ -23,8 +23,8 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.ning.billing.jaxrs.JaxrsTestSuite;
-import com.ning.billing.util.ChangeType;
 import com.ning.billing.util.audit.AuditLog;
+import com.ning.billing.util.audit.ChangeType;
 import com.ning.billing.util.audit.DefaultAuditLog;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.clock.DefaultClock;
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingAccountUserApi.java b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingAccountUserApi.java
index c9a8171..3d8a7ab 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingAccountUserApi.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingAccountUserApi.java
@@ -101,11 +101,6 @@ public class BlockingAccountUserApi implements AccountUserApi {
     }
 
     @Override
-    public void saveEmails(final UUID accountId, final List<AccountEmail> emails, final CallContext context) {
-        userApi.saveEmails(accountId, emails, context);
-    }
-
-    @Override
     public void addEmail(final UUID accountId, final AccountEmail email, final CallContext context) {
         userApi.addEmail(accountId, email, context);
     }
@@ -114,14 +109,4 @@ public class BlockingAccountUserApi implements AccountUserApi {
     public void removeEmail(final UUID accountId, final AccountEmail email, final CallContext context) {
         userApi.removeEmail(accountId, email, context);
     }
-
-    @Override
-    public void updatePaymentMethod(final UUID accountId, final UUID paymentMethodId, CallContext context) throws AccountApiException {
-        userApi.updatePaymentMethod(accountId, paymentMethodId, context);
-    }
-
-    @Override
-    public void removePaymentMethod(final UUID accountId, final CallContext context) throws AccountApiException {
-        userApi.removePaymentMethod(accountId, context);
-    }
 }
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultInternalBillingApi.java b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultInternalBillingApi.java
index bd541e8..591ff9e 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultInternalBillingApi.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultInternalBillingApi.java
@@ -24,6 +24,7 @@ import java.util.UUID;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.BillCycleDay;
@@ -33,7 +34,6 @@ import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.util.callcontext.InternalCallContext;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.events.EffectiveSubscriptionInternalEvent;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
diff --git a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
index 6c170a0..e268b3a 100644
--- a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
+++ b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
@@ -38,6 +38,7 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.BeforeSuite;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.catalog.MockCatalog;
@@ -68,7 +69,6 @@ import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.events.EffectiveSubscriptionInternalEvent;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
diff --git a/overdue/src/main/java/com/ning/billing/ovedue/notification/DefaultOverdueCheckNotifier.java b/overdue/src/main/java/com/ning/billing/ovedue/notification/DefaultOverdueCheckNotifier.java
index 0cd7104..39b7ef4 100644
--- a/overdue/src/main/java/com/ning/billing/ovedue/notification/DefaultOverdueCheckNotifier.java
+++ b/overdue/src/main/java/com/ning/billing/ovedue/notification/DefaultOverdueCheckNotifier.java
@@ -21,7 +21,7 @@ import org.joda.time.DateTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.ning.billing.config.NotificationConfig;
+import com.ning.billing.util.config.NotificationConfig;
 import com.ning.billing.overdue.OverdueProperties;
 import com.ning.billing.overdue.listener.OverdueListener;
 import com.ning.billing.overdue.service.DefaultOverdueService;
diff --git a/overdue/src/main/java/com/ning/billing/overdue/api/DefaultOverdueUserApi.java b/overdue/src/main/java/com/ning/billing/overdue/api/DefaultOverdueUserApi.java
index 9f02691..82568b0 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/api/DefaultOverdueUserApi.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/api/DefaultOverdueUserApi.java
@@ -20,6 +20,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.ning.billing.ErrorCode;
+import com.ning.billing.ObjectType;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.junction.api.Blockable;
 import com.ning.billing.junction.api.Blockable.Type;
@@ -36,7 +37,6 @@ import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
 
 import com.google.inject.Inject;
diff --git a/overdue/src/main/java/com/ning/billing/overdue/config/DefaultCondition.java b/overdue/src/main/java/com/ning/billing/overdue/config/DefaultCondition.java
index 359beaa..1d827ae 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/config/DefaultCondition.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/config/DefaultCondition.java
@@ -24,9 +24,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
 
-import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
-import org.joda.time.Period;
 
 import com.ning.billing.catalog.api.Duration;
 import com.ning.billing.catalog.api.TimeUnit;
@@ -34,8 +32,8 @@ import com.ning.billing.junction.api.Blockable;
 import com.ning.billing.overdue.Condition;
 import com.ning.billing.overdue.config.api.BillingState;
 import com.ning.billing.overdue.config.api.PaymentResponse;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 import com.ning.billing.util.tag.ControlTagType;
 import com.ning.billing.util.tag.Tag;
 
diff --git a/overdue/src/main/java/com/ning/billing/overdue/config/DefaultDuration.java b/overdue/src/main/java/com/ning/billing/overdue/config/DefaultDuration.java
index e704ab7..36083e9 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/config/DefaultDuration.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/config/DefaultDuration.java
@@ -25,8 +25,8 @@ import org.joda.time.Period;
 
 import com.ning.billing.catalog.api.Duration;
 import com.ning.billing.catalog.api.TimeUnit;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 @XmlAccessorType(XmlAccessType.NONE)
 public class DefaultDuration extends ValidatingConfig<OverdueConfig> implements Duration {
diff --git a/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueState.java b/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueState.java
index d95b487..ee2bfe6 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueState.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueState.java
@@ -31,9 +31,9 @@ import com.ning.billing.overdue.EmailNotification;
 import com.ning.billing.overdue.OverdueApiException;
 import com.ning.billing.overdue.OverdueCancellationPolicicy;
 import com.ning.billing.overdue.OverdueState;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationError;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationError;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 @XmlAccessorType(XmlAccessType.NONE)
 public class DefaultOverdueState<T extends Blockable> extends ValidatingConfig<OverdueConfig> implements OverdueState<T> {
diff --git a/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueStateSet.java b/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueStateSet.java
index 507ec08..b72c95f 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueStateSet.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueStateSet.java
@@ -28,8 +28,8 @@ import com.ning.billing.overdue.OverdueApiException;
 import com.ning.billing.overdue.OverdueState;
 import com.ning.billing.overdue.config.api.BillingState;
 import com.ning.billing.overdue.config.api.OverdueStateSet;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
 
 @XmlAccessorType(XmlAccessType.NONE)
diff --git a/overdue/src/main/java/com/ning/billing/overdue/config/OverdueConfig.java b/overdue/src/main/java/com/ning/billing/overdue/config/OverdueConfig.java
index 36b97fc..0a617fa 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/config/OverdueConfig.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/config/OverdueConfig.java
@@ -23,8 +23,8 @@ import javax.xml.bind.annotation.XmlRootElement;
 import java.net.URI;
 
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
-import com.ning.billing.util.config.ValidatingConfig;
-import com.ning.billing.util.config.ValidationErrors;
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationErrors;
 
 @XmlRootElement(name = "overdueConfig")
 @XmlAccessorType(XmlAccessType.NONE)
diff --git a/overdue/src/main/java/com/ning/billing/overdue/OverdueProperties.java b/overdue/src/main/java/com/ning/billing/overdue/OverdueProperties.java
index 4afe64e..71d3511 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/OverdueProperties.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/OverdueProperties.java
@@ -19,8 +19,8 @@ package com.ning.billing.overdue;
 import org.skife.config.Config;
 import org.skife.config.Default;
 
-import com.ning.billing.config.KillbillConfig;
-import com.ning.billing.config.NotificationConfig;
+import com.ning.billing.util.config.KillbillConfig;
+import com.ning.billing.util.config.NotificationConfig;
 
 
 public interface OverdueProperties extends NotificationConfig, KillbillConfig {
diff --git a/overdue/src/main/java/com/ning/billing/overdue/service/DefaultOverdueService.java b/overdue/src/main/java/com/ning/billing/overdue/service/DefaultOverdueService.java
index c3ea860..1a94fb4 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/service/DefaultOverdueService.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/service/DefaultOverdueService.java
@@ -32,7 +32,7 @@ import com.ning.billing.overdue.api.DefaultOverdueUserApi;
 import com.ning.billing.overdue.config.OverdueConfig;
 import com.ning.billing.overdue.listener.OverdueListener;
 import com.ning.billing.overdue.wrapper.OverdueWrapperFactory;
-import com.ning.billing.util.config.XMLLoader;
+import com.ning.billing.util.config.catalog.XMLLoader;
 import com.ning.billing.util.svcsapi.bus.BusService;
 import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
 
diff --git a/overdue/src/test/java/com/ning/billing/overdue/applicator/TestOverdueStateApplicator.java b/overdue/src/test/java/com/ning/billing/overdue/applicator/TestOverdueStateApplicator.java
index c57c398..6c2a9f7 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/applicator/TestOverdueStateApplicator.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/applicator/TestOverdueStateApplicator.java
@@ -34,7 +34,7 @@ import com.ning.billing.overdue.OverdueState;
 import com.ning.billing.overdue.OverdueTestBase;
 import com.ning.billing.overdue.config.OverdueConfig;
 import com.ning.billing.util.svcsapi.bus.InternalBus;
-import com.ning.billing.util.config.XMLLoader;
+import com.ning.billing.util.config.catalog.XMLLoader;
 import com.ning.billing.util.events.OverdueChangeInternalEvent;
 import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
 
diff --git a/overdue/src/test/java/com/ning/billing/overdue/config/CreateOverdueConfigSchema.java b/overdue/src/test/java/com/ning/billing/overdue/config/CreateOverdueConfigSchema.java
index 61e2fbe..92dc782 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/config/CreateOverdueConfigSchema.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/config/CreateOverdueConfigSchema.java
@@ -20,7 +20,7 @@ import java.io.File;
 import java.io.FileWriter;
 import java.io.Writer;
 
-import com.ning.billing.util.config.XMLSchemaGenerator;
+import com.ning.billing.util.config.catalog.XMLSchemaGenerator;
 
 public class CreateOverdueConfigSchema {
     public static void main(final String[] args) throws Exception {
diff --git a/overdue/src/test/java/com/ning/billing/overdue/config/io/TestReadConfig.java b/overdue/src/test/java/com/ning/billing/overdue/config/io/TestReadConfig.java
index bc65015..efc1660 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/config/io/TestReadConfig.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/config/io/TestReadConfig.java
@@ -21,7 +21,7 @@ import org.testng.annotations.Test;
 import com.google.common.io.Resources;
 import com.ning.billing.overdue.OverdueTestSuite;
 import com.ning.billing.overdue.config.OverdueConfig;
-import com.ning.billing.util.config.XMLLoader;
+import com.ning.billing.util.config.catalog.XMLLoader;
 
 public class TestReadConfig extends OverdueTestSuite {
     @Test(groups = "fast")
diff --git a/overdue/src/test/java/com/ning/billing/overdue/config/TestCondition.java b/overdue/src/test/java/com/ning/billing/overdue/config/TestCondition.java
index 1531a8a..f9d9583 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/config/TestCondition.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/config/TestCondition.java
@@ -32,7 +32,7 @@ import com.ning.billing.junction.api.Blockable;
 import com.ning.billing.overdue.OverdueTestSuite;
 import com.ning.billing.overdue.config.api.BillingState;
 import com.ning.billing.overdue.config.api.PaymentResponse;
-import com.ning.billing.util.config.XMLLoader;
+import com.ning.billing.util.config.catalog.XMLLoader;
 import com.ning.billing.util.tag.ControlTagType;
 import com.ning.billing.util.tag.DefaultControlTag;
 import com.ning.billing.util.tag.DescriptiveTag;
diff --git a/overdue/src/test/java/com/ning/billing/overdue/config/TestOverdueConfig.java b/overdue/src/test/java/com/ning/billing/overdue/config/TestOverdueConfig.java
index 534f12f..47043c4 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/config/TestOverdueConfig.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/config/TestOverdueConfig.java
@@ -24,7 +24,7 @@ import org.testng.annotations.Test;
 
 import com.ning.billing.overdue.EmailNotification;
 import com.ning.billing.overdue.OverdueTestSuite;
-import com.ning.billing.util.config.XMLLoader;
+import com.ning.billing.util.config.catalog.XMLLoader;
 
 public class TestOverdueConfig extends OverdueTestSuite {
 
diff --git a/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java b/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java
index 6764274..6f9541b 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java
@@ -38,8 +38,8 @@ import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.catalog.DefaultCatalogService;
 import com.ning.billing.catalog.api.CatalogService;
-import com.ning.billing.config.CatalogConfig;
-import com.ning.billing.config.InvoiceConfig;
+import com.ning.billing.util.config.CatalogConfig;
+import com.ning.billing.util.config.InvoiceConfig;
 import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
 import com.ning.billing.entitlement.api.user.Subscription;
diff --git a/overdue/src/test/java/com/ning/billing/overdue/wrapper/TestOverdueWrapper.java b/overdue/src/test/java/com/ning/billing/overdue/wrapper/TestOverdueWrapper.java
index be25940..d2aad4d 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/wrapper/TestOverdueWrapper.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/wrapper/TestOverdueWrapper.java
@@ -26,7 +26,7 @@ import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.overdue.OverdueState;
 import com.ning.billing.overdue.OverdueTestBase;
 import com.ning.billing.overdue.config.OverdueConfig;
-import com.ning.billing.util.config.XMLLoader;
+import com.ning.billing.util.config.catalog.XMLLoader;
 import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
 
 public class TestOverdueWrapper extends OverdueTestBase {
diff --git a/payment/src/main/java/com/ning/billing/payment/api/svcs/DefaultPaymentInternalApi.java b/payment/src/main/java/com/ning/billing/payment/api/svcs/DefaultPaymentInternalApi.java
new file mode 100644
index 0000000..035650e
--- /dev/null
+++ b/payment/src/main/java/com/ning/billing/payment/api/svcs/DefaultPaymentInternalApi.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.payment.api.svcs;
+
+import java.util.List;
+import java.util.UUID;
+
+import javax.inject.Inject;
+
+import com.ning.billing.ErrorCode;
+import com.ning.billing.account.api.Account;
+import com.ning.billing.payment.api.Payment;
+import com.ning.billing.payment.api.PaymentApiException;
+import com.ning.billing.payment.api.PaymentMethod;
+import com.ning.billing.payment.core.PaymentMethodProcessor;
+import com.ning.billing.payment.core.PaymentProcessor;
+import com.ning.billing.util.callcontext.InternalTenantContext;
+import com.ning.billing.util.svcapi.payment.PaymentInternalApi;
+
+public class DefaultPaymentInternalApi implements PaymentInternalApi {
+
+    private final PaymentProcessor paymentProcessor;
+    private final PaymentMethodProcessor methodProcessor;
+
+    @Inject
+    public DefaultPaymentInternalApi(final PaymentProcessor paymentProcessor, final PaymentMethodProcessor methodProcessor) {
+        this.paymentProcessor = paymentProcessor;
+        this.methodProcessor = methodProcessor;
+    }
+
+    @Override
+    public Payment getPayment(final UUID paymentId, final InternalTenantContext context) throws PaymentApiException {
+        final Payment payment = paymentProcessor.getPayment(paymentId, context);
+        if (payment == null) {
+            throw new PaymentApiException(ErrorCode.PAYMENT_NO_SUCH_PAYMENT, paymentId);
+        }
+        return payment;
+    }
+
+    @Override
+    public PaymentMethod getPaymentMethod(final Account account, final UUID paymentMethodId, final boolean withPluginDetail, final InternalTenantContext context) throws PaymentApiException {
+        return methodProcessor.getPaymentMethod(account, paymentMethodId, withPluginDetail, context);
+    }
+
+    @Override
+    public List<Payment> getAccountPayments(final UUID accountId, final InternalTenantContext context) throws PaymentApiException {
+        return paymentProcessor.getAccountPayments(accountId, context);
+    }
+
+    @Override
+    public List<PaymentMethod> getPaymentMethods(final Account account, final boolean withPluginDetail, final InternalTenantContext context) throws PaymentApiException {
+        return methodProcessor.getPaymentMethods(account, withPluginDetail, context);
+    }
+}
diff --git a/payment/src/main/java/com/ning/billing/payment/bus/TagHandler.java b/payment/src/main/java/com/ning/billing/payment/bus/TagHandler.java
index 673797c..98754ed 100644
--- a/payment/src/main/java/com/ning/billing/payment/bus/TagHandler.java
+++ b/payment/src/main/java/com/ning/billing/payment/bus/TagHandler.java
@@ -21,6 +21,7 @@ import java.util.UUID;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.payment.api.PaymentApiException;
@@ -32,7 +33,6 @@ import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.callcontext.UserType;
 import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.events.ControlTagDeletionInternalEvent;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.tag.ControlTagType;
diff --git a/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java b/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java
index a3b0a3f..40bdb84 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java
@@ -36,10 +36,9 @@ import org.slf4j.LoggerFactory;
 import com.ning.billing.ErrorCode;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
-import com.ning.billing.config.PaymentConfig;
+import com.ning.billing.util.config.PaymentConfig;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceApiException;
-import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.payment.api.DefaultPayment;
 import com.ning.billing.payment.api.DefaultPaymentErrorEvent;
 import com.ning.billing.payment.api.DefaultPaymentInfoEvent;
@@ -65,6 +64,7 @@ import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.events.PaymentErrorInternalEvent;
 import com.ning.billing.util.globallocker.GlobalLocker;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.invoice.InvoiceInternalApi;
 import com.ning.billing.util.svcapi.tag.TagInternalApi;
 import com.ning.billing.util.svcsapi.bus.InternalBus;
 
@@ -75,7 +75,7 @@ import com.google.inject.name.Named;
 public class PaymentProcessor extends ProcessorBase {
 
     private final PaymentMethodProcessor paymentMethodProcessor;
-    private final InvoicePaymentApi invoicePaymentApi;
+    private final InvoiceInternalApi invoiceApi;
     private final FailedPaymentRetryServiceScheduler failedPaymentRetryService;
     private final PluginFailureRetryServiceScheduler pluginFailureRetryService;
     private final AutoPayRetryServiceScheduler autoPayoffRetryService;
@@ -93,7 +93,7 @@ public class PaymentProcessor extends ProcessorBase {
     public PaymentProcessor(final PaymentProviderPluginRegistry pluginRegistry,
                             final PaymentMethodProcessor paymentMethodProcessor,
                             final AccountInternalApi accountUserApi,
-                            final InvoicePaymentApi invoicePaymentApi,
+                            final InvoiceInternalApi invoiceApi,
                             final TagInternalApi tagUserApi,
                             final FailedPaymentRetryServiceScheduler failedPaymentRetryService,
                             final PluginFailureRetryServiceScheduler pluginFailureRetryService,
@@ -106,7 +106,7 @@ public class PaymentProcessor extends ProcessorBase {
                             @Named(PLUGIN_EXECUTOR_NAMED) final ExecutorService executor) {
         super(pluginRegistry, accountUserApi, eventBus, paymentDao, tagUserApi, locker, executor);
         this.paymentMethodProcessor = paymentMethodProcessor;
-        this.invoicePaymentApi = invoicePaymentApi;
+        this.invoiceApi = invoiceApi;
         this.failedPaymentRetryService = failedPaymentRetryService;
         this.pluginFailureRetryService = pluginFailureRetryService;
         this.autoPayoffRetryService = autoPayoffRetryService;
@@ -229,7 +229,7 @@ public class PaymentProcessor extends ProcessorBase {
 
 
                     try {
-                        final Invoice invoice = invoicePaymentApi.getInvoice(invoiceId, context.toCallContext());
+                        final Invoice invoice = invoiceApi.getInvoiceById(invoiceId, context);
 
                         if (invoice.isMigrationInvoice()) {
                             log.error("Received invoice for payment that is a migration invoice - don't know how to handle those yet: {}", invoice);
@@ -353,7 +353,7 @@ public class PaymentProcessor extends ProcessorBase {
                             return null;
                         }
 
-                        final Invoice invoice = invoicePaymentApi.getInvoice(payment.getInvoiceId(), context.toCallContext());
+                        final Invoice invoice = invoiceApi.getInvoiceById(payment.getInvoiceId(), context);
                         if (invoice.isMigrationInvoice()) {
                             return null;
                         }
@@ -434,12 +434,12 @@ public class PaymentProcessor extends ProcessorBase {
                 allAttempts = paymentDao.getAttemptsForPayment(paymentInput.getId(), context);
 
                 payment = paymentDao.getPayment(paymentInput.getId(), context);
-                invoicePaymentApi.notifyOfPayment(invoice.getId(),
+                invoiceApi.notifyOfPayment(invoice.getId(),
                         payment.getAmount(),
                         paymentStatus == PaymentStatus.SUCCESS ? payment.getCurrency() : null,
                                 payment.getId(),
                                 payment.getEffectiveDate(),
-                                context.toCallContext());
+                                context);
 
                 // Create Bus event
                 event = new DefaultPaymentInfoEvent(account.getId(),
diff --git a/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java b/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java
index e2d489e..8c73ea2 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java
@@ -25,6 +25,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.ning.billing.ErrorCode;
+import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.payment.api.PaymentApiException;
@@ -35,7 +36,6 @@ import com.ning.billing.payment.provider.PaymentProviderPluginRegistry;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.globallocker.GlobalLock;
 import com.ning.billing.util.globallocker.GlobalLocker;
diff --git a/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java b/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java
index dbc2459..8509d69 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java
@@ -38,7 +38,6 @@ import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.invoice.api.InvoiceApiException;
 import com.ning.billing.invoice.api.InvoiceItem;
-import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.payment.api.DefaultRefund;
 import com.ning.billing.payment.api.PaymentApiException;
 import com.ning.billing.payment.api.Refund;
@@ -56,6 +55,7 @@ import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.callcontext.UserType;
 import com.ning.billing.util.globallocker.GlobalLocker;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.invoice.InvoiceInternalApi;
 import com.ning.billing.util.svcapi.tag.TagInternalApi;
 import com.ning.billing.util.svcsapi.bus.InternalBus;
 
@@ -70,13 +70,13 @@ public class RefundProcessor extends ProcessorBase {
 
     private static final Logger log = LoggerFactory.getLogger(RefundProcessor.class);
 
-    private final InvoicePaymentApi invoicePaymentApi;
+    private final InvoiceInternalApi invoiceApi;
     private final InternalCallContextFactory internalCallContextFactory;
 
     @Inject
     public RefundProcessor(final PaymentProviderPluginRegistry pluginRegistry,
                            final AccountInternalApi accountApi,
-                           final InvoicePaymentApi invoicePaymentApi,
+                           final InvoiceInternalApi invoiceApi,
                            final InternalBus eventBus,
                            final InternalCallContextFactory internalCallContextFactory,
                            final TagInternalApi tagUserApi,
@@ -84,7 +84,7 @@ public class RefundProcessor extends ProcessorBase {
                            final GlobalLocker locker,
                            @Named(PLUGIN_EXECUTOR_NAMED) final ExecutorService executor) {
         super(pluginRegistry, accountApi, eventBus, paymentDao, tagUserApi, locker, executor);
-        this.invoicePaymentApi = invoicePaymentApi;
+        this.invoiceApi = invoiceApi;
         this.internalCallContextFactory = internalCallContextFactory;
     }
 
@@ -166,7 +166,7 @@ public class RefundProcessor extends ProcessorBase {
                     }
                     paymentDao.updateRefundStatus(refundInfo.getId(), RefundStatus.PLUGIN_COMPLETED, context);
 
-                    invoicePaymentApi.createRefund(paymentId, refundAmount, isAdjusted, invoiceItemIdsWithAmounts, refundInfo.getId(), context.toCallContext());
+                    invoiceApi.createRefund(paymentId, refundAmount, isAdjusted, invoiceItemIdsWithAmounts, refundInfo.getId(), context);
 
                     paymentDao.updateRefundStatus(refundInfo.getId(), RefundStatus.COMPLETED, context);
 
@@ -194,7 +194,7 @@ public class RefundProcessor extends ProcessorBase {
                                            final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts, final InternalTenantContext context)
             throws PaymentApiException {
         try {
-            final List<InvoiceItem> items = invoicePaymentApi.getInvoiceForPaymentId(paymentId, context.toTenantContext()).getInvoiceItems();
+            final List<InvoiceItem> items = invoiceApi.getInvoiceForPaymentId(paymentId, context).getInvoiceItems();
 
             BigDecimal amountFromItems = BigDecimal.ZERO;
             for (final UUID itemId : invoiceItemIdsWithAmounts.keySet()) {
@@ -304,7 +304,7 @@ public class RefundProcessor extends ProcessorBase {
                     try {
                         for (final RefundModelDao cur : refundsToBeFixed) {
                             // TODO - we currently don't save the items to be adjusted. If we crash, they won't be adjusted...
-                            invoicePaymentApi.createRefund(cur.getPaymentId(), cur.getAmount(), cur.isAdjsuted(), ImmutableMap.<UUID, BigDecimal>of(), cur.getId(), context.toCallContext());
+                            invoiceApi.createRefund(cur.getPaymentId(), cur.getAmount(), cur.isAdjsuted(), ImmutableMap.<UUID, BigDecimal>of(), cur.getId(), context);
                             paymentDao.updateRefundStatus(cur.getId(), RefundStatus.COMPLETED, context);
                         }
                     } catch (InvoiceApiException e) {
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/AuditedPaymentDao.java b/payment/src/main/java/com/ning/billing/payment/dao/AuditedPaymentDao.java
index 3eafe6b..042d283 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/AuditedPaymentDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/AuditedPaymentDao.java
@@ -29,7 +29,7 @@ import org.skife.jdbi.v2.TransactionStatus;
 import com.ning.billing.payment.api.PaymentStatus;
 import com.ning.billing.payment.dao.RefundModelDao.RefundStatus;
 import com.ning.billing.payment.retry.PluginFailureRetryService.PluginFailureRetryServiceScheduler;
-import com.ning.billing.util.ChangeType;
+import com.ning.billing.util.audit.ChangeType;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.dao.EntityAudit;
diff --git a/payment/src/main/java/com/ning/billing/payment/glue/DefaultPaymentProviderPluginRegistryProvider.java b/payment/src/main/java/com/ning/billing/payment/glue/DefaultPaymentProviderPluginRegistryProvider.java
index 5a92d7f..65daf80 100644
--- a/payment/src/main/java/com/ning/billing/payment/glue/DefaultPaymentProviderPluginRegistryProvider.java
+++ b/payment/src/main/java/com/ning/billing/payment/glue/DefaultPaymentProviderPluginRegistryProvider.java
@@ -16,7 +16,7 @@
 
 package com.ning.billing.payment.glue;
 
-import com.ning.billing.config.PaymentConfig;
+import com.ning.billing.util.config.PaymentConfig;
 import com.ning.billing.payment.provider.DefaultPaymentProviderPluginRegistry;
 import com.ning.billing.payment.provider.ExternalPaymentProviderPlugin;
 
diff --git a/payment/src/main/java/com/ning/billing/payment/glue/PaymentModule.java b/payment/src/main/java/com/ning/billing/payment/glue/PaymentModule.java
index 9e601aa..77ebc62 100644
--- a/payment/src/main/java/com/ning/billing/payment/glue/PaymentModule.java
+++ b/payment/src/main/java/com/ning/billing/payment/glue/PaymentModule.java
@@ -25,10 +25,11 @@ import org.skife.config.ConfigSource;
 import org.skife.config.ConfigurationObjectFactory;
 import org.skife.config.SimplePropertyConfigSource;
 
-import com.ning.billing.config.PaymentConfig;
+import com.ning.billing.util.config.PaymentConfig;
 import com.ning.billing.payment.api.DefaultPaymentApi;
 import com.ning.billing.payment.api.PaymentApi;
 import com.ning.billing.payment.api.PaymentService;
+import com.ning.billing.payment.api.svcs.DefaultPaymentInternalApi;
 import com.ning.billing.payment.bus.InvoiceHandler;
 import com.ning.billing.payment.bus.TagHandler;
 import com.ning.billing.payment.core.PaymentMethodProcessor;
@@ -43,6 +44,7 @@ import com.ning.billing.payment.retry.FailedPaymentRetryService;
 import com.ning.billing.payment.retry.FailedPaymentRetryService.FailedPaymentRetryServiceScheduler;
 import com.ning.billing.payment.retry.PluginFailureRetryService;
 import com.ning.billing.payment.retry.PluginFailureRetryService.PluginFailureRetryServiceScheduler;
+import com.ning.billing.util.svcapi.payment.PaymentInternalApi;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.inject.AbstractModule;
@@ -109,6 +111,7 @@ public class PaymentModule extends AbstractModule {
         bind(PaymentConfig.class).toInstance(paymentConfig);
         bind(PaymentProviderPluginRegistry.class).toProvider(DefaultPaymentProviderPluginRegistryProvider.class).asEagerSingleton();
 
+        bind(PaymentInternalApi.class).to(DefaultPaymentInternalApi.class).asEagerSingleton();
         bind(PaymentApi.class).to(DefaultPaymentApi.class).asEagerSingleton();
         bind(InvoiceHandler.class).asEagerSingleton();
         bind(TagHandler.class).asEagerSingleton();
diff --git a/payment/src/main/java/com/ning/billing/payment/provider/DefaultPaymentProviderPluginRegistry.java b/payment/src/main/java/com/ning/billing/payment/provider/DefaultPaymentProviderPluginRegistry.java
index 2ffa03c..340285a 100644
--- a/payment/src/main/java/com/ning/billing/payment/provider/DefaultPaymentProviderPluginRegistry.java
+++ b/payment/src/main/java/com/ning/billing/payment/provider/DefaultPaymentProviderPluginRegistry.java
@@ -20,7 +20,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
-import com.ning.billing.config.PaymentConfig;
+import com.ning.billing.util.config.PaymentConfig;
 import com.ning.billing.payment.plugin.api.PaymentPluginApi;
 
 import com.google.common.base.Strings;
diff --git a/payment/src/main/java/com/ning/billing/payment/retry/AutoPayRetryService.java b/payment/src/main/java/com/ning/billing/payment/retry/AutoPayRetryService.java
index da55316..b45819d 100644
--- a/payment/src/main/java/com/ning/billing/payment/retry/AutoPayRetryService.java
+++ b/payment/src/main/java/com/ning/billing/payment/retry/AutoPayRetryService.java
@@ -20,7 +20,7 @@ import java.util.UUID;
 
 import org.joda.time.DateTime;
 
-import com.ning.billing.config.PaymentConfig;
+import com.ning.billing.util.config.PaymentConfig;
 import com.ning.billing.payment.core.PaymentProcessor;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
diff --git a/payment/src/main/java/com/ning/billing/payment/retry/BaseRetryService.java b/payment/src/main/java/com/ning/billing/payment/retry/BaseRetryService.java
index f4dc8cd..6ec7286 100644
--- a/payment/src/main/java/com/ning/billing/payment/retry/BaseRetryService.java
+++ b/payment/src/main/java/com/ning/billing/payment/retry/BaseRetryService.java
@@ -24,13 +24,13 @@ import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.ning.billing.config.PaymentConfig;
+import com.ning.billing.ObjectType;
+import com.ning.billing.util.config.PaymentConfig;
 import com.ning.billing.payment.glue.DefaultPaymentService;
 import com.ning.billing.util.callcontext.CallOrigin;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.UserType;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.notificationq.NotificationKey;
 import com.ning.billing.util.notificationq.NotificationQueue;
 import com.ning.billing.util.notificationq.NotificationQueueService;
diff --git a/payment/src/main/java/com/ning/billing/payment/retry/FailedPaymentRetryService.java b/payment/src/main/java/com/ning/billing/payment/retry/FailedPaymentRetryService.java
index 15e87c4..250987b 100644
--- a/payment/src/main/java/com/ning/billing/payment/retry/FailedPaymentRetryService.java
+++ b/payment/src/main/java/com/ning/billing/payment/retry/FailedPaymentRetryService.java
@@ -23,7 +23,7 @@ import org.joda.time.DateTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.ning.billing.config.PaymentConfig;
+import com.ning.billing.util.config.PaymentConfig;
 import com.ning.billing.payment.core.PaymentProcessor;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
diff --git a/payment/src/main/java/com/ning/billing/payment/retry/PluginFailureRetryService.java b/payment/src/main/java/com/ning/billing/payment/retry/PluginFailureRetryService.java
index 587249a..a4610f2 100644
--- a/payment/src/main/java/com/ning/billing/payment/retry/PluginFailureRetryService.java
+++ b/payment/src/main/java/com/ning/billing/payment/retry/PluginFailureRetryService.java
@@ -23,7 +23,7 @@ import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.ning.billing.config.PaymentConfig;
+import com.ning.billing.util.config.PaymentConfig;
 import com.ning.billing.payment.core.PaymentProcessor;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
diff --git a/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java b/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
index a4ad080..8224949 100644
--- a/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
+++ b/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
@@ -16,11 +16,6 @@
 
 package com.ning.billing.payment.api;
 
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.List;
@@ -40,7 +35,6 @@ import com.ning.billing.ErrorCode;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.invoice.api.Invoice;
-import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.mock.glue.MockClockModule;
 import com.ning.billing.mock.glue.MockJunctionModule;
 import com.ning.billing.payment.MockRecurringInvoiceItem;
@@ -57,6 +51,11 @@ import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
 
 import com.google.inject.Inject;
 
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+
 @Guice(modules = {PaymentTestModuleWithMocks.class, MockClockModule.class, MockJunctionModule.class, CallContextModule.class})
 public class TestPaymentApi extends PaymentTestSuite {
     private static final Logger log = LoggerFactory.getLogger(TestPaymentApi.class);
@@ -70,8 +69,6 @@ public class TestPaymentApi extends PaymentTestSuite {
     @Inject
     protected TestHelper testHelper;
     @Inject
-    protected InvoicePaymentApi invoicePaymentApi;
-    @Inject
     protected Clock clock;
 
     private Account account;
diff --git a/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessor.java b/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessor.java
index cc75b7c..ce87305 100644
--- a/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessor.java
+++ b/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessor.java
@@ -26,7 +26,7 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import com.ning.billing.account.api.Account;
-import com.ning.billing.config.PaymentConfig;
+import com.ning.billing.util.config.PaymentConfig;
 import com.ning.billing.payment.PaymentTestSuite;
 import com.ning.billing.payment.api.PaymentMethod;
 import com.ning.billing.payment.dao.MockPaymentDao;
diff --git a/payment/src/test/java/com/ning/billing/payment/glue/PaymentTestModuleWithMocks.java b/payment/src/test/java/com/ning/billing/payment/glue/PaymentTestModuleWithMocks.java
index 64caaf4..8eb910c 100644
--- a/payment/src/test/java/com/ning/billing/payment/glue/PaymentTestModuleWithMocks.java
+++ b/payment/src/test/java/com/ning/billing/payment/glue/PaymentTestModuleWithMocks.java
@@ -27,7 +27,8 @@ import org.mockito.Mockito;
 import org.skife.config.SimplePropertyConfigSource;
 import org.skife.jdbi.v2.IDBI;
 
-import com.ning.billing.config.PaymentConfig;
+import com.ning.billing.ObjectType;
+import com.ning.billing.util.config.PaymentConfig;
 import com.ning.billing.mock.glue.MockInvoiceModule;
 import com.ning.billing.mock.glue.MockNotificationQueueModule;
 import com.ning.billing.payment.dao.MockPaymentDao;
@@ -36,7 +37,6 @@ import com.ning.billing.payment.provider.MockPaymentProviderPluginModule;
 import com.ning.billing.util.callcontext.CallContextSqlDao;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.callcontext.MockCallContextSqlDao;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.globallocker.GlobalLocker;
 import com.ning.billing.util.globallocker.MockGlobalLocker;
 import com.ning.billing.util.glue.BusModule;
diff --git a/payment/src/test/java/com/ning/billing/payment/glue/TestDefaultPaymentProviderPluginRegistryProvider.java b/payment/src/test/java/com/ning/billing/payment/glue/TestDefaultPaymentProviderPluginRegistryProvider.java
index ef6ffde..384f688 100644
--- a/payment/src/test/java/com/ning/billing/payment/glue/TestDefaultPaymentProviderPluginRegistryProvider.java
+++ b/payment/src/test/java/com/ning/billing/payment/glue/TestDefaultPaymentProviderPluginRegistryProvider.java
@@ -20,7 +20,7 @@ import org.mockito.Mockito;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.ning.billing.config.PaymentConfig;
+import com.ning.billing.util.config.PaymentConfig;
 import com.ning.billing.payment.PaymentTestSuite;
 import com.ning.billing.payment.provider.ExternalPaymentProviderPlugin;
 import com.ning.billing.payment.provider.PaymentProviderPluginRegistry;
diff --git a/payment/src/test/java/com/ning/billing/payment/TestHelper.java b/payment/src/test/java/com/ning/billing/payment/TestHelper.java
index 001a8ae..17ea477 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestHelper.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestHelper.java
@@ -26,7 +26,6 @@ import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceApiException;
 import com.ning.billing.invoice.api.InvoiceItem;
-import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.mock.api.MockBillCycleDay;
 import com.ning.billing.payment.api.PaymentApi;
 import com.ning.billing.payment.api.PaymentMethodPlugin;
@@ -37,11 +36,11 @@ import com.ning.billing.util.callcontext.CallContextFactory;
 import com.ning.billing.util.callcontext.CallOrigin;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.callcontext.TenantContext;
 import com.ning.billing.util.callcontext.UserType;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.events.InvoiceCreationInternalEvent;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.invoice.InvoiceInternalApi;
 import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
 
@@ -49,7 +48,7 @@ import com.google.inject.Inject;
 
 public class TestHelper {
     protected final AccountInternalApi AccountApi;
-    protected final InvoicePaymentApi invoicePaymentApi;
+    protected final InvoiceInternalApi invoiceApi;
     protected PaymentApi paymentApi;
     private final CallContext context;
     private final InternalBus eventBus;
@@ -57,11 +56,11 @@ public class TestHelper {
     private final InternalCallContextFactory internalCallContextFactory;
 
     @Inject
-    public TestHelper(final CallContextFactory factory, final AccountInternalApi AccountApi, final InvoicePaymentApi invoicePaymentApi,
+    public TestHelper(final CallContextFactory factory, final AccountInternalApi AccountApi, final InvoiceInternalApi invoiceApi,
                       final PaymentApi paymentApi, final InternalBus eventBus, final Clock clock, final InternalCallContextFactory internalCallContextFactory) {
         this.eventBus = eventBus;
         this.AccountApi = AccountApi;
-        this.invoicePaymentApi = invoicePaymentApi;
+        this.invoiceApi = invoiceApi;
         this.paymentApi = paymentApi;
         this.clock = clock;
         this.internalCallContextFactory = internalCallContextFactory;
@@ -92,7 +91,7 @@ public class TestHelper {
             }
         }
 
-        Mockito.when(invoicePaymentApi.getInvoice(Mockito.eq(invoice.getId()), Mockito.<TenantContext>any())).thenReturn(invoice);
+        Mockito.when(invoiceApi.getInvoiceById(Mockito.eq(invoice.getId()), Mockito.<InternalTenantContext>any())).thenReturn(invoice);
         final InvoiceCreationInternalEvent event = new MockInvoiceCreationEvent(invoice.getId(), invoice.getAccountId(),
                                                                         invoice.getBalance(), invoice.getCurrency(),
                                                                         invoice.getInvoiceDate(),
diff --git a/payment/src/test/java/com/ning/billing/payment/TestRetryService.java b/payment/src/test/java/com/ning/billing/payment/TestRetryService.java
index 28cefd5..80d84e5 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestRetryService.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestRetryService.java
@@ -32,9 +32,8 @@ import org.testng.annotations.Test;
 
 import com.ning.billing.account.api.Account;
 import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.config.PaymentConfig;
+import com.ning.billing.util.config.PaymentConfig;
 import com.ning.billing.invoice.api.Invoice;
-import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.mock.glue.MockClockModule;
 import com.ning.billing.mock.glue.MockJunctionModule;
 import com.ning.billing.payment.api.Payment;
@@ -48,9 +47,10 @@ import com.ning.billing.payment.provider.MockPaymentProviderPlugin;
 import com.ning.billing.payment.provider.PaymentProviderPluginRegistry;
 import com.ning.billing.payment.retry.FailedPaymentRetryService;
 import com.ning.billing.payment.retry.PluginFailureRetryService;
-import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.clock.ClockMock;
 import com.ning.billing.util.glue.CallContextModule;
+import com.ning.billing.util.svcapi.invoice.InvoiceInternalApi;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 import com.google.inject.Inject;
 
@@ -69,7 +69,7 @@ public class TestRetryService extends PaymentTestSuite {
     @Inject
     private PaymentProcessor paymentProcessor;
     @Inject
-    private InvoicePaymentApi invoicePaymentApi;
+    private InvoiceInternalApi invoiceApi;
     @Inject
     private TestHelper testHelper;
     @Inject
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestAccountTimeline.java b/server/src/test/java/com/ning/billing/jaxrs/TestAccountTimeline.java
index 5bfea52..eba983c 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestAccountTimeline.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestAccountTimeline.java
@@ -34,8 +34,8 @@ import com.ning.billing.jaxrs.json.InvoiceJsonSimple;
 import com.ning.billing.jaxrs.json.PaymentJsonSimple;
 import com.ning.billing.jaxrs.json.PaymentJsonWithBundleKeys;
 import com.ning.billing.jaxrs.json.RefundJson;
-import com.ning.billing.util.ChangeType;
 import com.ning.billing.util.api.AuditLevel;
+import com.ning.billing.util.audit.ChangeType;
 
 public class TestAccountTimeline extends TestJaxrsBase {
 
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java b/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
index 6384d8f..d6b1a68 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
@@ -40,7 +40,7 @@ import com.ning.billing.analytics.setup.AnalyticsModule;
 import com.ning.billing.api.TestApiListener;
 import com.ning.billing.beatrix.glue.BeatrixModule;
 import com.ning.billing.catalog.glue.CatalogModule;
-import com.ning.billing.config.PaymentConfig;
+import com.ning.billing.util.config.PaymentConfig;
 import com.ning.billing.dbi.DBIProvider;
 import com.ning.billing.dbi.DbiConfig;
 import com.ning.billing.dbi.MysqlTestingHelper;
diff --git a/usage/src/main/java/com/ning/billing/usage/glue/UsageModule.java b/usage/src/main/java/com/ning/billing/usage/glue/UsageModule.java
index d6ec3e8..1eafd1e 100644
--- a/usage/src/main/java/com/ning/billing/usage/glue/UsageModule.java
+++ b/usage/src/main/java/com/ning/billing/usage/glue/UsageModule.java
@@ -22,7 +22,7 @@ import org.skife.config.ConfigSource;
 import org.skife.config.ConfigurationObjectFactory;
 import org.skife.config.SimplePropertyConfigSource;
 
-import com.ning.billing.config.UsageConfig;
+import com.ning.billing.util.config.UsageConfig;
 import com.ning.billing.usage.timeline.codec.DefaultSampleCoder;
 import com.ning.billing.usage.timeline.codec.SampleCoder;
 import com.ning.billing.usage.timeline.persistent.FileBackedBuffer;
diff --git a/usage/src/main/java/com/ning/billing/usage/timeline/aggregator/TimelineAggregator.java b/usage/src/main/java/com/ning/billing/usage/timeline/aggregator/TimelineAggregator.java
index ec2af28..6f26c83 100644
--- a/usage/src/main/java/com/ning/billing/usage/timeline/aggregator/TimelineAggregator.java
+++ b/usage/src/main/java/com/ning/billing/usage/timeline/aggregator/TimelineAggregator.java
@@ -37,7 +37,7 @@ import org.skife.jdbi.v2.tweak.HandleCallback;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.ning.billing.config.UsageConfig;
+import com.ning.billing.util.config.UsageConfig;
 import com.ning.billing.usage.timeline.chunks.TimelineChunk;
 import com.ning.billing.usage.timeline.chunks.TimelineChunkMapper;
 import com.ning.billing.usage.timeline.codec.SampleCoder;
diff --git a/usage/src/main/java/com/ning/billing/usage/timeline/BackgroundDBChunkWriter.java b/usage/src/main/java/com/ning/billing/usage/timeline/BackgroundDBChunkWriter.java
index 7a12fa5..4fa1077 100644
--- a/usage/src/main/java/com/ning/billing/usage/timeline/BackgroundDBChunkWriter.java
+++ b/usage/src/main/java/com/ning/billing/usage/timeline/BackgroundDBChunkWriter.java
@@ -31,7 +31,7 @@ import org.joda.time.DateTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.ning.billing.config.UsageConfig;
+import com.ning.billing.util.config.UsageConfig;
 import com.ning.billing.usage.timeline.chunks.TimelineChunk;
 import com.ning.billing.usage.timeline.persistent.TimelineDao;
 import com.ning.billing.util.callcontext.CallOrigin;
diff --git a/usage/src/main/java/com/ning/billing/usage/timeline/TimelineEventHandler.java b/usage/src/main/java/com/ning/billing/usage/timeline/TimelineEventHandler.java
index 88728ef..e4afc63 100644
--- a/usage/src/main/java/com/ning/billing/usage/timeline/TimelineEventHandler.java
+++ b/usage/src/main/java/com/ning/billing/usage/timeline/TimelineEventHandler.java
@@ -39,7 +39,7 @@ import org.joda.time.DateTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.ning.billing.config.UsageConfig;
+import com.ning.billing.util.config.UsageConfig;
 import com.ning.billing.usage.timeline.chunks.TimelineChunk;
 import com.ning.billing.usage.timeline.codec.SampleCoder;
 import com.ning.billing.usage.timeline.codec.TimelineChunkAccumulator;
diff --git a/util/src/main/java/com/ning/billing/util/audit/api/DefaultAuditUserApi.java b/util/src/main/java/com/ning/billing/util/audit/api/DefaultAuditUserApi.java
index 8995e6f..8a91fc2 100644
--- a/util/src/main/java/com/ning/billing/util/audit/api/DefaultAuditUserApi.java
+++ b/util/src/main/java/com/ning/billing/util/audit/api/DefaultAuditUserApi.java
@@ -23,6 +23,7 @@ import java.util.UUID;
 
 import javax.inject.Inject;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.entitlement.api.timeline.BundleTimeline;
 import com.ning.billing.entitlement.api.timeline.SubscriptionTimeline;
 import com.ning.billing.entitlement.api.timeline.SubscriptionTimeline.ExistingEvent;
@@ -47,7 +48,6 @@ import com.ning.billing.util.audit.DefaultAuditLogsForRefunds;
 import com.ning.billing.util.audit.dao.AuditDao;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.dao.TableName;
 
 import com.google.common.collect.ImmutableList;
diff --git a/util/src/main/java/com/ning/billing/util/audit/dao/DefaultAuditDao.java b/util/src/main/java/com/ning/billing/util/audit/dao/DefaultAuditDao.java
index 1b75842..de92fc6 100644
--- a/util/src/main/java/com/ning/billing/util/audit/dao/DefaultAuditDao.java
+++ b/util/src/main/java/com/ning/billing/util/audit/dao/DefaultAuditDao.java
@@ -24,9 +24,9 @@ import javax.inject.Inject;
 
 import org.skife.jdbi.v2.IDBI;
 
-import com.ning.billing.util.ChangeType;
 import com.ning.billing.util.api.AuditLevel;
 import com.ning.billing.util.audit.AuditLog;
+import com.ning.billing.util.audit.ChangeType;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.dao.AuditSqlDao;
 import com.ning.billing.util.dao.TableName;
diff --git a/util/src/main/java/com/ning/billing/util/audit/DefaultAuditLog.java b/util/src/main/java/com/ning/billing/util/audit/DefaultAuditLog.java
index 513697e..ebc7dfd 100644
--- a/util/src/main/java/com/ning/billing/util/audit/DefaultAuditLog.java
+++ b/util/src/main/java/com/ning/billing/util/audit/DefaultAuditLog.java
@@ -18,7 +18,6 @@ package com.ning.billing.util.audit;
 
 import org.joda.time.DateTime;
 
-import com.ning.billing.util.ChangeType;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.dao.EntityAudit;
 
diff --git a/util/src/main/java/com/ning/billing/util/bus/PersistentBusConfig.java b/util/src/main/java/com/ning/billing/util/bus/PersistentBusConfig.java
index b0a1c5a..adc7a61 100644
--- a/util/src/main/java/com/ning/billing/util/bus/PersistentBusConfig.java
+++ b/util/src/main/java/com/ning/billing/util/bus/PersistentBusConfig.java
@@ -18,7 +18,7 @@ package com.ning.billing.util.bus;
 import org.skife.config.Config;
 import org.skife.config.Default;
 
-import com.ning.billing.config.PersistentQueueConfig;
+import com.ning.billing.util.config.PersistentQueueConfig;
 
 public interface PersistentBusConfig extends PersistentQueueConfig {
 
diff --git a/util/src/main/java/com/ning/billing/util/callcontext/InternalCallContextFactory.java b/util/src/main/java/com/ning/billing/util/callcontext/InternalCallContextFactory.java
index fbbeaaf..97202bd 100644
--- a/util/src/main/java/com/ning/billing/util/callcontext/InternalCallContextFactory.java
+++ b/util/src/main/java/com/ning/billing/util/callcontext/InternalCallContextFactory.java
@@ -28,8 +28,8 @@ import org.skife.jdbi.v2.Handle;
 import org.skife.jdbi.v2.IDBI;
 import org.skife.jdbi.v2.tweak.HandleCallback;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.dao.TableName;
 
 import com.google.common.base.Objects;
diff --git a/util/src/main/java/com/ning/billing/util/customfield/api/DefaultCustomFieldUserApi.java b/util/src/main/java/com/ning/billing/util/customfield/api/DefaultCustomFieldUserApi.java
index d41285e..dcd771a 100644
--- a/util/src/main/java/com/ning/billing/util/customfield/api/DefaultCustomFieldUserApi.java
+++ b/util/src/main/java/com/ning/billing/util/customfield/api/DefaultCustomFieldUserApi.java
@@ -20,13 +20,13 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.api.CustomFieldUserApi;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.TenantContext;
 import com.ning.billing.util.customfield.CustomField;
 import com.ning.billing.util.customfield.dao.CustomFieldDao;
-import com.ning.billing.util.dao.ObjectType;
 
 import com.google.inject.Inject;
 
diff --git a/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldSqlDao.java b/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldSqlDao.java
index e08c569..215795e 100644
--- a/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldSqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldSqlDao.java
@@ -26,11 +26,11 @@ import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
 import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
 import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContextBinder;
 import com.ning.billing.util.customfield.CustomField;
 import com.ning.billing.util.dao.EntityHistory;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.dao.ObjectTypeBinder;
 import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
 
diff --git a/util/src/main/java/com/ning/billing/util/customfield/DefaultFieldStore.java b/util/src/main/java/com/ning/billing/util/customfield/DefaultFieldStore.java
index 7460d13..85586d5 100644
--- a/util/src/main/java/com/ning/billing/util/customfield/DefaultFieldStore.java
+++ b/util/src/main/java/com/ning/billing/util/customfield/DefaultFieldStore.java
@@ -18,7 +18,7 @@ package com.ning.billing.util.customfield;
 
 import java.util.UUID;
 
-import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.entity.collection.EntityCollectionBase;
 
 public class DefaultFieldStore extends EntityCollectionBase<CustomField> implements FieldStore {
diff --git a/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDao.java b/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDao.java
index 18388cd..d03f29d 100644
--- a/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDao.java
+++ b/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDao.java
@@ -22,6 +22,7 @@ import java.util.UUID;
 
 import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.entity.Entity;
diff --git a/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDaoBase.java b/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDaoBase.java
index ffdcb09..4a204b7 100644
--- a/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDaoBase.java
+++ b/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDaoBase.java
@@ -26,7 +26,8 @@ import java.util.UUID;
 
 import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
 
-import com.ning.billing.util.ChangeType;
+import com.ning.billing.ObjectType;
+import com.ning.billing.util.audit.ChangeType;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.entity.Entity;
diff --git a/util/src/main/java/com/ning/billing/util/dao/AuditLogMapper.java b/util/src/main/java/com/ning/billing/util/dao/AuditLogMapper.java
index f6d0d6c..94e8e92 100644
--- a/util/src/main/java/com/ning/billing/util/dao/AuditLogMapper.java
+++ b/util/src/main/java/com/ning/billing/util/dao/AuditLogMapper.java
@@ -24,8 +24,8 @@ import org.joda.time.DateTime;
 import org.skife.jdbi.v2.StatementContext;
 import org.skife.jdbi.v2.tweak.ResultSetMapper;
 
-import com.ning.billing.util.ChangeType;
 import com.ning.billing.util.audit.AuditLog;
+import com.ning.billing.util.audit.ChangeType;
 import com.ning.billing.util.audit.DefaultAuditLog;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.DefaultCallContext;
diff --git a/util/src/main/java/com/ning/billing/util/dao/ChangeTypeBinder.java b/util/src/main/java/com/ning/billing/util/dao/ChangeTypeBinder.java
index 9a94e98..c5c313f 100644
--- a/util/src/main/java/com/ning/billing/util/dao/ChangeTypeBinder.java
+++ b/util/src/main/java/com/ning/billing/util/dao/ChangeTypeBinder.java
@@ -27,7 +27,7 @@ import org.skife.jdbi.v2.sqlobject.Binder;
 import org.skife.jdbi.v2.sqlobject.BinderFactory;
 import org.skife.jdbi.v2.sqlobject.BindingAnnotation;
 
-import com.ning.billing.util.ChangeType;
+import com.ning.billing.util.audit.ChangeType;
 
 @BindingAnnotation(ChangeTypeBinder.ChangeTypeBinderFactory.class)
 @Retention(RetentionPolicy.RUNTIME)
diff --git a/util/src/main/java/com/ning/billing/util/dao/CollectionHistorySqlDao.java b/util/src/main/java/com/ning/billing/util/dao/CollectionHistorySqlDao.java
index 7d92a65..75b7160 100644
--- a/util/src/main/java/com/ning/billing/util/dao/CollectionHistorySqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/dao/CollectionHistorySqlDao.java
@@ -21,6 +21,7 @@ import java.util.List;
 import org.skife.jdbi.v2.sqlobject.SqlBatch;
 import org.skife.jdbi.v2.sqlobject.SqlUpdate;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContextBinder;
 import com.ning.billing.util.entity.Entity;
diff --git a/util/src/main/java/com/ning/billing/util/dao/EntityAudit.java b/util/src/main/java/com/ning/billing/util/dao/EntityAudit.java
index 007ec93..25930c7 100644
--- a/util/src/main/java/com/ning/billing/util/dao/EntityAudit.java
+++ b/util/src/main/java/com/ning/billing/util/dao/EntityAudit.java
@@ -16,7 +16,7 @@
 
 package com.ning.billing.util.dao;
 
-import com.ning.billing.util.ChangeType;
+import com.ning.billing.util.audit.ChangeType;
 
 public class EntityAudit {
     private final TableName tableName;
diff --git a/util/src/main/java/com/ning/billing/util/dao/EntityHistory.java b/util/src/main/java/com/ning/billing/util/dao/EntityHistory.java
index c1fe765..9ee036b 100644
--- a/util/src/main/java/com/ning/billing/util/dao/EntityHistory.java
+++ b/util/src/main/java/com/ning/billing/util/dao/EntityHistory.java
@@ -18,7 +18,7 @@ package com.ning.billing.util.dao;
 
 import java.util.UUID;
 
-import com.ning.billing.util.ChangeType;
+import com.ning.billing.util.audit.ChangeType;
 import com.ning.billing.util.entity.Entity;
 
 public class EntityHistory<T extends Entity> extends MappedEntity<T, UUID, Long> {
diff --git a/util/src/main/java/com/ning/billing/util/dao/MappedEntity.java b/util/src/main/java/com/ning/billing/util/dao/MappedEntity.java
index bad675f..283afba 100644
--- a/util/src/main/java/com/ning/billing/util/dao/MappedEntity.java
+++ b/util/src/main/java/com/ning/billing/util/dao/MappedEntity.java
@@ -18,7 +18,7 @@ package com.ning.billing.util.dao;
 
 import java.util.UUID;
 
-import com.ning.billing.util.ChangeType;
+import com.ning.billing.util.audit.ChangeType;
 import com.ning.billing.util.entity.Entity;
 
 public class MappedEntity<T extends Entity, K, V> {
diff --git a/util/src/main/java/com/ning/billing/util/dao/ObjectTypeBinder.java b/util/src/main/java/com/ning/billing/util/dao/ObjectTypeBinder.java
index 74c5d80..3029c72 100644
--- a/util/src/main/java/com/ning/billing/util/dao/ObjectTypeBinder.java
+++ b/util/src/main/java/com/ning/billing/util/dao/ObjectTypeBinder.java
@@ -27,6 +27,8 @@ import org.skife.jdbi.v2.sqlobject.Binder;
 import org.skife.jdbi.v2.sqlobject.BinderFactory;
 import org.skife.jdbi.v2.sqlobject.BindingAnnotation;
 
+import com.ning.billing.ObjectType;
+
 @BindingAnnotation(ObjectTypeBinder.ObjectTypeBinderFactory.class)
 @Retention(RetentionPolicy.RUNTIME)
 @Target({ElementType.PARAMETER})
diff --git a/util/src/main/java/com/ning/billing/util/dao/TableName.java b/util/src/main/java/com/ning/billing/util/dao/TableName.java
index e958798..82cc375 100644
--- a/util/src/main/java/com/ning/billing/util/dao/TableName.java
+++ b/util/src/main/java/com/ning/billing/util/dao/TableName.java
@@ -18,6 +18,8 @@ package com.ning.billing.util.dao;
 
 import javax.annotation.Nullable;
 
+import com.ning.billing.ObjectType;
+
 public enum TableName {
     ACCOUNT_HISTORY("account_history"),
     ACCOUNT("accounts", ObjectType.ACCOUNT, ACCOUNT_HISTORY),
diff --git a/util/src/main/java/com/ning/billing/util/email/EmailConfig.java b/util/src/main/java/com/ning/billing/util/email/EmailConfig.java
index 675b2ab..60513d9 100644
--- a/util/src/main/java/com/ning/billing/util/email/EmailConfig.java
+++ b/util/src/main/java/com/ning/billing/util/email/EmailConfig.java
@@ -20,7 +20,7 @@ import org.skife.config.Config;
 import org.skife.config.Default;
 import org.skife.config.DefaultNull;
 
-import com.ning.billing.config.KillbillConfig;
+import com.ning.billing.util.config.KillbillConfig;
 
 public interface EmailConfig extends KillbillConfig {
     @Config("killbill.mail.smtp.host")
diff --git a/util/src/main/java/com/ning/billing/util/email/templates/MustacheTemplateEngine.java b/util/src/main/java/com/ning/billing/util/email/templates/MustacheTemplateEngine.java
index 8ddc2aa..79c5ee6 100644
--- a/util/src/main/java/com/ning/billing/util/email/templates/MustacheTemplateEngine.java
+++ b/util/src/main/java/com/ning/billing/util/email/templates/MustacheTemplateEngine.java
@@ -21,7 +21,7 @@ import java.io.InputStream;
 import java.net.URISyntaxException;
 import java.util.Map;
 
-import com.ning.billing.util.config.UriAccessor;
+import com.ning.billing.util.config.catalog.UriAccessor;
 import com.ning.billing.util.io.IOUtils;
 
 import com.google.common.annotations.VisibleForTesting;
diff --git a/util/src/main/java/com/ning/billing/util/entity/collection/dao/EntityCollectionSqlDao.java b/util/src/main/java/com/ning/billing/util/entity/collection/dao/EntityCollectionSqlDao.java
index db1505a..bb87b4d 100644
--- a/util/src/main/java/com/ning/billing/util/entity/collection/dao/EntityCollectionSqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/entity/collection/dao/EntityCollectionSqlDao.java
@@ -27,11 +27,11 @@ import org.skife.jdbi.v2.sqlobject.SqlQuery;
 import org.skife.jdbi.v2.sqlobject.SqlUpdate;
 import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.callcontext.InternalTenantContextBinder;
 import com.ning.billing.util.dao.Mapper;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.dao.ObjectTypeBinder;
 import com.ning.billing.util.dao.RecordIdMapper;
 import com.ning.billing.util.entity.Entity;
diff --git a/util/src/main/java/com/ning/billing/util/entity/collection/dao/UpdatableEntityCollectionSqlDao.java b/util/src/main/java/com/ning/billing/util/entity/collection/dao/UpdatableEntityCollectionSqlDao.java
index 92d119f..537df84 100644
--- a/util/src/main/java/com/ning/billing/util/entity/collection/dao/UpdatableEntityCollectionSqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/entity/collection/dao/UpdatableEntityCollectionSqlDao.java
@@ -27,13 +27,13 @@ import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
 import org.skife.jdbi.v2.sqlobject.mixins.CloseMe;
 import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContextBinder;
 import com.ning.billing.util.dao.AuditSqlDao;
 import com.ning.billing.util.dao.CollectionHistorySqlDao;
 import com.ning.billing.util.dao.HistoryRecordIdMapper;
 import com.ning.billing.util.dao.Mapper;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.dao.ObjectTypeBinder;
 import com.ning.billing.util.entity.Entity;
 
diff --git a/util/src/main/java/com/ning/billing/util/entity/collection/EntityCollectionBase.java b/util/src/main/java/com/ning/billing/util/entity/collection/EntityCollectionBase.java
index c94e379..4a7d1db 100644
--- a/util/src/main/java/com/ning/billing/util/entity/collection/EntityCollectionBase.java
+++ b/util/src/main/java/com/ning/billing/util/entity/collection/EntityCollectionBase.java
@@ -22,7 +22,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
-import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.entity.Entity;
 import com.ning.billing.util.entity.EntityCollection;
 
diff --git a/util/src/main/java/com/ning/billing/util/events/AccountChangeInternalEvent.java b/util/src/main/java/com/ning/billing/util/events/AccountChangeInternalEvent.java
index b6458e3..ea3f5b6 100644
--- a/util/src/main/java/com/ning/billing/util/events/AccountChangeInternalEvent.java
+++ b/util/src/main/java/com/ning/billing/util/events/AccountChangeInternalEvent.java
@@ -19,8 +19,6 @@ package com.ning.billing.util.events;
 import java.util.List;
 import java.util.UUID;
 
-import com.ning.billing.account.api.ChangedField;
-
 public interface AccountChangeInternalEvent extends BusInternalEvent {
     public UUID getAccountId();
 
diff --git a/util/src/main/java/com/ning/billing/util/events/TagInternalEvent.java b/util/src/main/java/com/ning/billing/util/events/TagInternalEvent.java
index bcded78..bb64317 100644
--- a/util/src/main/java/com/ning/billing/util/events/TagInternalEvent.java
+++ b/util/src/main/java/com/ning/billing/util/events/TagInternalEvent.java
@@ -18,7 +18,7 @@ package com.ning.billing.util.events;
 
 import java.util.UUID;
 
-import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.tag.TagDefinition;
 
 public interface TagInternalEvent extends BusInternalEvent {
diff --git a/util/src/main/java/com/ning/billing/util/notificationq/DefaultNotificationQueue.java b/util/src/main/java/com/ning/billing/util/notificationq/DefaultNotificationQueue.java
index 3d78f33..b20c1a7 100644
--- a/util/src/main/java/com/ning/billing/util/notificationq/DefaultNotificationQueue.java
+++ b/util/src/main/java/com/ning/billing/util/notificationq/DefaultNotificationQueue.java
@@ -30,7 +30,7 @@ import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.ning.billing.config.NotificationConfig;
+import com.ning.billing.util.config.NotificationConfig;
 import com.ning.billing.util.callcontext.CallOrigin;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
diff --git a/util/src/main/java/com/ning/billing/util/notificationq/DefaultNotificationQueueService.java b/util/src/main/java/com/ning/billing/util/notificationq/DefaultNotificationQueueService.java
index 9cd3658..350a140 100644
--- a/util/src/main/java/com/ning/billing/util/notificationq/DefaultNotificationQueueService.java
+++ b/util/src/main/java/com/ning/billing/util/notificationq/DefaultNotificationQueueService.java
@@ -18,7 +18,7 @@ package com.ning.billing.util.notificationq;
 
 import org.skife.jdbi.v2.IDBI;
 
-import com.ning.billing.config.NotificationConfig;
+import com.ning.billing.util.config.NotificationConfig;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.clock.Clock;
 
diff --git a/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueBase.java b/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueBase.java
index e26dd6a..338340e 100644
--- a/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueBase.java
+++ b/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueBase.java
@@ -24,7 +24,7 @@ import java.util.concurrent.atomic.AtomicLong;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.ning.billing.config.NotificationConfig;
+import com.ning.billing.util.config.NotificationConfig;
 import com.ning.billing.util.Hostname;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.notificationq.NotificationQueueService.NotificationQueueHandler;
diff --git a/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueService.java b/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueService.java
index a2d39dd..d6df6dd 100644
--- a/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueService.java
+++ b/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueService.java
@@ -18,7 +18,7 @@ package com.ning.billing.util.notificationq;
 
 import org.joda.time.DateTime;
 
-import com.ning.billing.config.NotificationConfig;
+import com.ning.billing.util.config.NotificationConfig;
 
 public interface NotificationQueueService {
 
diff --git a/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueServiceBase.java b/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueServiceBase.java
index bf52f41..8763192 100644
--- a/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueServiceBase.java
+++ b/util/src/main/java/com/ning/billing/util/notificationq/NotificationQueueServiceBase.java
@@ -25,7 +25,7 @@ import java.util.TreeMap;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.ning.billing.config.NotificationConfig;
+import com.ning.billing.util.config.NotificationConfig;
 import com.ning.billing.util.clock.Clock;
 
 import com.google.common.base.Joiner;
diff --git a/util/src/main/java/com/ning/billing/util/queue/PersistentQueueBase.java b/util/src/main/java/com/ning/billing/util/queue/PersistentQueueBase.java
index e4d194b..8deea0e 100644
--- a/util/src/main/java/com/ning/billing/util/queue/PersistentQueueBase.java
+++ b/util/src/main/java/com/ning/billing/util/queue/PersistentQueueBase.java
@@ -22,7 +22,7 @@ import java.util.concurrent.TimeUnit;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.ning.billing.config.PersistentQueueConfig;
+import com.ning.billing.util.config.PersistentQueueConfig;
 import com.ning.billing.util.jackson.ObjectMapper;
 
 
diff --git a/util/src/main/java/com/ning/billing/util/svcapi/invoice/InvoiceInternalApi.java b/util/src/main/java/com/ning/billing/util/svcapi/invoice/InvoiceInternalApi.java
index c54efe0..ffcfaef 100644
--- a/util/src/main/java/com/ning/billing/util/svcapi/invoice/InvoiceInternalApi.java
+++ b/util/src/main/java/com/ning/billing/util/svcapi/invoice/InvoiceInternalApi.java
@@ -18,12 +18,18 @@ package com.ning.billing.util.svcapi.invoice;
 
 import java.math.BigDecimal;
 import java.util.Collection;
+import java.util.Map;
 import java.util.UUID;
 
+import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
 
+import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceApiException;
+import com.ning.billing.invoice.api.InvoicePayment;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 
 public interface InvoiceInternalApi {
@@ -35,4 +41,28 @@ public interface InvoiceInternalApi {
     public Collection<Invoice> getInvoicesByAccountId(UUID accountId, InternalTenantContext context);
 
     public BigDecimal getAccountBalance(UUID accountId, InternalTenantContext context);
+
+    public void notifyOfPayment(UUID invoiceId, BigDecimal amountOutstanding, Currency currency, UUID paymentId, DateTime paymentDate, InternalCallContext context) throws InvoiceApiException;
+
+    public void notifyOfPayment(InvoicePayment invoicePayment, InternalCallContext context) throws InvoiceApiException;
+
+    public InvoicePayment getInvoicePaymentForAttempt(UUID paymentId, InternalTenantContext context) throws InvoiceApiException;
+
+    public Invoice getInvoiceForPaymentId(UUID paymentId, InternalTenantContext context) throws InvoiceApiException;
+
+    /**
+     * Create a refund.
+     *
+     * @param paymentId                 payment associated with that refund
+     * @param amount                    amount to refund
+     * @param isInvoiceAdjusted         whether the refund should trigger an invoice or invoice item adjustment
+     * @param invoiceItemIdsWithAmounts invoice item ids and associated amounts to adjust
+     * @param paymentCookieId           payment cookie id
+     * @param context                   the call context
+     * @return the created invoice payment object associated with this refund
+     * @throws InvoiceApiException
+     */
+    public InvoicePayment createRefund(UUID paymentId, BigDecimal amount, boolean isInvoiceAdjusted, final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts,
+                                       UUID paymentCookieId, InternalCallContext context) throws InvoiceApiException;
+
 }
diff --git a/util/src/main/java/com/ning/billing/util/svcapi/payment/PaymentInternalApi.java b/util/src/main/java/com/ning/billing/util/svcapi/payment/PaymentInternalApi.java
new file mode 100644
index 0000000..f0d144a
--- /dev/null
+++ b/util/src/main/java/com/ning/billing/util/svcapi/payment/PaymentInternalApi.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.svcapi.payment;
+
+
+import java.util.List;
+import java.util.UUID;
+
+import com.ning.billing.account.api.Account;
+import com.ning.billing.payment.api.Payment;
+import com.ning.billing.payment.api.PaymentApiException;
+import com.ning.billing.payment.api.PaymentMethod;
+import com.ning.billing.util.callcontext.InternalTenantContext;
+
+public interface PaymentInternalApi {
+
+    public Payment getPayment(UUID paymentId, InternalTenantContext context)
+            throws PaymentApiException;
+
+    public PaymentMethod getPaymentMethod(Account account, UUID paymentMethodId, boolean withPluginDetail, InternalTenantContext context)
+            throws PaymentApiException;
+
+    public List<Payment> getAccountPayments(UUID accountId, InternalTenantContext context)
+            throws PaymentApiException;
+
+    public List<PaymentMethod> getPaymentMethods(Account account, boolean withPluginDetail, InternalTenantContext context)
+            throws PaymentApiException;
+}
diff --git a/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java b/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java
index cf7b190..3c7f8d4 100644
--- a/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java
+++ b/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java
@@ -21,10 +21,10 @@ import java.util.UUID;
 
 import javax.inject.Inject;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.Tag;
 import com.ning.billing.util.tag.TagDefinition;
 import com.ning.billing.util.tag.dao.TagDao;
diff --git a/util/src/main/java/com/ning/billing/util/svcapi/tag/TagInternalApi.java b/util/src/main/java/com/ning/billing/util/svcapi/tag/TagInternalApi.java
index 6f1b670..3d6a7c2 100644
--- a/util/src/main/java/com/ning/billing/util/svcapi/tag/TagInternalApi.java
+++ b/util/src/main/java/com/ning/billing/util/svcapi/tag/TagInternalApi.java
@@ -20,10 +20,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.Tag;
 import com.ning.billing.util.tag.TagDefinition;
 
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java b/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java
index 71b8274..e927d84 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java
@@ -21,13 +21,13 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.Tag;
 import com.ning.billing.util.tag.TagDefinition;
 import com.ning.billing.util.tag.dao.TagDao;
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagCreationEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagCreationEvent.java
index 18deb26..16191e7 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagCreationEvent.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagCreationEvent.java
@@ -18,7 +18,7 @@ package com.ning.billing.util.tag.api.user;
 
 import java.util.UUID;
 
-import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.events.ControlTagCreationInternalEvent;
 import com.ning.billing.util.events.DefaultBusInternalEvent;
 import com.ning.billing.util.tag.TagDefinition;
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDeletionEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDeletionEvent.java
index 0e45abc..74d6f40 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDeletionEvent.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDeletionEvent.java
@@ -18,7 +18,7 @@ package com.ning.billing.util.tag.api.user;
 
 import java.util.UUID;
 
-import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.events.ControlTagDeletionInternalEvent;
 import com.ning.billing.util.events.DefaultBusInternalEvent;
 import com.ning.billing.util.tag.TagDefinition;
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagCreationEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagCreationEvent.java
index dd9f86f..5ab8721 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagCreationEvent.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagCreationEvent.java
@@ -18,7 +18,7 @@ package com.ning.billing.util.tag.api.user;
 
 import java.util.UUID;
 
-import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.events.DefaultBusInternalEvent;
 import com.ning.billing.util.events.UserTagCreationInternalEvent;
 import com.ning.billing.util.tag.TagDefinition;
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDeletionEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDeletionEvent.java
index 1d68d14..31d8b8f 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDeletionEvent.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDeletionEvent.java
@@ -18,7 +18,7 @@ package com.ning.billing.util.tag.api.user;
 
 import java.util.UUID;
 
-import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.events.DefaultBusInternalEvent;
 import com.ning.billing.util.events.UserTagDeletionInternalEvent;
 import com.ning.billing.util.tag.TagDefinition;
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/TagEventBuilder.java b/util/src/main/java/com/ning/billing/util/tag/api/user/TagEventBuilder.java
index f918128..4db25cb 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/user/TagEventBuilder.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/TagEventBuilder.java
@@ -18,8 +18,8 @@ package com.ning.billing.util.tag.api.user;
 
 import java.util.UUID;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.callcontext.InternalCallContext;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.events.ControlTagCreationInternalEvent;
 import com.ning.billing.util.events.ControlTagDefinitionCreationInternalEvent;
 import com.ning.billing.util.events.ControlTagDefinitionDeletionInternalEvent;
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
index 92b48c9..9c0e632 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
@@ -30,16 +30,16 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.ning.billing.ErrorCode;
-import com.ning.billing.util.ChangeType;
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.api.TagDefinitionApiException;
+import com.ning.billing.util.audit.ChangeType;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.dao.AuditedCollectionDaoBase;
 import com.ning.billing.util.dao.EntityAudit;
 import com.ning.billing.util.dao.EntityHistory;
 import com.ning.billing.util.dao.Mapper;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.dao.TableName;
 import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
 import com.ning.billing.util.events.TagInternalEvent;
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagDao.java
index c7af586..ccca5ce 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/TagDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagDao.java
@@ -18,10 +18,10 @@ package com.ning.billing.util.tag.dao;
 
 import java.util.UUID;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.dao.AuditedCollectionDao;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.Tag;
 
 public interface TagDao extends AuditedCollectionDao<Tag> {
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java
index b8622b0..a619b79 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java
@@ -28,11 +28,11 @@ import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
 import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
 import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.callcontext.InternalTenantContextBinder;
 import com.ning.billing.util.dao.EntityHistory;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.dao.ObjectTypeBinder;
 import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
 import com.ning.billing.util.tag.Tag;
diff --git a/util/src/main/java/com/ning/billing/util/tag/DefaultTagDefinition.java b/util/src/main/java/com/ning/billing/util/tag/DefaultTagDefinition.java
index 8b0d38c..7732daa 100644
--- a/util/src/main/java/com/ning/billing/util/tag/DefaultTagDefinition.java
+++ b/util/src/main/java/com/ning/billing/util/tag/DefaultTagDefinition.java
@@ -19,7 +19,7 @@ package com.ning.billing.util.tag;
 import java.util.List;
 import java.util.UUID;
 
-import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.entity.EntityBase;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
diff --git a/util/src/main/java/com/ning/billing/util/tag/DefaultTagStore.java b/util/src/main/java/com/ning/billing/util/tag/DefaultTagStore.java
index 0388dda..eb239d0 100644
--- a/util/src/main/java/com/ning/billing/util/tag/DefaultTagStore.java
+++ b/util/src/main/java/com/ning/billing/util/tag/DefaultTagStore.java
@@ -18,7 +18,7 @@ package com.ning.billing.util.tag;
 
 import java.util.UUID;
 
-import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.entity.collection.EntityCollectionBase;
 
 public class DefaultTagStore extends EntityCollectionBase<Tag> implements TagStore {
diff --git a/util/src/main/java/com/ning/billing/util/template/translation/DefaultTranslatorBase.java b/util/src/main/java/com/ning/billing/util/template/translation/DefaultTranslatorBase.java
index d271708..421c84f 100644
--- a/util/src/main/java/com/ning/billing/util/template/translation/DefaultTranslatorBase.java
+++ b/util/src/main/java/com/ning/billing/util/template/translation/DefaultTranslatorBase.java
@@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory;
 
 import com.ning.billing.ErrorCode;
 import com.ning.billing.util.LocaleUtils;
-import com.ning.billing.util.config.UriAccessor;
+import com.ning.billing.util.config.catalog.UriAccessor;
 
 import com.google.inject.Inject;
 
diff --git a/util/src/test/java/com/ning/billing/mock/api/MockAccountUserApi.java b/util/src/test/java/com/ning/billing/mock/api/MockAccountUserApi.java
index 8494212..17137c5 100644
--- a/util/src/test/java/com/ning/billing/mock/api/MockAccountUserApi.java
+++ b/util/src/test/java/com/ning/billing/mock/api/MockAccountUserApi.java
@@ -129,11 +129,6 @@ public class MockAccountUserApi implements AccountUserApi {
     }
 
     @Override
-    public void saveEmails(final UUID accountId, final List<AccountEmail> emails, final CallContext context) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
     public void addEmail(final UUID accountId, final AccountEmail email, final CallContext context) {
         throw new UnsupportedOperationException();
     }
@@ -167,14 +162,4 @@ public class MockAccountUserApi implements AccountUserApi {
             throws AccountApiException {
         throw new UnsupportedOperationException();
     }
-
-    @Override
-    public void updatePaymentMethod(final UUID accountId, final UUID paymentMethodId, final CallContext context) throws AccountApiException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void removePaymentMethod(final UUID accountId, final CallContext context) throws AccountApiException {
-        throw new UnsupportedOperationException();
-    }
 }
diff --git a/util/src/test/java/com/ning/billing/util/audit/api/TestDefaultAuditUserApi.java b/util/src/test/java/com/ning/billing/util/audit/api/TestDefaultAuditUserApi.java
index acf8faa..7f45d5a 100644
--- a/util/src/test/java/com/ning/billing/util/audit/api/TestDefaultAuditUserApi.java
+++ b/util/src/test/java/com/ning/billing/util/audit/api/TestDefaultAuditUserApi.java
@@ -26,6 +26,7 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.entitlement.api.timeline.BundleTimeline;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceItem;
@@ -43,7 +44,6 @@ import com.ning.billing.util.audit.AuditLogsForRefunds;
 import com.ning.billing.util.audit.AuditLogsTestBase;
 import com.ning.billing.util.audit.dao.MockAuditDao;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.dao.TableName;
 import com.ning.billing.util.entity.Entity;
 
diff --git a/util/src/test/java/com/ning/billing/util/audit/AuditLogsTestBase.java b/util/src/test/java/com/ning/billing/util/audit/AuditLogsTestBase.java
index 6a54943..715b240 100644
--- a/util/src/test/java/com/ning/billing/util/audit/AuditLogsTestBase.java
+++ b/util/src/test/java/com/ning/billing/util/audit/AuditLogsTestBase.java
@@ -21,7 +21,6 @@ import java.util.UUID;
 
 import org.mockito.Mockito;
 
-import com.ning.billing.util.ChangeType;
 import com.ning.billing.util.UtilTestSuite;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.clock.ClockMock;
diff --git a/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java b/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java
index 820a209..d0fe9c4 100644
--- a/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java
+++ b/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java
@@ -29,15 +29,15 @@ import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
-import com.ning.billing.util.ChangeType;
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.api.AuditLevel;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.audit.AuditLog;
+import com.ning.billing.util.audit.ChangeType;
 import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.dao.TableName;
 import com.ning.billing.util.glue.AuditModule;
 import com.ning.billing.util.tag.MockTagStoreModuleSql;
diff --git a/util/src/test/java/com/ning/billing/util/audit/TestDefaultAuditLog.java b/util/src/test/java/com/ning/billing/util/audit/TestDefaultAuditLog.java
index 06e4b43..a6fa217 100644
--- a/util/src/test/java/com/ning/billing/util/audit/TestDefaultAuditLog.java
+++ b/util/src/test/java/com/ning/billing/util/audit/TestDefaultAuditLog.java
@@ -21,7 +21,6 @@ import java.util.UUID;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.ning.billing.util.ChangeType;
 import com.ning.billing.util.UtilTestSuite;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.CallOrigin;
diff --git a/util/src/test/java/com/ning/billing/util/callcontext/TestInternalCallContextFactory.java b/util/src/test/java/com/ning/billing/util/callcontext/TestInternalCallContextFactory.java
index 5cfe409..5564b47 100644
--- a/util/src/test/java/com/ning/billing/util/callcontext/TestInternalCallContextFactory.java
+++ b/util/src/test/java/com/ning/billing/util/callcontext/TestInternalCallContextFactory.java
@@ -25,9 +25,9 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.dao.ObjectType;
 
 public class TestInternalCallContextFactory extends UtilTestSuiteWithEmbeddedDB {
 
diff --git a/util/src/test/java/com/ning/billing/util/config/TestXMLLoader.java b/util/src/test/java/com/ning/billing/util/config/TestXMLLoader.java
index 707800f..0fe408b 100644
--- a/util/src/test/java/com/ning/billing/util/config/TestXMLLoader.java
+++ b/util/src/test/java/com/ning/billing/util/config/TestXMLLoader.java
@@ -30,6 +30,8 @@ import org.xml.sax.SAXException;
 
 import com.ning.billing.catalog.api.InvalidConfigException;
 import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.config.catalog.ValidationException;
+import com.ning.billing.util.config.catalog.XMLLoader;
 
 import static org.testng.Assert.assertEquals;
 
diff --git a/util/src/test/java/com/ning/billing/util/config/TestXMLSchemaGenerator.java b/util/src/test/java/com/ning/billing/util/config/TestXMLSchemaGenerator.java
index 8533f50..cf6db03 100644
--- a/util/src/test/java/com/ning/billing/util/config/TestXMLSchemaGenerator.java
+++ b/util/src/test/java/com/ning/billing/util/config/TestXMLSchemaGenerator.java
@@ -25,6 +25,7 @@ import javax.xml.transform.TransformerException;
 import org.testng.annotations.Test;
 
 import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.config.catalog.XMLSchemaGenerator;
 import com.ning.billing.util.io.IOUtils;
 
 public class TestXMLSchemaGenerator extends UtilTestSuite {
diff --git a/util/src/test/java/com/ning/billing/util/config/TestXMLWriter.java b/util/src/test/java/com/ning/billing/util/config/TestXMLWriter.java
index 53c854a..2864af7 100644
--- a/util/src/test/java/com/ning/billing/util/config/TestXMLWriter.java
+++ b/util/src/test/java/com/ning/billing/util/config/TestXMLWriter.java
@@ -23,6 +23,8 @@ import java.net.URI;
 import org.testng.annotations.Test;
 
 import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.config.catalog.XMLLoader;
+import com.ning.billing.util.config.catalog.XMLWriter;
 
 import static org.testng.Assert.assertEquals;
 
diff --git a/util/src/test/java/com/ning/billing/util/config/XmlTestClass.java b/util/src/test/java/com/ning/billing/util/config/XmlTestClass.java
index c39cb71..8fa9929 100644
--- a/util/src/test/java/com/ning/billing/util/config/XmlTestClass.java
+++ b/util/src/test/java/com/ning/billing/util/config/XmlTestClass.java
@@ -20,6 +20,9 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import com.ning.billing.util.config.catalog.ValidatingConfig;
+import com.ning.billing.util.config.catalog.ValidationErrors;
+
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 public class XmlTestClass extends ValidatingConfig<XmlTestClass> {
diff --git a/util/src/test/java/com/ning/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java b/util/src/test/java/com/ning/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
index ab1885f..79afb13 100644
--- a/util/src/test/java/com/ning/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
+++ b/util/src/test/java/com/ning/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
@@ -27,6 +27,7 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.clock.ClockMock;
@@ -34,7 +35,6 @@ import com.ning.billing.util.customfield.CustomField;
 import com.ning.billing.util.customfield.StringCustomField;
 import com.ning.billing.util.customfield.dao.AuditedCustomFieldDao;
 import com.ning.billing.util.customfield.dao.CustomFieldDao;
-import com.ning.billing.util.dao.ObjectType;
 
 import com.google.common.collect.ImmutableList;
 
diff --git a/util/src/test/java/com/ning/billing/util/customfield/dao/MockCustomFieldDao.java b/util/src/test/java/com/ning/billing/util/customfield/dao/MockCustomFieldDao.java
index b785208..b1e703f 100644
--- a/util/src/test/java/com/ning/billing/util/customfield/dao/MockCustomFieldDao.java
+++ b/util/src/test/java/com/ning/billing/util/customfield/dao/MockCustomFieldDao.java
@@ -23,10 +23,10 @@ import java.util.UUID;
 
 import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.customfield.CustomField;
-import com.ning.billing.util.dao.ObjectType;
 
 public class MockCustomFieldDao implements CustomFieldDao {
 
diff --git a/util/src/test/java/com/ning/billing/util/customfield/TestFieldStore.java b/util/src/test/java/com/ning/billing/util/customfield/TestFieldStore.java
index d1f94b3..24fcde1 100644
--- a/util/src/test/java/com/ning/billing/util/customfield/TestFieldStore.java
+++ b/util/src/test/java/com/ning/billing/util/customfield/TestFieldStore.java
@@ -26,12 +26,12 @@ import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
 import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
+import com.ning.billing.ObjectType;
 import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.customfield.dao.AuditedCustomFieldDao;
 import com.ning.billing.util.customfield.dao.CustomFieldDao;
 import com.ning.billing.util.customfield.dao.CustomFieldSqlDao;
-import com.ning.billing.util.dao.ObjectType;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.fail;
diff --git a/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueue.java b/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueue.java
index d59100b..2a59bfd 100644
--- a/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueue.java
+++ b/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueue.java
@@ -26,7 +26,7 @@ import java.util.UUID;
 import org.joda.time.DateTime;
 import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
 
-import com.ning.billing.config.NotificationConfig;
+import com.ning.billing.util.config.NotificationConfig;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.notificationq.NotificationQueueService.NotificationQueueHandler;
diff --git a/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueueService.java b/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueueService.java
index 8fd6c3b..ee5ca32 100644
--- a/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueueService.java
+++ b/util/src/test/java/com/ning/billing/util/notificationq/MockNotificationQueueService.java
@@ -16,7 +16,7 @@
 
 package com.ning.billing.util.notificationq;
 
-import com.ning.billing.config.NotificationConfig;
+import com.ning.billing.util.config.NotificationConfig;
 import com.ning.billing.util.clock.Clock;
 
 import com.google.inject.Inject;
diff --git a/util/src/test/java/com/ning/billing/util/notificationq/TestNotificationQueue.java b/util/src/test/java/com/ning/billing/util/notificationq/TestNotificationQueue.java
index af23273..ee19da5 100644
--- a/util/src/test/java/com/ning/billing/util/notificationq/TestNotificationQueue.java
+++ b/util/src/test/java/com/ning/billing/util/notificationq/TestNotificationQueue.java
@@ -38,7 +38,7 @@ import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
 import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
-import com.ning.billing.config.NotificationConfig;
+import com.ning.billing.util.config.NotificationConfig;
 import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java
index 4fb264a..05c1297 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java
@@ -21,8 +21,8 @@ import java.util.UUID;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.UtilTestSuite;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.jackson.ObjectMapper;
 import com.ning.billing.util.tag.DefaultTagDefinition;
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java
index 93994ac..2b4f300 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java
@@ -21,8 +21,8 @@ import java.util.UUID;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.UtilTestSuite;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.jackson.ObjectMapper;
 import com.ning.billing.util.tag.DefaultTagDefinition;
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java
index fc4e324..9d0172d 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java
@@ -21,8 +21,8 @@ import java.util.UUID;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.UtilTestSuite;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.jackson.ObjectMapper;
 import com.ning.billing.util.tag.DefaultTagDefinition;
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDeletionEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDeletionEvent.java
index e71b8cb..e420df3 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDeletionEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDeletionEvent.java
@@ -21,8 +21,8 @@ import java.util.UUID;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.UtilTestSuite;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.jackson.ObjectMapper;
 import com.ning.billing.util.tag.DefaultTagDefinition;
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestTagEventBuilder.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestTagEventBuilder.java
index 74d0f70..7543b4c 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestTagEventBuilder.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestTagEventBuilder.java
@@ -21,8 +21,8 @@ import java.util.UUID;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.UtilTestSuite;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.events.ControlTagCreationInternalEvent;
 import com.ning.billing.util.events.ControlTagDefinitionCreationInternalEvent;
 import com.ning.billing.util.events.ControlTagDefinitionDeletionInternalEvent;
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java
index 127b794..db56f4b 100644
--- a/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java
@@ -28,9 +28,9 @@ import javax.annotation.Nullable;
 import org.joda.time.DateTime;
 import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.Tag;
 
 public class MockTagDao implements TagDao {
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/TestAuditedTagDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/TestAuditedTagDao.java
index 1477dc1..deaaf4f 100644
--- a/util/src/test/java/com/ning/billing/util/tag/dao/TestAuditedTagDao.java
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/TestAuditedTagDao.java
@@ -29,12 +29,12 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.events.TagInternalEvent;
 import com.ning.billing.util.tag.ControlTagType;
diff --git a/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java b/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java
index bc393a8..00f9931 100644
--- a/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java
+++ b/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java
@@ -33,13 +33,13 @@ import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
+import com.ning.billing.ObjectType;
 import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.dao.TagDao;
 import com.ning.billing.util.tag.dao.TagDefinitionDao;