killbill-memoizeit

analytics: integrate with the new RecordIdApi Signed-off-by:

4/4/2013 9:57:24 PM

Changes

Details

diff --git a/api/src/main/java/com/ning/billing/ObjectType.java b/api/src/main/java/com/ning/billing/ObjectType.java
index 904f15e..0db2faa 100644
--- a/api/src/main/java/com/ning/billing/ObjectType.java
+++ b/api/src/main/java/com/ning/billing/ObjectType.java
@@ -19,6 +19,7 @@ package com.ning.billing;
 public enum ObjectType {
     ACCOUNT("account"),
     ACCOUNT_EMAIL("account email"),
+    BLOCKING_STATES("blocking state"),
     BUNDLE("subscription bundle"),
     CUSTOM_FIELD("custom field"),
     INVOICE("invoice"),
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/BusinessAnalyticsBase.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/BusinessAnalyticsBase.java
index 80abafe..f40fcd4 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/BusinessAnalyticsBase.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/BusinessAnalyticsBase.java
@@ -52,6 +52,7 @@ import com.ning.billing.payment.api.PaymentMethod;
 import com.ning.billing.util.api.AuditLevel;
 import com.ning.billing.util.api.AuditUserApi;
 import com.ning.billing.util.api.CustomFieldUserApi;
+import com.ning.billing.util.api.RecordIdApi;
 import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.audit.AuditLog;
@@ -77,6 +78,15 @@ public abstract class BusinessAnalyticsBase {
     }
 
     //
+    // TENANT
+    //
+
+    protected Long getTenantRecordId(final TenantContext context) throws AnalyticsRefreshException {
+        final RecordIdApi recordIdUserApi = getRecordIdUserApi();
+        return recordIdUserApi.getRecordId(context.getTenantId(), ObjectType.TENANT);
+    }
+
+    //
     // ACCOUNT
     //
 
@@ -102,6 +112,11 @@ public abstract class BusinessAnalyticsBase {
         throw new AnalyticsRefreshException("Unable to find Account creation audit log for id " + accountId);
     }
 
+    protected Long getAccountRecordId(final UUID accountId, final TenantContext context) throws AnalyticsRefreshException {
+        final RecordIdApi recordIdUserApi = getRecordIdUserApi();
+        return recordIdUserApi.getRecordId(accountId, ObjectType.ACCOUNT);
+    }
+
     //
     // SUBSCRIPTION
     //
@@ -149,6 +164,11 @@ public abstract class BusinessAnalyticsBase {
         throw new AnalyticsRefreshException("Unable to find Subscription event creation audit log for id " + subscriptionEventId);
     }
 
+    protected Long getSubscriptionEventRecordId(final UUID subscriptionEventId, final TenantContext context) throws AnalyticsRefreshException {
+        final RecordIdApi recordIdUserApi = getRecordIdUserApi();
+        return recordIdUserApi.getRecordId(subscriptionEventId, ObjectType.SUBSCRIPTION_EVENT);
+    }
+
     //
     // OVERDUE
     //
@@ -174,6 +194,11 @@ public abstract class BusinessAnalyticsBase {
         throw new AnalyticsRefreshException("Unable to find Blocking state creation audit log for id " + blockingStateId);
     }
 
+    protected Long getBlockingStateRecordId(final UUID blockingStateId, final TenantContext context) throws AnalyticsRefreshException {
+        final RecordIdApi recordIdUserApi = getRecordIdUserApi();
+        return recordIdUserApi.getRecordId(blockingStateId, ObjectType.BLOCKING_STATES);
+    }
+
     //
     // INVOICE
     //
@@ -199,6 +224,11 @@ public abstract class BusinessAnalyticsBase {
         throw new AnalyticsRefreshException("Unable to find Invoice creation audit log for id " + invoiceId);
     }
 
+    protected Long getInvoiceRecordId(final UUID invoiceId, final TenantContext context) throws AnalyticsRefreshException {
+        final RecordIdApi recordIdUserApi = getRecordIdUserApi();
+        return recordIdUserApi.getRecordId(invoiceId, ObjectType.INVOICE);
+    }
+
     protected AuditLog getInvoiceItemCreationAuditLog(final UUID invoiceItemId, final TenantContext context) throws AnalyticsRefreshException {
         final List<AuditLog> auditLogsForInvoiceItem = getAuditUserApi().getAuditLogs(invoiceItemId, ObjectType.INVOICE_ITEM, AuditLevel.MINIMAL, context);
         for (final AuditLog auditLog : auditLogsForInvoiceItem) {
@@ -210,6 +240,11 @@ public abstract class BusinessAnalyticsBase {
         throw new AnalyticsRefreshException("Unable to find Invoice item creation audit log for id " + invoiceItemId);
     }
 
+    protected Long getInvoiceItemRecordId(final UUID invoiceItemId, final TenantContext context) throws AnalyticsRefreshException {
+        final RecordIdApi recordIdUserApi = getRecordIdUserApi();
+        return recordIdUserApi.getRecordId(invoiceItemId, ObjectType.INVOICE_ITEM);
+    }
+
     protected Collection<Invoice> getInvoicesByAccountId(final UUID accountId, final CallContext context) throws AnalyticsRefreshException {
         final InvoiceUserApi invoiceUserApi = getInvoiceUserApi();
         return invoiceUserApi.getInvoicesByAccount(accountId, context);
@@ -280,6 +315,11 @@ public abstract class BusinessAnalyticsBase {
         throw new AnalyticsRefreshException("Unable to find Invoice payment creation audit log for id " + invoicePaymentId);
     }
 
+    protected Long getInvoicePaymentRecordId(final UUID invoicePaymentId, final TenantContext context) throws AnalyticsRefreshException {
+        final RecordIdApi recordIdUserApi = getRecordIdUserApi();
+        return recordIdUserApi.getRecordId(invoicePaymentId, ObjectType.INVOICE_PAYMENT);
+    }
+
     //
     // PAYMENT
     //
@@ -350,6 +390,11 @@ public abstract class BusinessAnalyticsBase {
         throw new AnalyticsRefreshException("Unable to find Field creation audit log for id " + fieldId);
     }
 
+    protected Long getFieldRecordId(final UUID fieldId, final TenantContext context) throws AnalyticsRefreshException {
+        final RecordIdApi recordIdUserApi = getRecordIdUserApi();
+        return recordIdUserApi.getRecordId(fieldId, ObjectType.CUSTOM_FIELD);
+    }
+
     //
     // TAG
     //
@@ -381,6 +426,11 @@ public abstract class BusinessAnalyticsBase {
         throw new AnalyticsRefreshException("Unable to find Tag creation audit log for id " + tagId);
     }
 
+    protected Long getTagRecordId(final UUID tagId, final TenantContext context) throws AnalyticsRefreshException {
+        final RecordIdApi recordIdUserApi = getRecordIdUserApi();
+        return recordIdUserApi.getRecordId(tagId, ObjectType.TAG);
+    }
+
     //
     // APIs
     //
@@ -464,4 +514,12 @@ public abstract class BusinessAnalyticsBase {
         }
         return tagUserApi;
     }
+
+    private RecordIdApi getRecordIdUserApi() throws AnalyticsRefreshException {
+        final RecordIdApi recordIdApi = osgiKillbillAPI.getRecordIdApi();
+        if (recordIdApi == null) {
+            throw new AnalyticsRefreshException("Error retrieving recordIdApi");
+        }
+        return recordIdApi;
+    }
 }
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessAccountDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessAccountDao.java
index e92c352..d31593d 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessAccountDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessAccountDao.java
@@ -90,6 +90,15 @@ public class BusinessAccountDao extends BusinessAnalyticsDaoBase {
             }
         }
 
-        return new BusinessAccountModelDao(account, accountBalance, lastInvoice, lastPayment, creationAuditLog);
+        final Long accountRecordId = getAccountRecordId(account.getId(), context);
+        final Long tenantRecordId = getTenantRecordId(context);
+
+        return new BusinessAccountModelDao(account,
+                                           accountRecordId,
+                                           accountBalance,
+                                           lastInvoice,
+                                           lastPayment,
+                                           creationAuditLog,
+                                           tenantRecordId);
     }
 }
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessFieldDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessFieldDao.java
index 391cd5e..2a8287f 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessFieldDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessFieldDao.java
@@ -71,12 +71,21 @@ public class BusinessFieldDao extends BusinessAnalyticsDaoBase {
     }
 
     private Collection<BusinessFieldModelDao> createBusinessFields(final Account account, final ObjectType objectType, final CallContext context) throws AnalyticsRefreshException {
+        final Long accountRecordId = getAccountRecordId(account.getId(), context);
+        final Long tenantRecordId = getTenantRecordId(context);
+
         final Collection<CustomField> fields = getFieldsForAccountAndObjectType(account.getId(), objectType, context);
 
         final Collection<BusinessFieldModelDao> fieldModelDaos = new LinkedList<BusinessFieldModelDao>();
         for (final CustomField field : fields) {
+            final Long customFieldRecordId = getFieldRecordId(field.getId(), context);
             final AuditLog creationAuditLog = getFieldCreationAuditLog(field.getId(), context);
-            final BusinessFieldModelDao fieldModelDao = BusinessFieldModelDao.create(account, field, creationAuditLog);
+            final BusinessFieldModelDao fieldModelDao = BusinessFieldModelDao.create(account,
+                                                                                     accountRecordId,
+                                                                                     field,
+                                                                                     customFieldRecordId,
+                                                                                     creationAuditLog,
+                                                                                     tenantRecordId);
             fieldModelDaos.add(fieldModelDao);
         }
 
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessInvoiceDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessInvoiceDao.java
index ea61e8b..cfcd792 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessInvoiceDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessInvoiceDao.java
@@ -43,8 +43,6 @@ import com.ning.killbill.osgi.libs.killbill.OSGIKillbillAPI;
 import com.ning.killbill.osgi.libs.killbill.OSGIKillbillDataSource;
 import com.ning.killbill.osgi.libs.killbill.OSGIKillbillLogService;
 
-import com.google.common.annotations.VisibleForTesting;
-
 public class BusinessInvoiceDao extends BusinessAnalyticsDaoBase {
 
     private final BusinessAccountDao businessAccountDao;
@@ -88,14 +86,23 @@ public class BusinessInvoiceDao extends BusinessAnalyticsDaoBase {
 
     public Map<BusinessInvoiceModelDao, Collection<BusinessInvoiceItemBaseModelDao>> createBusinessInvoicesAndInvoiceItems(final Account account,
                                                                                                                            final CallContext context) throws AnalyticsRefreshException {
+        final Long accountRecordId = getAccountRecordId(account.getId(), context);
+        final Long tenantRecordId = getTenantRecordId(context);
+
         // Lookup the invoices for that account
         final Map<BusinessInvoiceModelDao, Collection<BusinessInvoiceItemBaseModelDao>> businessInvoices = new HashMap<BusinessInvoiceModelDao, Collection<BusinessInvoiceItemBaseModelDao>>();
 
         // Create the business invoice and associated business invoice items
         final Collection<Invoice> invoices = getInvoicesByAccountId(account.getId(), context);
         for (final Invoice invoice : invoices) {
+            final Long invoiceRecordId = getInvoiceRecordId(invoice.getId(), context);
             final AuditLog creationAuditLog = getInvoiceCreationAuditLog(invoice.getId(), context);
-            final BusinessInvoiceModelDao businessInvoice = new BusinessInvoiceModelDao(account, invoice, creationAuditLog);
+            final BusinessInvoiceModelDao businessInvoice = new BusinessInvoiceModelDao(account,
+                                                                                        accountRecordId,
+                                                                                        invoice,
+                                                                                        invoiceRecordId,
+                                                                                        creationAuditLog,
+                                                                                        tenantRecordId);
 
             final List<BusinessInvoiceItemBaseModelDao> businessInvoiceItems = new ArrayList<BusinessInvoiceItemBaseModelDao>();
             for (final InvoiceItem invoiceItem : invoice.getInvoiceItems()) {
@@ -148,11 +155,10 @@ public class BusinessInvoiceDao extends BusinessAnalyticsDaoBase {
         }
     }
 
-    @VisibleForTesting
-    BusinessInvoiceItemBaseModelDao createBusinessInvoiceItem(final Account account,
-                                                              final Invoice invoice,
-                                                              final InvoiceItem invoiceItem,
-                                                              final TenantContext context) throws AnalyticsRefreshException {
+    private BusinessInvoiceItemBaseModelDao createBusinessInvoiceItem(final Account account,
+                                                                      final Invoice invoice,
+                                                                      final InvoiceItem invoiceItem,
+                                                                      final TenantContext context) throws AnalyticsRefreshException {
         SubscriptionBundle bundle = null;
         // Subscription and bundle could be null for e.g. credits or adjustments
         if (invoiceItem.getBundleId() != null) {
@@ -169,8 +175,20 @@ public class BusinessInvoiceDao extends BusinessAnalyticsDaoBase {
             planPhase = getPlanPhaseFromInvoiceItem(invoiceItem, context);
         }
 
+        final Long invoiceItemRecordId = getInvoiceItemRecordId(invoiceItem.getId(), context);
         final AuditLog creationAuditLog = getInvoiceItemCreationAuditLog(invoiceItem.getId(), context);
-
-        return BusinessInvoiceItemBaseModelDao.create(account, invoice, invoiceItem, bundle, plan, planPhase, creationAuditLog);
+        final Long accountRecordId = getAccountRecordId(account.getId(), context);
+        final Long tenantRecordId = getTenantRecordId(context);
+
+        return BusinessInvoiceItemBaseModelDao.create(account,
+                                                      accountRecordId,
+                                                      invoice,
+                                                      invoiceItem,
+                                                      invoiceItemRecordId,
+                                                      bundle,
+                                                      plan,
+                                                      planPhase,
+                                                      creationAuditLog,
+                                                      tenantRecordId);
     }
 }
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessInvoicePaymentDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessInvoicePaymentDao.java
index 56ecfa1..4b7d90e 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessInvoicePaymentDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessInvoicePaymentDao.java
@@ -105,14 +105,27 @@ public class BusinessInvoicePaymentDao extends BusinessAnalyticsDaoBase {
                                                                                          final CallContext context) throws AnalyticsRefreshException {
         final Collection<BusinessInvoicePaymentBaseModelDao> businessInvoicePayments = new LinkedList<BusinessInvoicePaymentBaseModelDao>();
 
+        final Long accountRecordId = getAccountRecordId(account.getId(), context);
+        final Long tenantRecordId = getTenantRecordId(context);
+
         final Collection<InvoicePayment> invoicePayments = getAccountInvoicePayments(account.getId(), context);
         for (final InvoicePayment invoicePayment : invoicePayments) {
+            final Long invoicePaymentRecordId = getInvoicePaymentRecordId(invoicePayment.getId(), context);
+
             final Invoice invoice = getInvoice(invoicePayment.getInvoiceId(), context);
             final Payment payment = getPayment(invoicePayment.getPaymentId(), context);
             final PaymentMethod paymentMethod = getPaymentMethod(payment.getPaymentMethodId(), context);
             final AuditLog creationAuditLog = getInvoicePaymentCreationAuditLog(invoicePayment.getId(), context);
 
-            final BusinessInvoicePaymentBaseModelDao businessInvoicePayment = BusinessInvoicePaymentBaseModelDao.create(account, invoice, invoicePayment, payment, paymentMethod, creationAuditLog);
+            final BusinessInvoicePaymentBaseModelDao businessInvoicePayment = BusinessInvoicePaymentBaseModelDao.create(account,
+                                                                                                                        accountRecordId,
+                                                                                                                        invoice,
+                                                                                                                        invoicePayment,
+                                                                                                                        invoicePaymentRecordId,
+                                                                                                                        payment,
+                                                                                                                        paymentMethod,
+                                                                                                                        creationAuditLog,
+                                                                                                                        tenantRecordId);
             if (businessInvoicePayment != null) {
                 businessInvoicePayments.add(businessInvoicePayment);
             }
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessOverdueStatusDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessOverdueStatusDao.java
index f3dd1c9..7374db4 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessOverdueStatusDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessOverdueStatusDao.java
@@ -99,15 +99,22 @@ public class BusinessOverdueStatusDao extends BusinessAnalyticsDaoBase {
             return businessOverdueStatuses;
         }
 
+        final Long accountRecordId = getAccountRecordId(account.getId(), context);
+        final Long tenantRecordId = getTenantRecordId(context);
+
         final List<BlockingState> blockingStates = Lists.reverse(ImmutableList.<BlockingState>copyOf(blockingStatesOrdered));
         DateTime previousStartDate = null;
         for (final BlockingState state : blockingStates) {
+            final Long blockingStateRecordId = getBlockingStateRecordId(state.getId(), context);
             final AuditLog creationAuditLog = getBlockingStateCreationAuditLog(state.getId(), context);
             final BusinessOverdueStatusModelDao overdueStatus = new BusinessOverdueStatusModelDao(account,
+                                                                                                  accountRecordId,
                                                                                                   subscriptionBundle,
                                                                                                   state,
+                                                                                                  blockingStateRecordId,
                                                                                                   previousStartDate,
-                                                                                                  creationAuditLog);
+                                                                                                  creationAuditLog,
+                                                                                                  tenantRecordId);
             businessOverdueStatuses.add(overdueStatus);
             previousStartDate = state.getTimestamp();
         }
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessSubscriptionTransitionDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessSubscriptionTransitionDao.java
index ebe0fe4..498c92f 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessSubscriptionTransitionDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessSubscriptionTransitionDao.java
@@ -119,15 +119,22 @@ public class BusinessSubscriptionTransitionDao extends BusinessAnalyticsDaoBase 
                                                                                subscriptionTransition.getNextState());
 
         // TODO
+        final Long subscriptionEventRecordId = getSubscriptionEventRecordId(null, context);
         final AuditLog creationAuditLog = getSubscriptionEventCreationAuditLog(null, context);
 
+        final Long accountRecordId = getAccountRecordId(account.getId(), context);
+        final Long tenantRecordId = getTenantRecordId(context);
+
         return new BusinessSubscriptionTransitionModelDao(account,
+                                                          accountRecordId,
                                                           subscriptionBundle,
                                                           subscriptionTransition,
+                                                          subscriptionEventRecordId,
                                                           subscriptionTransition.getRequestedTransitionTime(),
                                                           businessEvent,
                                                           prevBst == null ? null : prevBst.getNextSubscription(),
                                                           nextSubscription,
-                                                          creationAuditLog);
+                                                          creationAuditLog,
+                                                          tenantRecordId);
     }
 }
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessTagDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessTagDao.java
index 509bf1d..5d044f3 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessTagDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessTagDao.java
@@ -71,13 +71,23 @@ public class BusinessTagDao extends BusinessAnalyticsDaoBase {
     }
 
     private Collection<BusinessTagModelDao> createBusinessTags(final Account account, final CallContext context) throws AnalyticsRefreshException {
+        final Long accountRecordId = getAccountRecordId(account.getId(), context);
+        final Long tenantRecordId = getTenantRecordId(context);
+
         final Collection<Tag> tags = getTagsForAccount(account.getId(), context);
 
         final Collection<BusinessTagModelDao> tagModelDaos = new LinkedList<BusinessTagModelDao>();
         for (final Tag tag : tags) {
+            final Long tagRecordId = getTagRecordId(tag.getId(), context);
             final TagDefinition tagDefinition = getTagDefinition(tag.getTagDefinitionId(), context);
             final AuditLog creationAuditLog = getTagCreationAuditLog(tag.getId(), context);
-            final BusinessTagModelDao tagModelDao = BusinessTagModelDao.create(account, tag, tagDefinition, creationAuditLog);
+            final BusinessTagModelDao tagModelDao = BusinessTagModelDao.create(account,
+                                                                               accountRecordId,
+                                                                               tag,
+                                                                               tagRecordId,
+                                                                               tagDefinition,
+                                                                               creationAuditLog,
+                                                                               tenantRecordId);
             tagModelDaos.add(tagModelDao);
         }
 
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountFieldModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountFieldModelDao.java
index b74aadb..a3167e3 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountFieldModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountFieldModelDao.java
@@ -23,9 +23,17 @@ import com.ning.billing.util.customfield.CustomField;
 public class BusinessAccountFieldModelDao extends BusinessFieldModelDao {
 
     public BusinessAccountFieldModelDao(final Account account,
+                                        final Long accountRecordId,
                                         final CustomField customField,
-                                        final AuditLog creationAuditLog) {
-        super(account, customField, creationAuditLog);
+                                        final Long customFieldRecordId,
+                                        final AuditLog creationAuditLog,
+                                        final Long tenantRecordId) {
+        super(account,
+              accountRecordId,
+              customField,
+              customFieldRecordId,
+              creationAuditLog,
+              tenantRecordId);
     }
 
     @Override
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountModelDao.java
index 27d4b4d..24f2c8f 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountModelDao.java
@@ -37,6 +37,9 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
     private final Integer firstNameLength;
     private final String currency;
     private final Integer billingCycleDayLocal;
+    private final UUID paymentMethodId;
+    private final String timeZone;
+    private final String locale;
     private final String address1;
     private final String address2;
     private final String companyName;
@@ -52,33 +55,36 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
     private final DateTime lastPaymentDate;
     private final String lastPaymentStatus;
 
-    private BusinessAccountModelDao(final String email,
-                                    final Integer firstNameLength,
-                                    final String currency,
-                                    final Integer billingCycleDayLocal,
-                                    final String address1,
-                                    final String address2,
-                                    final String companyName,
-                                    final String city,
-                                    final String stateOrProvince,
-                                    final String country,
-                                    final String postalCode,
-                                    final String phone,
-                                    final Boolean isMigrated,
-                                    final Boolean notifiedForInvoices,
-                                    final BigDecimal balance,
-                                    final LocalDate lastInvoiceDate,
-                                    final DateTime lastPaymentDate,
-                                    final String lastPaymentStatus,
-                                    final DateTime createdDate,
-                                    final String createdBy,
-                                    final String createdReasonCode,
-                                    final String createdComments,
-                                    final UUID accountId,
-                                    final String accountName,
-                                    final String accountExternalKey,
-                                    final Long accountRecordId,
-                                    final Long tenantRecordId) {
+    public BusinessAccountModelDao(final String email,
+                                   final Integer firstNameLength,
+                                   final String currency,
+                                   final Integer billingCycleDayLocal,
+                                   final UUID paymentMethodId,
+                                   final String timeZone,
+                                   final String locale,
+                                   final String address1,
+                                   final String address2,
+                                   final String companyName,
+                                   final String city,
+                                   final String stateOrProvince,
+                                   final String country,
+                                   final String postalCode,
+                                   final String phone,
+                                   final Boolean isMigrated,
+                                   final Boolean notifiedForInvoices,
+                                   final BigDecimal balance,
+                                   final LocalDate lastInvoiceDate,
+                                   final DateTime lastPaymentDate,
+                                   final String lastPaymentStatus,
+                                   final DateTime createdDate,
+                                   final String createdBy,
+                                   final String createdReasonCode,
+                                   final String createdComments,
+                                   final UUID accountId,
+                                   final String accountName,
+                                   final String accountExternalKey,
+                                   final Long accountRecordId,
+                                   final Long tenantRecordId) {
         super(createdDate,
               createdBy,
               createdReasonCode,
@@ -92,6 +98,9 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
         this.firstNameLength = firstNameLength;
         this.currency = currency;
         this.billingCycleDayLocal = billingCycleDayLocal;
+        this.paymentMethodId = paymentMethodId;
+        this.timeZone = timeZone;
+        this.locale = locale;
         this.address1 = address1;
         this.address2 = address2;
         this.companyName = companyName;
@@ -109,14 +118,19 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
     }
 
     public BusinessAccountModelDao(final Account account,
+                                   final Long accountRecordId,
                                    final BigDecimal balance,
                                    @Nullable final Invoice lastInvoice,
                                    @Nullable final Payment lastPayment,
-                                   final AuditLog creationAuditLog) {
+                                   final AuditLog creationAuditLog,
+                                   final Long tenantRecordId) {
         this(account.getEmail(),
              account.getFirstNameLength(),
              account.getCurrency() == null ? null : account.getCurrency().toString(),
              account.getBillCycleDayLocal(),
+             account.getPaymentMethodId(),
+             account.getTimeZone() == null ? null : account.getTimeZone().toString(),
+             account.getLocale(),
              account.getAddress1(),
              account.getAddress2(),
              account.getCompanyName(),
@@ -138,9 +152,8 @@ public class BusinessAccountModelDao extends BusinessModelDaoBase {
              account.getId(),
              account.getName(),
              account.getExternalKey(),
-             // TODO
-             null,
-             null);
+             accountRecordId,
+             tenantRecordId);
     }
 
     @Override
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountTagModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountTagModelDao.java
index 6f4888f..3c81637 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountTagModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessAccountTagModelDao.java
@@ -24,10 +24,19 @@ import com.ning.billing.util.tag.TagDefinition;
 public class BusinessAccountTagModelDao extends BusinessTagModelDao {
 
     public BusinessAccountTagModelDao(final Account account,
+                                      final Long accountRecordId,
                                       final Tag tag,
+                                      final Long tagRecordId,
                                       final TagDefinition tagDefinition,
-                                      final AuditLog creationAuditLog) {
-        super(account, tag, tagDefinition, creationAuditLog);
+                                      final AuditLog creationAuditLog,
+                                      final Long tenantRecordId) {
+        super(account,
+              accountRecordId,
+              tag,
+              tagRecordId,
+              tagDefinition,
+              creationAuditLog,
+              tenantRecordId);
     }
 
     @Override
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessFieldModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessFieldModelDao.java
index be68ae9..6fa7be5 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessFieldModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessFieldModelDao.java
@@ -38,32 +38,50 @@ public abstract class BusinessFieldModelDao extends BusinessModelDaoBase {
     private final String value;
 
     public static BusinessFieldModelDao create(final Account account,
+                                               final Long accountRecordId,
                                                final CustomField customField,
-                                               final AuditLog creationAuditLog) {
+                                               final Long customFieldRecordId,
+                                               final AuditLog creationAuditLog,
+                                               final Long tenantRecordId) {
         if (ObjectType.ACCOUNT.equals(customField.getObjectType())) {
-            return new BusinessAccountFieldModelDao(account, customField, creationAuditLog);
+            return new BusinessAccountFieldModelDao(account,
+                                                    accountRecordId,
+                                                    customField,
+                                                    customFieldRecordId,
+                                                    creationAuditLog,
+                                                    tenantRecordId);
         } else if (ObjectType.INVOICE_PAYMENT.equals(customField.getObjectType())) {
-            return new BusinessInvoiceFieldModelDao(account, customField, creationAuditLog);
+            return new BusinessInvoiceFieldModelDao(account,
+                                                    accountRecordId,
+                                                    customField,
+                                                    customFieldRecordId,
+                                                    creationAuditLog,
+                                                    tenantRecordId);
         } else if (ObjectType.INVOICE.equals(customField.getObjectType())) {
-            return new BusinessInvoicePaymentFieldModelDao(account, customField, creationAuditLog);
+            return new BusinessInvoicePaymentFieldModelDao(account,
+                                                           accountRecordId,
+                                                           customField,
+                                                           customFieldRecordId,
+                                                           creationAuditLog,
+                                                           tenantRecordId);
         } else {
             // We don't care
             return null;
         }
     }
 
-    private BusinessFieldModelDao(final Long customFieldRecordId,
-                                  final String name,
-                                  final String value,
-                                  final DateTime createdDate,
-                                  final String createdBy,
-                                  final String createdReasonCode,
-                                  final String createdComments,
-                                  final UUID accountId,
-                                  final String accountName,
-                                  final String accountExternalKey,
-                                  final Long accountRecordId,
-                                  final Long tenantRecordId) {
+    public BusinessFieldModelDao(final Long customFieldRecordId,
+                                 final String name,
+                                 final String value,
+                                 final DateTime createdDate,
+                                 final String createdBy,
+                                 final String createdReasonCode,
+                                 final String createdComments,
+                                 final UUID accountId,
+                                 final String accountName,
+                                 final String accountExternalKey,
+                                 final Long accountRecordId,
+                                 final Long tenantRecordId) {
         super(createdDate,
               createdBy,
               createdReasonCode,
@@ -78,10 +96,13 @@ public abstract class BusinessFieldModelDao extends BusinessModelDaoBase {
         this.value = value;
     }
 
-    protected BusinessFieldModelDao(final Account account,
-                                    final CustomField customField,
-                                    final AuditLog creationAuditLog) {
-        this(null /* TODO */,
+    public BusinessFieldModelDao(final Account account,
+                                 final Long accountRecordId,
+                                 final CustomField customField,
+                                 final Long customFieldRecordId,
+                                 final AuditLog creationAuditLog,
+                                 final Long tenantRecordId) {
+        this(customFieldRecordId,
              customField.getFieldName(),
              customField.getFieldValue(),
              customField.getCreatedDate(),
@@ -91,9 +112,8 @@ public abstract class BusinessFieldModelDao extends BusinessModelDaoBase {
              account.getId(),
              account.getName(),
              account.getExternalKey(),
-             // TODO
-             null,
-             null);
+             accountRecordId,
+             tenantRecordId);
     }
 
     public Long getCustomFieldRecordId() {
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceAdjustmentModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceAdjustmentModelDao.java
index 355bdd8..ef81a6f 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceAdjustmentModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceAdjustmentModelDao.java
@@ -29,19 +29,25 @@ import com.ning.billing.util.audit.AuditLog;
 public class BusinessInvoiceAdjustmentModelDao extends BusinessInvoiceItemBaseModelDao {
 
     public BusinessInvoiceAdjustmentModelDao(final Account account,
+                                             final Long accountRecordId,
                                              final Invoice invoice,
                                              final InvoiceItem invoiceItem,
+                                             final Long invoiceItemRecordId,
                                              @Nullable final SubscriptionBundle bundle,
                                              @Nullable final Plan plan,
                                              @Nullable final PlanPhase planPhase,
-                                             final AuditLog creationAuditLog) {
+                                             final AuditLog creationAuditLog,
+                                             final Long tenantRecordId) {
         super(account,
+              accountRecordId,
               invoice,
               invoiceItem,
+              invoiceItemRecordId,
               bundle,
               plan,
               planPhase,
-              creationAuditLog);
+              creationAuditLog,
+              tenantRecordId);
     }
 
     @Override
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceFieldModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceFieldModelDao.java
index 07d4755..3654423 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceFieldModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceFieldModelDao.java
@@ -27,9 +27,17 @@ public class BusinessInvoiceFieldModelDao extends BusinessFieldModelDao {
     private final UUID invoiceId;
 
     public BusinessInvoiceFieldModelDao(final Account account,
+                                        final Long accountRecordId,
                                         final CustomField customField,
-                                        final AuditLog creationAuditLog) {
-        super(account, customField, creationAuditLog);
+                                        final Long customFieldRecordId,
+                                        final AuditLog creationAuditLog,
+                                        final Long tenantRecordId) {
+        super(account,
+              accountRecordId,
+              customField,
+              customFieldRecordId,
+              creationAuditLog,
+              tenantRecordId);
         this.invoiceId = customField.getObjectId();
     }
 
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemAdjustmentModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemAdjustmentModelDao.java
index 46470de..0ea1e84 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemAdjustmentModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemAdjustmentModelDao.java
@@ -29,19 +29,25 @@ import com.ning.billing.util.audit.AuditLog;
 public class BusinessInvoiceItemAdjustmentModelDao extends BusinessInvoiceItemBaseModelDao {
 
     public BusinessInvoiceItemAdjustmentModelDao(final Account account,
+                                                 final Long accountRecordId,
                                                  final Invoice invoice,
                                                  final InvoiceItem invoiceItem,
+                                                 final Long invoiceItemRecordId,
                                                  @Nullable final SubscriptionBundle bundle,
                                                  @Nullable final Plan plan,
                                                  @Nullable final PlanPhase planPhase,
-                                                 final AuditLog creationAuditLog) {
+                                                 final AuditLog creationAuditLog,
+                                                 final Long tenantRecordId) {
         super(account,
+              accountRecordId,
               invoice,
               invoiceItem,
+              invoiceItemRecordId,
               bundle,
               plan,
               planPhase,
-              creationAuditLog);
+              creationAuditLog,
+              tenantRecordId);
     }
 
     @Override
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemBaseModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemBaseModelDao.java
index 552c5b5..fcbf0e5 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemBaseModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemBaseModelDao.java
@@ -71,65 +71,104 @@ public abstract class BusinessInvoiceItemBaseModelDao extends BusinessModelDaoBa
     private final UUID linkedItemId;
 
     public static BusinessInvoiceItemBaseModelDao create(final Account account,
+                                                         final Long accountRecordId,
                                                          final Invoice invoice,
                                                          final InvoiceItem invoiceItem,
+                                                         final Long invoiceItemRecordId,
                                                          @Nullable final SubscriptionBundle bundle,
                                                          @Nullable final Plan plan,
                                                          @Nullable final PlanPhase planPhase,
-                                                         final AuditLog creationAuditLog) {
+                                                         final AuditLog creationAuditLog,
+                                                         final Long tenantRecordId) {
         if (InvoiceItemType.REFUND_ADJ.equals(invoiceItem.getInvoiceItemType())) {
-            return new BusinessInvoiceAdjustmentModelDao(account, invoice, invoiceItem, bundle, plan, planPhase, creationAuditLog);
+            return new BusinessInvoiceAdjustmentModelDao(account,
+                                                         accountRecordId,
+                                                         invoice,
+                                                         invoiceItem,
+                                                         invoiceItemRecordId,
+                                                         bundle,
+                                                         plan,
+                                                         planPhase,
+                                                         creationAuditLog,
+                                                         tenantRecordId);
         } else if (InvoiceItemType.EXTERNAL_CHARGE.equals(invoiceItem.getInvoiceItemType()) ||
                    InvoiceItemType.FIXED.equals(invoiceItem.getInvoiceItemType()) ||
                    InvoiceItemType.RECURRING.equals(invoiceItem.getInvoiceItemType())) {
-            return new BusinessInvoiceItemModelDao(account, invoice, invoiceItem, bundle, plan, planPhase, creationAuditLog);
+            return new BusinessInvoiceItemModelDao(account,
+                                                   accountRecordId,
+                                                   invoice,
+                                                   invoiceItem,
+                                                   invoiceItemRecordId,
+                                                   bundle,
+                                                   plan,
+                                                   planPhase,
+                                                   creationAuditLog,
+                                                   tenantRecordId);
         } else if (InvoiceItemType.ITEM_ADJ.equals(invoiceItem.getInvoiceItemType())) {
-            return new BusinessInvoiceItemAdjustmentModelDao(account, invoice, invoiceItem, bundle, plan, planPhase, creationAuditLog);
-        } else if ((InvoiceItemType.CBA_ADJ.equals(invoiceItem.getInvoiceItemType()) && invoiceItem.getAmount().compareTo(BigDecimal.ZERO) <= 0) ||
+            return new BusinessInvoiceItemAdjustmentModelDao(account,
+                                                             accountRecordId,
+                                                             invoice,
+                                                             invoiceItem,
+                                                             invoiceItemRecordId,
+                                                             bundle,
+                                                             plan,
+                                                             planPhase,
+                                                             creationAuditLog,
+                                                             tenantRecordId);
+        } else if (InvoiceItemType.CBA_ADJ.equals(invoiceItem.getInvoiceItemType()) ||
                    InvoiceItemType.CREDIT_ADJ.equals(invoiceItem.getInvoiceItemType())) {
-            return new BusinessInvoiceItemCreditModelDao(account, invoice, invoiceItem, bundle, plan, planPhase, creationAuditLog);
+            return new BusinessInvoiceItemCreditModelDao(account,
+                                                         accountRecordId,
+                                                         invoice,
+                                                         invoiceItem,
+                                                         invoiceItemRecordId,
+                                                         bundle,
+                                                         plan,
+                                                         planPhase,
+                                                         creationAuditLog,
+                                                         tenantRecordId);
         } else {
             // We don't care
             return null;
         }
     }
 
-    private BusinessInvoiceItemBaseModelDao(final Long invoiceItemRecordId,
-                                            final UUID itemId,
-                                            final UUID invoiceId,
-                                            final Integer invoiceNumber,
-                                            final DateTime invoiceCreatedDate,
-                                            final LocalDate invoiceDate,
-                                            final LocalDate invoiceTargetDate,
-                                            final String invoiceCurrency,
-                                            final BigDecimal invoiceBalance,
-                                            final BigDecimal invoiceAmountPaid,
-                                            final BigDecimal invoiceAmountCharged,
-                                            final BigDecimal invoiceOriginalAmountCharged,
-                                            final BigDecimal invoiceAmountCredited,
-                                            final String itemType,
-                                            final Boolean revenueRecognizable,
-                                            final String bundleExternalKey,
-                                            final String productName,
-                                            final String productType,
-                                            final String productCategory,
-                                            final String slug,
-                                            final String phase,
-                                            final String billingPeriod,
-                                            final LocalDate startDate,
-                                            final LocalDate endDate,
-                                            final BigDecimal amount,
-                                            final String currency,
-                                            final UUID linkedItemId,
-                                            final DateTime createdDate,
-                                            final String createdBy,
-                                            final String createdReasonCode,
-                                            final String createdComments,
-                                            final UUID accountId,
-                                            final String accountName,
-                                            final String accountExternalKey,
-                                            final Long accountRecordId,
-                                            final Long tenantRecordId) {
+    public BusinessInvoiceItemBaseModelDao(final Long invoiceItemRecordId,
+                                           final UUID itemId,
+                                           final UUID invoiceId,
+                                           final Integer invoiceNumber,
+                                           final DateTime invoiceCreatedDate,
+                                           final LocalDate invoiceDate,
+                                           final LocalDate invoiceTargetDate,
+                                           final String invoiceCurrency,
+                                           final BigDecimal invoiceBalance,
+                                           final BigDecimal invoiceAmountPaid,
+                                           final BigDecimal invoiceAmountCharged,
+                                           final BigDecimal invoiceOriginalAmountCharged,
+                                           final BigDecimal invoiceAmountCredited,
+                                           final String itemType,
+                                           final Boolean revenueRecognizable,
+                                           final String bundleExternalKey,
+                                           final String productName,
+                                           final String productType,
+                                           final String productCategory,
+                                           final String slug,
+                                           final String phase,
+                                           final String billingPeriod,
+                                           final LocalDate startDate,
+                                           final LocalDate endDate,
+                                           final BigDecimal amount,
+                                           final String currency,
+                                           final UUID linkedItemId,
+                                           final DateTime createdDate,
+                                           final String createdBy,
+                                           final String createdReasonCode,
+                                           final String createdComments,
+                                           final UUID accountId,
+                                           final String accountName,
+                                           final String accountExternalKey,
+                                           final Long accountRecordId,
+                                           final Long tenantRecordId) {
         super(createdDate,
               createdBy,
               createdReasonCode,
@@ -168,14 +207,17 @@ public abstract class BusinessInvoiceItemBaseModelDao extends BusinessModelDaoBa
         this.linkedItemId = linkedItemId;
     }
 
-    protected BusinessInvoiceItemBaseModelDao(final Account account,
-                                              final Invoice invoice,
-                                              final InvoiceItem invoiceItem,
-                                              @Nullable final SubscriptionBundle bundle,
-                                              @Nullable final Plan plan,
-                                              @Nullable final PlanPhase planPhase,
-                                              final AuditLog creationAuditLog) {
-        this(null /* TODO */,
+    public BusinessInvoiceItemBaseModelDao(final Account account,
+                                           final Long accountRecordId,
+                                           final Invoice invoice,
+                                           final InvoiceItem invoiceItem,
+                                           final Long invoiceItemRecordId,
+                                           @Nullable final SubscriptionBundle bundle,
+                                           @Nullable final Plan plan,
+                                           @Nullable final PlanPhase planPhase,
+                                           final AuditLog creationAuditLog,
+                                           final Long tenantRecordId) {
+        this(invoiceItemRecordId,
              invoiceItem.getId(),
              invoice.getId(),
              invoice.getInvoiceNumber(),
@@ -186,7 +228,7 @@ public abstract class BusinessInvoiceItemBaseModelDao extends BusinessModelDaoBa
              invoice.getBalance(),
              invoice.getPaidAmount(),
              invoice.getChargedAmount(),
-             null /* TODO */,
+             invoice.getOriginalChargedAmount(),
              invoice.getCreditAdjAmount(),
              invoiceItem.getInvoiceItemType().toString(),
              null /* TODO */,
@@ -210,9 +252,8 @@ public abstract class BusinessInvoiceItemBaseModelDao extends BusinessModelDaoBa
              account.getId(),
              account.getName(),
              account.getExternalKey(),
-             // TODO
-             null,
-             null);
+             accountRecordId,
+             tenantRecordId);
     }
 
     public Long getInvoiceItemRecordId() {
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemCreditModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemCreditModelDao.java
index 3ec8659..818550b 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemCreditModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemCreditModelDao.java
@@ -29,19 +29,25 @@ import com.ning.billing.util.audit.AuditLog;
 public class BusinessInvoiceItemCreditModelDao extends BusinessInvoiceItemBaseModelDao {
 
     public BusinessInvoiceItemCreditModelDao(final Account account,
+                                             final Long accountRecordId,
                                              final Invoice invoice,
                                              final InvoiceItem invoiceItem,
+                                             final Long invoiceItemRecordId,
                                              @Nullable final SubscriptionBundle bundle,
                                              @Nullable final Plan plan,
                                              @Nullable final PlanPhase planPhase,
-                                             final AuditLog creationAuditLogs) {
+                                             final AuditLog creationAuditLogs,
+                                             final Long tenantRecordId) {
         super(account,
+              accountRecordId,
               invoice,
               invoiceItem,
+              invoiceItemRecordId,
               bundle,
               plan,
               planPhase,
-              creationAuditLogs);
+              creationAuditLogs,
+              tenantRecordId);
     }
 
     @Override
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemModelDao.java
index e6e1662..121a1f6 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceItemModelDao.java
@@ -29,19 +29,25 @@ import com.ning.billing.util.audit.AuditLog;
 public class BusinessInvoiceItemModelDao extends BusinessInvoiceItemBaseModelDao {
 
     public BusinessInvoiceItemModelDao(final Account account,
+                                       final Long accountRecordId,
                                        final Invoice invoice,
                                        final InvoiceItem invoiceItem,
+                                       final Long invoiceItemRecordId,
                                        @Nullable final SubscriptionBundle bundle,
                                        @Nullable final Plan plan,
                                        @Nullable final PlanPhase planPhase,
-                                       final AuditLog creationAuditLog) {
+                                       final AuditLog creationAuditLog,
+                                       final Long tenantRecordId) {
         super(account,
+              accountRecordId,
               invoice,
               invoiceItem,
+              invoiceItemRecordId,
               bundle,
               plan,
               planPhase,
-              creationAuditLog);
+              creationAuditLog,
+              tenantRecordId);
     }
 
     @Override
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceModelDao.java
index 803a0d2..408394d 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceModelDao.java
@@ -85,9 +85,12 @@ public class BusinessInvoiceModelDao extends BusinessModelDaoBase {
     }
 
     public BusinessInvoiceModelDao(final Account account,
+                                   final Long accountRecordId,
                                    final Invoice invoice,
-                                   final AuditLog creationAuditLog) {
-        this(null /* TODO */,
+                                   final Long invoiceRecordId,
+                                   final AuditLog creationAuditLog,
+                                   final Long tenantRecordId) {
+        this(invoiceRecordId,
              invoice.getId(),
              invoice.getInvoiceNumber(),
              invoice.getInvoiceDate(),
@@ -105,9 +108,8 @@ public class BusinessInvoiceModelDao extends BusinessModelDaoBase {
              account.getId(),
              account.getName(),
              account.getExternalKey(),
-             // TODO
-             null,
-             null);
+             accountRecordId,
+             tenantRecordId);
     }
 
     @Override
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentBaseModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentBaseModelDao.java
index 5937fe2..44ecc85 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentBaseModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentBaseModelDao.java
@@ -58,47 +58,74 @@ public abstract class BusinessInvoicePaymentBaseModelDao extends BusinessModelDa
     private final String currency;
 
     public static BusinessInvoicePaymentBaseModelDao create(final Account account,
+                                                            final Long accountRecordId,
                                                             final Invoice invoice,
                                                             final InvoicePayment invoicePayment,
+                                                            final Long invoicePaymentRecordId,
                                                             final Payment payment,
                                                             final PaymentMethod paymentMethod,
-                                                            final AuditLog creationAuditLog) {
+                                                            final AuditLog creationAuditLog,
+                                                            final Long tenantRecordId) {
         if (invoicePayment.getType().equals(InvoicePaymentType.REFUND)) {
-            return new BusinessInvoicePaymentRefundModelDao(account, invoice, invoicePayment, payment, paymentMethod, creationAuditLog);
+            return new BusinessInvoicePaymentRefundModelDao(account,
+                                                            accountRecordId,
+                                                            invoice,
+                                                            invoicePayment,
+                                                            invoicePaymentRecordId,
+                                                            payment,
+                                                            paymentMethod,
+                                                            creationAuditLog,
+                                                            tenantRecordId);
         } else if (invoicePayment.getType().equals(InvoicePaymentType.CHARGED_BACK)) {
-            return new BusinessInvoicePaymentChargebackModelDao(account, invoice, invoicePayment, payment, paymentMethod, creationAuditLog);
+            return new BusinessInvoicePaymentChargebackModelDao(account,
+                                                                accountRecordId,
+                                                                invoice,
+                                                                invoicePayment,
+                                                                invoicePaymentRecordId,
+                                                                payment,
+                                                                paymentMethod,
+                                                                creationAuditLog,
+                                                                tenantRecordId);
         } else {
-            return new BusinessInvoicePaymentModelDao(account, invoice, invoicePayment, payment, paymentMethod, creationAuditLog);
+            return new BusinessInvoicePaymentModelDao(account,
+                                                      accountRecordId,
+                                                      invoice,
+                                                      invoicePayment,
+                                                      invoicePaymentRecordId,
+                                                      payment,
+                                                      paymentMethod,
+                                                      creationAuditLog,
+                                                      tenantRecordId);
         }
     }
 
-    private BusinessInvoicePaymentBaseModelDao(final Long invoicePaymentRecordId,
-                                               final UUID invoicePaymentId,
-                                               final UUID invoiceId,
-                                               final Integer invoiceNumber,
-                                               final DateTime invoiceCreatedDate,
-                                               final LocalDate invoiceDate,
-                                               final LocalDate invoiceTargetDate,
-                                               final String invoiceCurrency,
-                                               final BigDecimal invoiceBalance,
-                                               final BigDecimal invoiceAmountPaid,
-                                               final BigDecimal invoiceAmountCharged,
-                                               final BigDecimal invoiceOriginalAmountCharged,
-                                               final BigDecimal invoiceAmountCredited,
-                                               final String invoicePaymentType,
-                                               final Long paymentNumber,
-                                               final UUID linkedInvoicePaymentId,
-                                               final BigDecimal amount,
-                                               final String currency,
-                                               final DateTime createdDate,
-                                               final String createdBy,
-                                               final String createdReasonCode,
-                                               final String createdComments,
-                                               final UUID accountId,
-                                               final String accountName,
-                                               final String accountExternalKey,
-                                               final Long accountRecordId,
-                                               final Long tenantRecordId) {
+    public BusinessInvoicePaymentBaseModelDao(final Long invoicePaymentRecordId,
+                                              final UUID invoicePaymentId,
+                                              final UUID invoiceId,
+                                              final Integer invoiceNumber,
+                                              final DateTime invoiceCreatedDate,
+                                              final LocalDate invoiceDate,
+                                              final LocalDate invoiceTargetDate,
+                                              final String invoiceCurrency,
+                                              final BigDecimal invoiceBalance,
+                                              final BigDecimal invoiceAmountPaid,
+                                              final BigDecimal invoiceAmountCharged,
+                                              final BigDecimal invoiceOriginalAmountCharged,
+                                              final BigDecimal invoiceAmountCredited,
+                                              final String invoicePaymentType,
+                                              final Long paymentNumber,
+                                              final UUID linkedInvoicePaymentId,
+                                              final BigDecimal amount,
+                                              final String currency,
+                                              final DateTime createdDate,
+                                              final String createdBy,
+                                              final String createdReasonCode,
+                                              final String createdComments,
+                                              final UUID accountId,
+                                              final String accountName,
+                                              final String accountExternalKey,
+                                              final Long accountRecordId,
+                                              final Long tenantRecordId) {
         super(createdDate,
               createdBy,
               createdReasonCode,
@@ -129,12 +156,15 @@ public abstract class BusinessInvoicePaymentBaseModelDao extends BusinessModelDa
     }
 
     protected BusinessInvoicePaymentBaseModelDao(final Account account,
+                                                 final Long accountRecordId,
                                                  final Invoice invoice,
                                                  final InvoicePayment invoicePayment,
+                                                 final Long invoicePaymentRecordId,
                                                  final Payment payment,
                                                  final PaymentMethod paymentMethod,
-                                                 final AuditLog creationAuditLog) {
-        this(null /* TODO */,
+                                                 final AuditLog creationAuditLog,
+                                                 final Long tenantRecordId) {
+        this(invoicePaymentRecordId,
              invoicePayment.getId(),
              invoice.getId(),
              invoice.getInvoiceNumber(),
@@ -145,7 +175,7 @@ public abstract class BusinessInvoicePaymentBaseModelDao extends BusinessModelDa
              invoice.getBalance(),
              invoice.getPaidAmount(),
              invoice.getChargedAmount(),
-             null /* TODO */,
+             invoice.getOriginalChargedAmount(),
              invoice.getCreditAdjAmount(),
              invoicePayment.getType().toString(),
              null /* TODO */,
@@ -159,9 +189,8 @@ public abstract class BusinessInvoicePaymentBaseModelDao extends BusinessModelDa
              account.getId(),
              account.getName(),
              account.getExternalKey(),
-             // TODO
-             null,
-             null);
+             accountRecordId,
+             tenantRecordId);
     }
 
     public Long getInvoicePaymentRecordId() {
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentChargebackModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentChargebackModelDao.java
index 53f1b59..4d81922 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentChargebackModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentChargebackModelDao.java
@@ -26,17 +26,23 @@ import com.ning.billing.util.audit.AuditLog;
 public class BusinessInvoicePaymentChargebackModelDao extends BusinessInvoicePaymentBaseModelDao {
 
     public BusinessInvoicePaymentChargebackModelDao(final Account account,
+                                                    final Long accountRecordId,
                                                     final Invoice invoice,
                                                     final InvoicePayment invoicePayment,
+                                                    final Long invoicePaymentRecordId,
                                                     final Payment payment,
                                                     final PaymentMethod paymentMethod,
-                                                    final AuditLog creationAuditLog) {
+                                                    final AuditLog creationAuditLog,
+                                                    final Long tenantRecordId) {
         super(account,
+              accountRecordId,
               invoice,
               invoicePayment,
+              invoicePaymentRecordId,
               payment,
               paymentMethod,
-              creationAuditLog);
+              creationAuditLog,
+              tenantRecordId);
     }
 
     @Override
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentFieldModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentFieldModelDao.java
index f178813..c4ae693 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentFieldModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentFieldModelDao.java
@@ -27,9 +27,17 @@ public class BusinessInvoicePaymentFieldModelDao extends BusinessFieldModelDao {
     private final UUID invoicePaymentId;
 
     public BusinessInvoicePaymentFieldModelDao(final Account account,
+                                               final Long accountRecordId,
                                                final CustomField customField,
-                                               final AuditLog creationAuditLog) {
-        super(account, customField, creationAuditLog);
+                                               final Long customFieldRecordId,
+                                               final AuditLog creationAuditLog,
+                                               final Long tenantRecordId) {
+        super(account,
+              accountRecordId,
+              customField,
+              customFieldRecordId,
+              creationAuditLog,
+              tenantRecordId);
         this.invoicePaymentId = customField.getObjectId();
     }
 
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentModelDao.java
index 8a0751f..5c249c2 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentModelDao.java
@@ -26,17 +26,23 @@ import com.ning.billing.util.audit.AuditLog;
 public class BusinessInvoicePaymentModelDao extends BusinessInvoicePaymentBaseModelDao {
 
     public BusinessInvoicePaymentModelDao(final Account account,
+                                          final Long accountRecordId,
                                           final Invoice invoice,
                                           final InvoicePayment invoicePayment,
+                                          final Long invoicePaymentRecordId,
                                           final Payment payment,
                                           final PaymentMethod paymentMethod,
-                                          final AuditLog creationAuditLog) {
+                                          final AuditLog creationAuditLog,
+                                          final Long tenantRecordId) {
         super(account,
+              accountRecordId,
               invoice,
               invoicePayment,
+              invoicePaymentRecordId,
               payment,
               paymentMethod,
-              creationAuditLog);
+              creationAuditLog,
+              tenantRecordId);
     }
 
     @Override
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentRefundModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentRefundModelDao.java
index aea676f..b6a18af 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentRefundModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentRefundModelDao.java
@@ -26,17 +26,23 @@ import com.ning.billing.util.audit.AuditLog;
 public class BusinessInvoicePaymentRefundModelDao extends BusinessInvoicePaymentBaseModelDao {
 
     public BusinessInvoicePaymentRefundModelDao(final Account account,
+                                                final Long accountRecordId,
                                                 final Invoice invoice,
                                                 final InvoicePayment invoicePayment,
+                                                final Long invoicePaymentRecordId,
                                                 final Payment payment,
                                                 final PaymentMethod paymentMethod,
-                                                final AuditLog creationAuditLog) {
+                                                final AuditLog creationAuditLog,
+                                                final Long tenantRecordId) {
         super(account,
+              accountRecordId,
               invoice,
               invoicePayment,
+              invoicePaymentRecordId,
               payment,
               paymentMethod,
-              creationAuditLog);
+              creationAuditLog,
+              tenantRecordId);
     }
 
     @Override
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentTagModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentTagModelDao.java
index a0243e9..eca5ad5 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentTagModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoicePaymentTagModelDao.java
@@ -28,10 +28,19 @@ public class BusinessInvoicePaymentTagModelDao extends BusinessTagModelDao {
     private final UUID invoicePaymentId;
 
     public BusinessInvoicePaymentTagModelDao(final Account account,
+                                             final Long accountRecordId,
                                              final Tag tag,
+                                             final Long tagRecordId,
                                              final TagDefinition tagDefinition,
-                                             final AuditLog creationAuditLog) {
-        super(account, tag, tagDefinition, creationAuditLog);
+                                             final AuditLog creationAuditLog,
+                                             final Long tenantRecordId) {
+        super(account,
+              accountRecordId,
+              tag,
+              tagRecordId,
+              tagDefinition,
+              creationAuditLog,
+              tenantRecordId);
         this.invoicePaymentId = tag.getObjectId();
     }
 
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceTagModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceTagModelDao.java
index df2beaf..a94c5e7 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceTagModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessInvoiceTagModelDao.java
@@ -28,10 +28,19 @@ public class BusinessInvoiceTagModelDao extends BusinessTagModelDao {
     private final UUID invoiceId;
 
     public BusinessInvoiceTagModelDao(final Account account,
+                                      final Long accountRecordId,
                                       final Tag tag,
+                                      final Long tagRecordId,
                                       final TagDefinition tagDefinition,
-                                      final AuditLog creationAuditLog) {
-        super(account, tag, tagDefinition, creationAuditLog);
+                                      final AuditLog creationAuditLog,
+                                      final Long tenantRecordId) {
+        super(account,
+              accountRecordId,
+              tag,
+              tagRecordId,
+              tagDefinition,
+              creationAuditLog,
+              tenantRecordId);
         this.invoiceId = tag.getObjectId();
     }
 
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessOverdueStatusModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessOverdueStatusModelDao.java
index 007a19f..c839f3a 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessOverdueStatusModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessOverdueStatusModelDao.java
@@ -69,11 +69,14 @@ public class BusinessOverdueStatusModelDao extends BusinessModelDaoBase {
     }
 
     public BusinessOverdueStatusModelDao(final Account account,
+                                         final Long accountRecordId,
                                          final SubscriptionBundle subscriptionBundle,
                                          final BlockingState blockingState,
+                                         final Long blockingStateRecordId,
                                          final DateTime endDate,
-                                         final AuditLog creationAuditLog) {
-        this(null /* TODO */,
+                                         final AuditLog creationAuditLog,
+                                         final Long tenantRecordId) {
+        this(blockingStateRecordId,
              subscriptionBundle.getId(),
              subscriptionBundle.getExternalKey(),
              blockingState.getStateName(),
@@ -86,9 +89,8 @@ public class BusinessOverdueStatusModelDao extends BusinessModelDaoBase {
              account.getId(),
              account.getName(),
              account.getExternalKey(),
-             // TODO
-             null,
-             null);
+             accountRecordId,
+             tenantRecordId);
     }
 
     @Override
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscriptionTransitionModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscriptionTransitionModelDao.java
index 469693f..e18a8c5 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscriptionTransitionModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscriptionTransitionModelDao.java
@@ -78,14 +78,17 @@ public class BusinessSubscriptionTransitionModelDao extends BusinessModelDaoBase
     }
 
     public BusinessSubscriptionTransitionModelDao(final Account account,
+                                                  final Long accountRecordId,
                                                   final SubscriptionBundle bundle,
                                                   final SubscriptionTransition transition,
+                                                  final Long subscriptionEventRecordId,
                                                   final DateTime requestedTimestamp,
                                                   final BusinessSubscriptionEvent event,
                                                   final BusinessSubscription previousSubscription,
                                                   final BusinessSubscription nextSubscription,
-                                                  final AuditLog creationAuditLog) {
-        this(null /* TODO */,
+                                                  final AuditLog creationAuditLog,
+                                                  final Long tenantRecordId) {
+        this(subscriptionEventRecordId,
              bundle.getId(),
              bundle.getExternalKey(),
              transition.getSubscriptionId(),
@@ -100,9 +103,8 @@ public class BusinessSubscriptionTransitionModelDao extends BusinessModelDaoBase
              account.getId(),
              account.getName(),
              account.getExternalKey(),
-             // TODO
-             null,
-             null);
+             accountRecordId,
+             tenantRecordId);
     }
 
     @Override
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessTagModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessTagModelDao.java
index f9f9b33..852d6d3 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessTagModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessTagModelDao.java
@@ -38,32 +38,53 @@ public abstract class BusinessTagModelDao extends BusinessModelDaoBase {
     private final String name;
 
     public static BusinessTagModelDao create(final Account account,
+                                             final Long accountRecordId,
                                              final Tag tag,
+                                             final Long tagRecordId,
                                              final TagDefinition tagDefinition,
-                                             final AuditLog creationAuditLog) {
+                                             final AuditLog creationAuditLog,
+                                             final Long tenantRecordId) {
         if (ObjectType.ACCOUNT.equals(tag.getObjectType())) {
-            return new BusinessAccountTagModelDao(account, tag, tagDefinition, creationAuditLog);
+            return new BusinessAccountTagModelDao(account,
+                                                  accountRecordId,
+                                                  tag,
+                                                  tagRecordId,
+                                                  tagDefinition,
+                                                  creationAuditLog,
+                                                  tenantRecordId);
         } else if (ObjectType.INVOICE_PAYMENT.equals(tag.getObjectType())) {
-            return new BusinessInvoicePaymentTagModelDao(account, tag, tagDefinition, creationAuditLog);
+            return new BusinessInvoicePaymentTagModelDao(account,
+                                                         accountRecordId,
+                                                         tag,
+                                                         tagRecordId,
+                                                         tagDefinition,
+                                                         creationAuditLog,
+                                                         tenantRecordId);
         } else if (ObjectType.INVOICE.equals(tag.getObjectType())) {
-            return new BusinessInvoiceTagModelDao(account, tag, tagDefinition, creationAuditLog);
+            return new BusinessInvoiceTagModelDao(account,
+                                                  accountRecordId,
+                                                  tag,
+                                                  tagRecordId,
+                                                  tagDefinition,
+                                                  creationAuditLog,
+                                                  tenantRecordId);
         } else {
             // We don't care
             return null;
         }
     }
 
-    private BusinessTagModelDao(final Long tagRecordId,
-                                final String name,
-                                final DateTime createdDate,
-                                final String createdBy,
-                                final String createdReasonCode,
-                                final String createdComments,
-                                final UUID accountId,
-                                final String accountName,
-                                final String accountExternalKey,
-                                final Long accountRecordId,
-                                final Long tenantRecordId) {
+    public BusinessTagModelDao(final Long tagRecordId,
+                               final String name,
+                               final DateTime createdDate,
+                               final String createdBy,
+                               final String createdReasonCode,
+                               final String createdComments,
+                               final UUID accountId,
+                               final String accountName,
+                               final String accountExternalKey,
+                               final Long accountRecordId,
+                               final Long tenantRecordId) {
         super(createdDate,
               createdBy,
               createdReasonCode,
@@ -77,11 +98,14 @@ public abstract class BusinessTagModelDao extends BusinessModelDaoBase {
         this.name = name;
     }
 
-    protected BusinessTagModelDao(final Account account,
-                                  final Tag tag,
-                                  final TagDefinition tagDefinition,
-                                  final AuditLog creationAuditLog) {
-        this(null /* TODO */,
+    public BusinessTagModelDao(final Account account,
+                               final Long accountRecordId,
+                               final Tag tag,
+                               final Long tagRecordId,
+                               final TagDefinition tagDefinition,
+                               final AuditLog creationAuditLog,
+                               final Long tenantRecordId) {
+        this(tagRecordId,
              tagDefinition.getName(),
              tag.getCreatedDate(),
              creationAuditLog.getUserName(),
@@ -90,9 +114,8 @@ public abstract class BusinessTagModelDao extends BusinessModelDaoBase {
              account.getId(),
              account.getName(),
              account.getExternalKey(),
-             // TODO
-             null,
-             null);
+             accountRecordId,
+             tenantRecordId);
     }
 
     public Long getTagRecordId() {
diff --git a/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/ddl.sql b/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/ddl.sql
index c038055..5fc8c5f 100644
--- a/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/ddl.sql
+++ b/osgi-bundles/bundles/analytics/src/main/resources/com/ning/billing/osgi/bundles/analytics/ddl.sql
@@ -50,6 +50,7 @@ create table bst (
 );
 create index bst_bundle_external_key on bst(bundle_external_key);
 create index bst_account_id on bst(account_id);
+create index bst_account_record_id on bst(account_record_id);
 create index bst_tenant_account_record_id on bst(tenant_record_id, account_record_id);
 
 -- Accounts
@@ -89,8 +90,9 @@ create table bac (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
-create unique index bac_account_external_key on bac(account_external_key);
-create unique index bac_account_id on bac(account_id);
+create index bac_account_external_key on bac(account_external_key);
+create index bac_account_id on bac(account_id);
+create index bac_account_record_id on bac(account_record_id);
 create index bac_tenant_account_record_id on bac(tenant_record_id, account_record_id);
 
 -- Invoices
@@ -119,8 +121,10 @@ create table bin (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
-create unique index bin_invoice_record_id on bin(invoice_record_id);
-create unique index bin_invoice_id on bin(invoice_id);
+create index bin_invoice_record_id on bin(invoice_record_id);
+create index bin_invoice_id on bin(invoice_id);
+create index bin_account_id on bin(account_id);
+create index bin_account_record_id on bin(account_record_id);
 create index bin_tenant_account_record_id on bin(tenant_record_id, account_record_id);
 
 -- Invoice adjustments (type REFUND_ADJ)
@@ -165,8 +169,10 @@ create table bia (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
-create unique index bia_invoice_item_record_id on bia(invoice_item_record_id);
-create unique index bia_item_id on bia(item_id);
+create index bia_invoice_item_record_id on bia(invoice_item_record_id);
+create index bia_item_id on bia(item_id);
+create index bia_account_id on bia(account_id);
+create index bia_account_record_id on bia(account_record_id);
 create index bia_tenant_account_record_id on bia(tenant_record_id, account_record_id);
 
 -- Invoice items (without adjustments, type EXTERNAL_CHARGE, FIXED and RECURRING)
@@ -211,8 +217,10 @@ create table bii (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
-create unique index bii_invoice_item_record_id on bii(invoice_item_record_id);
-create unique index bii_item_id on bii(item_id);
+create index bii_invoice_item_record_id on bii(invoice_item_record_id);
+create index bii_item_id on bii(item_id);
+create index bii_account_id on bii(account_id);
+create index bii_account_record_id on bii(account_record_id);
 create index bii_tenant_account_record_id on bii(tenant_record_id, account_record_id);
 
 -- Invoice items adjustments (type ITEM_ADJ)
@@ -257,11 +265,13 @@ create table biia (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
-create unique index biia_invoice_item_record_id on biia(invoice_item_record_id);
-create unique index biia_item_id on biia(item_id);
+create index biia_invoice_item_record_id on biia(invoice_item_record_id);
+create index biia_item_id on biia(item_id);
+create index biia_account_id on biia(account_id);
+create index biia_account_record_id on biia(account_record_id);
 create index biia_tenant_account_record_id on biia(tenant_record_id, account_record_id);
 
--- Account credits (type CBA_ADJ (< 0 only, for applied credits) and CREDIT_ADJ)
+-- Account credits (type CBA_ADJ and CREDIT_ADJ)
 drop table if exists biic;
 create table biic (
   record_id int(11) unsigned not null auto_increment
@@ -303,8 +313,10 @@ create table biic (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
-create unique index biic_invoice_item_record_id on biic(invoice_item_record_id);
-create unique index biic_item_id on biic(item_id);
+create index biic_invoice_item_record_id on biic(invoice_item_record_id);
+create index biic_item_id on biic(item_id);
+create index biic_account_id on biic(account_id);
+create index biic_account_record_id on biic(account_record_id);
 create index biic_tenant_account_record_id on biic(tenant_record_id, account_record_id);
 
 -- Invoice payments
@@ -340,8 +352,10 @@ create table bip (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
-create unique index bip_invoice_payment_record_id on bip(invoice_payment_record_id);
-create unique index bip_invoice_payment_id on bip(invoice_payment_id);
+create index bip_invoice_payment_record_id on bip(invoice_payment_record_id);
+create index bip_invoice_payment_id on bip(invoice_payment_id);
+create index bip_account_id on bip(account_id);
+create index bip_account_record_id on bip(account_record_id);
 create index bip_tenant_account_record_id on bip(tenant_record_id, account_record_id);
 
 -- Invoice refunds
@@ -361,10 +375,9 @@ create table bipr (
 , invoice_amount_charged numeric(10, 4) default 0
 , invoice_original_amount_charged numeric(10, 4) default 0
 , invoice_amount_credited numeric(10, 4) default 0
-, payment_id char(36) not null
+, invoice_payment_type varchar(50) default null
 , payment_number bigint default null
-, payment_amount numeric(10, 4) default 0
-, payment_currency char(50) default null
+, linked_invoice_payment_id char(36) default null
 , amount numeric(10, 4) default 0
 , currency char(50) default null
 , created_date datetime not null
@@ -378,8 +391,10 @@ create table bipr (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
-create unique index bipr_invoice_payment_record_id on bipr(invoice_payment_record_id);
-create unique index bipr_invoice_payment_id on bipr(invoice_payment_id);
+create index bipr_invoice_payment_record_id on bipr(invoice_payment_record_id);
+create index bipr_invoice_payment_id on bipr(invoice_payment_id);
+create index bipr_account_id on bipr(account_id);
+create index bipr_account_record_id on bipr(account_record_id);
 create index bipr_tenant_account_record_id on bipr(tenant_record_id, account_record_id);
 
 -- Invoice payment chargebacks
@@ -399,10 +414,9 @@ create table bipc (
 , invoice_amount_charged numeric(10, 4) default 0
 , invoice_original_amount_charged numeric(10, 4) default 0
 , invoice_amount_credited numeric(10, 4) default 0
-, payment_id char(36) not null
+, invoice_payment_type varchar(50) default null
 , payment_number bigint default null
-, payment_amount numeric(10, 4) default 0
-, payment_currency char(50) default null
+, linked_invoice_payment_id char(36) default null
 , amount numeric(10, 4) default 0
 , currency char(50) default null
 , created_date datetime not null
@@ -416,8 +430,10 @@ create table bipc (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
-create unique index bipc_invoice_payment_record_id on bipc(invoice_payment_record_id);
-create unique index bipc_invoice_payment_id on bipc(invoice_payment_id);
+create index bipc_invoice_payment_record_id on bipc(invoice_payment_record_id);
+create index bipc_invoice_payment_id on bipc(invoice_payment_id);
+create index bipc_account_id on bipc(account_id);
+create index bipc_account_record_id on bipc(account_record_id);
 create index bipc_tenant_account_record_id on bipc(tenant_record_id, account_record_id);
 
 drop table if exists bos;
@@ -440,6 +456,8 @@ create table bos (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
+create index bos_account_id on bos(account_id);
+create index bos_account_record_id on bos(account_record_id);
 create index bos_tenant_account_record_id on bos(tenant_record_id, account_record_id);
 
 drop table if exists bac_tags;
@@ -458,6 +476,8 @@ create table bac_tags (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
+create index bac_tags_account_id on bac_tags(account_id);
+create index bac_tags_account_record_id on bac_tags(account_record_id);
 create index bac_tags_tenant_account_record_id on bac_tags(tenant_record_id, account_record_id);
 
 drop table if exists bin_tags;
@@ -477,6 +497,8 @@ create table bin_tags (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
+create index bin_tags_account_id on bin_tags(account_id);
+create index bin_tags_account_record_id on bin_tags(account_record_id);
 create index bin_tags_tenant_account_record_id on bin_tags(tenant_record_id, account_record_id);
 
 drop table if exists bip_tags;
@@ -496,6 +518,8 @@ create table bip_tags (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
+create index bip_tags_account_id on bip_tags(account_id);
+create index bip_tags_account_record_id on bip_tags(account_record_id);
 create index bip_tags_tenant_account_record_id on bip_tags(tenant_record_id, account_record_id);
 
 drop table if exists bac_fields;
@@ -515,6 +539,8 @@ create table bac_fields (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
+create index bac_fields_account_id on bac_fields(account_id);
+create index bac_fields_account_record_id on bac_fields(account_record_id);
 create index bac_fields_tenant_account_record_id on bac_fields(tenant_record_id, account_record_id);
 
 drop table if exists bin_fields;
@@ -535,6 +561,8 @@ create table bin_fields (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
+create index bin_fields_account_id on bin_fields(account_id);
+create index bin_fields_account_record_id on bin_fields(account_record_id);
 create index bin_fields_tenant_account_record_id on bin_fields(tenant_record_id, account_record_id);
 
 drop table if exists bip_fields;
@@ -555,4 +583,6 @@ create table bip_fields (
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
 );
+create index bip_fields_account_id on bip_fields(account_id);
+create index bip_fields_account_record_id on bip_fields(account_record_id);
 create index bip_fields_tenant_account_record_id on bip_fields(tenant_record_id, account_record_id);
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/AnalyticsTestSuiteNoDB.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/AnalyticsTestSuiteNoDB.java
index 1343051..b4ae0e5 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/AnalyticsTestSuiteNoDB.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/AnalyticsTestSuiteNoDB.java
@@ -68,6 +68,16 @@ import com.google.common.collect.ImmutableList;
 
 public abstract class AnalyticsTestSuiteNoDB {
 
+    protected final Long accountRecordId = 1L;
+    protected final Long subscriptionEventRecordId = 2L;
+    protected final Long invoiceRecordId = 3L;
+    protected final Long invoiceItemRecordId = 4L;
+    protected final Long invoicePaymentRecordId = 5L;
+    protected final Long blockingStateRecordId = 6L;
+    protected final Long fieldRecordId = 7L;
+    protected final Long tagRecordId = 8L;
+    protected final Long tenantRecordId = 9L;
+
     protected Account account;
     protected SubscriptionBundle bundle;
     protected Plan plan;
@@ -100,8 +110,9 @@ public abstract class AnalyticsTestSuiteNoDB {
         Assert.assertEquals(businessEntityBase.getAccountExternalKey(), account.getExternalKey());
     }
 
-    protected void verifyBusinessModelDaoBase(final BusinessModelDaoBase businessModelDaoBase) {
-        //Assert.assertEquals(businessModelDaoBase.getRecordId(), /* TODO */);
+    protected void verifyBusinessModelDaoBase(final BusinessModelDaoBase businessModelDaoBase,
+                                              final Long accountRecordId,
+                                              final Long tenantRecordId) {
         Assert.assertEquals(businessModelDaoBase.getCreatedDate(), account.getCreatedDate());
         Assert.assertEquals(businessModelDaoBase.getCreatedBy(), auditLog.getUserName());
         Assert.assertEquals(businessModelDaoBase.getCreatedReasonCode(), auditLog.getReasonCode());
@@ -109,8 +120,8 @@ public abstract class AnalyticsTestSuiteNoDB {
         Assert.assertEquals(businessModelDaoBase.getAccountId(), account.getId());
         Assert.assertEquals(businessModelDaoBase.getAccountName(), account.getName());
         Assert.assertEquals(businessModelDaoBase.getAccountExternalKey(), account.getExternalKey());
-        //Assert.assertEquals(businessModelDaoBase.getAccountRecordId(), /* TODO */);
-        //Assert.assertEquals(businessModelDaoBase.getTenantRecordId(), /* TODO */);
+        Assert.assertEquals(businessModelDaoBase.getAccountRecordId(), accountRecordId);
+        Assert.assertEquals(businessModelDaoBase.getTenantRecordId(), tenantRecordId);
     }
 
     @BeforeMethod(groups = "fast")
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessAccount.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessAccount.java
index c24a6a2..97dd7d9 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessAccount.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessAccount.java
@@ -29,10 +29,12 @@ public class TestBusinessAccount extends AnalyticsTestSuiteNoDB {
     @Test(groups = "fast")
     public void testConstructor() throws Exception {
         final BusinessAccountModelDao accountModelDao = new BusinessAccountModelDao(account,
+                                                                                    accountRecordId,
                                                                                     BigDecimal.ONE,
                                                                                     invoice,
                                                                                     payment,
-                                                                                    auditLog);
+                                                                                    auditLog,
+                                                                                    tenantRecordId);
         final BusinessAccount businessAccount = new BusinessAccount(accountModelDao);
 
         verifyBusinessEntityBase(businessAccount);
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessField.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessField.java
index d768ef7..afdd492 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessField.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessField.java
@@ -29,7 +29,12 @@ public class TestBusinessField extends AnalyticsTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testConstructorAccount() throws Exception {
-        final BusinessAccountFieldModelDao businessAccountFieldModelDao = new BusinessAccountFieldModelDao(account, customField, auditLog);
+        final BusinessAccountFieldModelDao businessAccountFieldModelDao = new BusinessAccountFieldModelDao(account,
+                                                                                                           accountRecordId,
+                                                                                                           customField,
+                                                                                                           fieldRecordId,
+                                                                                                           auditLog,
+                                                                                                           tenantRecordId);
         final BusinessField businessField = BusinessField.create(businessAccountFieldModelDao);
         verifyBusinessField(businessField);
         Assert.assertEquals(businessField.getObjectType(), ObjectType.ACCOUNT);
@@ -37,7 +42,12 @@ public class TestBusinessField extends AnalyticsTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testConstructorInvoice() throws Exception {
-        final BusinessInvoiceFieldModelDao businessInvoiceFieldModelDao = new BusinessInvoiceFieldModelDao(account, customField, auditLog);
+        final BusinessInvoiceFieldModelDao businessInvoiceFieldModelDao = new BusinessInvoiceFieldModelDao(account,
+                                                                                                           accountRecordId,
+                                                                                                           customField,
+                                                                                                           fieldRecordId,
+                                                                                                           auditLog,
+                                                                                                           tenantRecordId);
         final BusinessField businessField = BusinessField.create(businessInvoiceFieldModelDao);
         verifyBusinessField(businessField);
         Assert.assertEquals(businessField.getObjectType(), ObjectType.INVOICE);
@@ -45,7 +55,12 @@ public class TestBusinessField extends AnalyticsTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testConstructorPayment() throws Exception {
-        final BusinessInvoicePaymentFieldModelDao invoicePaymentFieldModelDao = new BusinessInvoicePaymentFieldModelDao(account, customField, auditLog);
+        final BusinessInvoicePaymentFieldModelDao invoicePaymentFieldModelDao = new BusinessInvoicePaymentFieldModelDao(account,
+                                                                                                                        accountRecordId,
+                                                                                                                        customField,
+                                                                                                                        fieldRecordId,
+                                                                                                                        auditLog,
+                                                                                                                        tenantRecordId);
         final BusinessField businessField = BusinessField.create(invoicePaymentFieldModelDao);
         verifyBusinessField(businessField);
         Assert.assertEquals(businessField.getObjectType(), ObjectType.INVOICE_PAYMENT);
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoice.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoice.java
index 23048e7..95c2014 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoice.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoice.java
@@ -29,14 +29,22 @@ public class TestBusinessInvoice extends AnalyticsTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testConstructor() throws Exception {
-        final BusinessInvoiceModelDao invoiceModelDao = new BusinessInvoiceModelDao(account, invoice, auditLog);
+        final BusinessInvoiceModelDao invoiceModelDao = new BusinessInvoiceModelDao(account,
+                                                                                    accountRecordId,
+                                                                                    invoice,
+                                                                                    invoiceRecordId,
+                                                                                    auditLog,
+                                                                                    tenantRecordId);
         final BusinessInvoiceItemBaseModelDao invoiceItemBaseModelDao = BusinessInvoiceItemBaseModelDao.create(account,
+                                                                                                               accountRecordId,
                                                                                                                invoice,
                                                                                                                invoiceItem,
+                                                                                                               invoiceItemRecordId,
                                                                                                                bundle,
                                                                                                                plan,
                                                                                                                phase,
-                                                                                                               auditLog);
+                                                                                                               auditLog,
+                                                                                                               tenantRecordId);
         final BusinessInvoice businessInvoice = new BusinessInvoice(invoiceModelDao,
                                                                     ImmutableList.<BusinessInvoiceItemBaseModelDao>of(invoiceItemBaseModelDao));
         verifyBusinessEntityBase(businessInvoice);
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoiceItem.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoiceItem.java
index b60af52..9a381e3 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoiceItem.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoiceItem.java
@@ -27,12 +27,15 @@ public class TestBusinessInvoiceItem extends AnalyticsTestSuiteNoDB {
     @Test(groups = "fast")
     public void testConstructor() throws Exception {
         final BusinessInvoiceItemBaseModelDao invoiceItemBaseModelDao = BusinessInvoiceItemBaseModelDao.create(account,
+                                                                                                               accountRecordId,
                                                                                                                invoice,
                                                                                                                invoiceItem,
+                                                                                                               invoiceItemRecordId,
                                                                                                                bundle,
                                                                                                                plan,
                                                                                                                phase,
-                                                                                                               auditLog);
+                                                                                                               auditLog,
+                                                                                                               tenantRecordId);
         final BusinessInvoiceItem businessInvoiceItem = new BusinessInvoiceItem(invoiceItemBaseModelDao);
         verifyBusinessEntityBase(businessInvoiceItem);
         Assert.assertEquals(businessInvoiceItem.getItemId(), invoiceItemBaseModelDao.getItemId());
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoicePayment.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoicePayment.java
index 7521def..c4c326d 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoicePayment.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessInvoicePayment.java
@@ -28,11 +28,14 @@ public class TestBusinessInvoicePayment extends AnalyticsTestSuiteNoDB {
     @Test(groups = "fast")
     public void testConstructor() throws Exception {
         final BusinessInvoicePaymentBaseModelDao invoicePaymentBaseModelDao = BusinessInvoicePaymentModelDao.create(account,
+                                                                                                                    accountRecordId,
                                                                                                                     invoice,
                                                                                                                     invoicePayment,
+                                                                                                                    invoicePaymentRecordId,
                                                                                                                     payment,
                                                                                                                     paymentMethod,
-                                                                                                                    auditLog);
+                                                                                                                    auditLog,
+                                                                                                                    tenantRecordId);
         final BusinessInvoicePayment businessInvoicePayment = new BusinessInvoicePayment(invoicePaymentBaseModelDao);
         verifyBusinessEntityBase(businessInvoicePayment);
         Assert.assertEquals(businessInvoicePayment.getInvoicePaymentId(), invoicePaymentBaseModelDao.getInvoicePaymentId());
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessOverdueStatus.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessOverdueStatus.java
index 651dea3..12bf3e3 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessOverdueStatus.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessOverdueStatus.java
@@ -31,10 +31,13 @@ public class TestBusinessOverdueStatus extends AnalyticsTestSuiteNoDB {
     public void testConstructor() throws Exception {
         final DateTime endDate = new DateTime(2005, 6, 5, 4, 5, 6, DateTimeZone.UTC);
         final BusinessOverdueStatusModelDao businessOverdueStatusModelDao = new BusinessOverdueStatusModelDao(account,
+                                                                                                              accountRecordId,
                                                                                                               bundle,
                                                                                                               blockingState,
+                                                                                                              blockingStateRecordId,
                                                                                                               endDate,
-                                                                                                              auditLog);
+                                                                                                              auditLog,
+                                                                                                              tenantRecordId);
         final BusinessOverdueStatus businessOverdueStatus = new BusinessOverdueStatus(businessOverdueStatusModelDao);
         verifyBusinessEntityBase(businessOverdueStatus);
         Assert.assertEquals(businessOverdueStatus.getObjectType(), ObjectType.BUNDLE.toString());
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessSnapshot.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessSnapshot.java
index acc538b..7952254 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessSnapshot.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessSnapshot.java
@@ -46,44 +46,65 @@ public class TestBusinessSnapshot extends AnalyticsTestSuiteNoDB {
     public void testConstructor() throws Exception {
         // Account
         final BusinessAccountModelDao accountModelDao = new BusinessAccountModelDao(account,
+                                                                                    accountRecordId,
                                                                                     BigDecimal.ONE,
                                                                                     invoice,
                                                                                     payment,
-                                                                                    auditLog);
+                                                                                    auditLog,
+                                                                                    tenantRecordId);
         final BusinessAccount businessAccount = new BusinessAccount(accountModelDao);
 
         // Field
-        final BusinessAccountFieldModelDao businessAccountFieldModelDao = new BusinessAccountFieldModelDao(account, customField, auditLog);
+        final BusinessAccountFieldModelDao businessAccountFieldModelDao = new BusinessAccountFieldModelDao(account,
+                                                                                                           accountRecordId,
+                                                                                                           customField,
+                                                                                                           fieldRecordId,
+                                                                                                           auditLog,
+                                                                                                           tenantRecordId);
         final BusinessField businessField = BusinessField.create(businessAccountFieldModelDao);
 
         // Invoice
-        final BusinessInvoiceModelDao invoiceModelDao = new BusinessInvoiceModelDao(account, invoice, auditLog);
+        final BusinessInvoiceModelDao invoiceModelDao = new BusinessInvoiceModelDao(account,
+                                                                                    accountRecordId,
+                                                                                    invoice,
+                                                                                    invoiceRecordId,
+                                                                                    auditLog,
+                                                                                    tenantRecordId);
         final BusinessInvoiceItemBaseModelDao invoiceItemBaseModelDao = BusinessInvoiceItemBaseModelDao.create(account,
+                                                                                                               accountRecordId,
                                                                                                                invoice,
                                                                                                                invoiceItem,
+                                                                                                               invoiceItemRecordId,
                                                                                                                bundle,
                                                                                                                plan,
                                                                                                                phase,
-                                                                                                               auditLog);
+                                                                                                               auditLog,
+                                                                                                               tenantRecordId);
         final BusinessInvoice businessInvoice = new BusinessInvoice(invoiceModelDao,
                                                                     ImmutableList.<BusinessInvoiceItemBaseModelDao>of(invoiceItemBaseModelDao));
 
         // Invoice payment
         final BusinessInvoicePaymentBaseModelDao invoicePaymentBaseModelDao = BusinessInvoicePaymentModelDao.create(account,
+                                                                                                                    accountRecordId,
                                                                                                                     invoice,
                                                                                                                     invoicePayment,
+                                                                                                                    invoicePaymentRecordId,
                                                                                                                     payment,
                                                                                                                     paymentMethod,
-                                                                                                                    auditLog);
+                                                                                                                    auditLog,
+                                                                                                                    tenantRecordId);
         final BusinessInvoicePayment businessInvoicePayment = new BusinessInvoicePayment(invoicePaymentBaseModelDao);
 
         // Overdue
         final DateTime endDate = new DateTime(2005, 6, 5, 4, 5, 6, DateTimeZone.UTC);
         final BusinessOverdueStatusModelDao businessOverdueStatusModelDao = new BusinessOverdueStatusModelDao(account,
+                                                                                                              accountRecordId,
                                                                                                               bundle,
                                                                                                               blockingState,
+                                                                                                              blockingStateRecordId,
                                                                                                               endDate,
-                                                                                                              auditLog);
+                                                                                                              auditLog,
+                                                                                                              tenantRecordId);
         final BusinessOverdueStatus businessOverdueStatus = new BusinessOverdueStatus(businessOverdueStatusModelDao);
 
         // Subscriptions
@@ -94,20 +115,26 @@ public class TestBusinessSnapshot extends AnalyticsTestSuiteNoDB {
         final BusinessSubscription previousSubscription = null;
         final BusinessSubscription nextSubscription = new BusinessSubscription(null, null, null, Currency.GBP, startDate, SubscriptionState.ACTIVE);
         final BusinessSubscriptionTransitionModelDao subscriptionTransitionModelDao = new BusinessSubscriptionTransitionModelDao(account,
+                                                                                                                                 accountRecordId,
                                                                                                                                  bundle,
                                                                                                                                  subscriptionTransition,
+                                                                                                                                 subscriptionEventRecordId,
                                                                                                                                  requestedTimestamp,
                                                                                                                                  event,
                                                                                                                                  previousSubscription,
                                                                                                                                  nextSubscription,
-                                                                                                                                 auditLog);
+                                                                                                                                 auditLog,
+                                                                                                                                 tenantRecordId);
         final BusinessSubscriptionTransition businessSubscriptionTransition = new BusinessSubscriptionTransition(subscriptionTransitionModelDao);
 
         // Tag
         final BusinessAccountTagModelDao businessAccountTagModelDao = new BusinessAccountTagModelDao(account,
+                                                                                                     accountRecordId,
                                                                                                      tag,
+                                                                                                     tagRecordId,
                                                                                                      tagDefinition,
-                                                                                                     auditLog);
+                                                                                                     auditLog,
+                                                                                                     tenantRecordId);
         final BusinessTag businessTag = BusinessTag.create(businessAccountTagModelDao);
 
         // Create the snapshot
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessSubscriptionTransition.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessSubscriptionTransition.java
index 2edd44f..9c1d3b5 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessSubscriptionTransition.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessSubscriptionTransition.java
@@ -39,13 +39,16 @@ public class TestBusinessSubscriptionTransition extends AnalyticsTestSuiteNoDB {
         final BusinessSubscription previousSubscription = null;
         final BusinessSubscription nextSubscription = new BusinessSubscription(null, null, null, Currency.GBP, startDate, SubscriptionState.ACTIVE);
         final BusinessSubscriptionTransitionModelDao subscriptionTransitionModelDao = new BusinessSubscriptionTransitionModelDao(account,
+                                                                                                                                 accountRecordId,
                                                                                                                                  bundle,
                                                                                                                                  subscriptionTransition,
+                                                                                                                                 subscriptionEventRecordId,
                                                                                                                                  requestedTimestamp,
                                                                                                                                  event,
                                                                                                                                  previousSubscription,
                                                                                                                                  nextSubscription,
-                                                                                                                                 auditLog);
+                                                                                                                                 auditLog,
+                                                                                                                                 tenantRecordId);
         final BusinessSubscriptionTransition businessSubscriptionTransition = new BusinessSubscriptionTransition(subscriptionTransitionModelDao);
 
         verifyBusinessEntityBase(businessSubscriptionTransition);
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessTag.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessTag.java
index e1e50e1..90d0edc 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessTag.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/TestBusinessTag.java
@@ -30,9 +30,12 @@ public class TestBusinessTag extends AnalyticsTestSuiteNoDB {
     @Test(groups = "fast")
     public void testConstructorAccount() throws Exception {
         final BusinessAccountTagModelDao businessAccountTagModelDao = new BusinessAccountTagModelDao(account,
+                                                                                                     accountRecordId,
                                                                                                      tag,
+                                                                                                     tagRecordId,
                                                                                                      tagDefinition,
-                                                                                                     auditLog);
+                                                                                                     auditLog,
+                                                                                                     tenantRecordId);
         final BusinessTag businessTag = BusinessTag.create(businessAccountTagModelDao);
         verifyBusinessTag(businessTag);
         Assert.assertEquals(businessTag.getObjectType(), ObjectType.ACCOUNT);
@@ -41,9 +44,12 @@ public class TestBusinessTag extends AnalyticsTestSuiteNoDB {
     @Test(groups = "fast")
     public void testConstructorInvoice() throws Exception {
         final BusinessInvoiceTagModelDao businessInvoiceTagModelDao = new BusinessInvoiceTagModelDao(account,
+                                                                                                     accountRecordId,
                                                                                                      tag,
+                                                                                                     tagRecordId,
                                                                                                      tagDefinition,
-                                                                                                     auditLog);
+                                                                                                     auditLog,
+                                                                                                     tenantRecordId);
         final BusinessTag businessTag = BusinessTag.create(businessInvoiceTagModelDao);
         verifyBusinessTag(businessTag);
         Assert.assertEquals(businessTag.getObjectType(), ObjectType.INVOICE);
@@ -52,9 +58,12 @@ public class TestBusinessTag extends AnalyticsTestSuiteNoDB {
     @Test(groups = "fast")
     public void testConstructorPayment() throws Exception {
         final BusinessInvoicePaymentTagModelDao invoicePaymentTagModelDao = new BusinessInvoicePaymentTagModelDao(account,
+                                                                                                                  accountRecordId,
                                                                                                                   tag,
+                                                                                                                  tagRecordId,
                                                                                                                   tagDefinition,
-                                                                                                                  auditLog);
+                                                                                                                  auditLog,
+                                                                                                                  tenantRecordId);
         final BusinessTag businessTag = BusinessTag.create(invoicePaymentTagModelDao);
         verifyBusinessTag(businessTag);
         Assert.assertEquals(businessTag.getObjectType(), ObjectType.INVOICE_PAYMENT);
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/user/TestDefaultAnalyticsUserApi.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/user/TestDefaultAnalyticsUserApi.java
index d708ca0..0fdafdd 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/user/TestDefaultAnalyticsUserApi.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/api/user/TestDefaultAnalyticsUserApi.java
@@ -31,10 +31,12 @@ public class TestDefaultAnalyticsUserApi extends AnalyticsTestSuiteWithEmbeddedD
     @Test(groups = "slow")
     public void testAccountSnapshot() throws Exception {
         final BusinessAccountModelDao accountModelDao = new BusinessAccountModelDao(account,
+                                                                                    accountRecordId,
                                                                                     BigDecimal.ONE,
                                                                                     invoice,
                                                                                     payment,
-                                                                                    auditLog);
+                                                                                    auditLog,
+                                                                                    tenantRecordId);
         analyticsSqlDao.create(accountModelDao.getTableName(), accountModelDao, callContext);
 
         final AnalyticsUserApi analyticsUserApi = new AnalyticsUserApi(logService, killbillAPI, killbillDataSource);
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountFieldModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountFieldModelDao.java
index 348c81f..5b9bb9b 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountFieldModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountFieldModelDao.java
@@ -25,9 +25,14 @@ public class TestBusinessAccountFieldModelDao extends AnalyticsTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testConstructor() throws Exception {
-        final BusinessAccountFieldModelDao accountFieldModelDao = new BusinessAccountFieldModelDao(account, customField, auditLog);
-        verifyBusinessModelDaoBase(accountFieldModelDao);
-        //Assert.assertEquals(accountFieldModelDao.getCustomFieldRecordId(), /* TODO */);
+        final BusinessAccountFieldModelDao accountFieldModelDao = new BusinessAccountFieldModelDao(account,
+                                                                                                   accountRecordId,
+                                                                                                   customField,
+                                                                                                   fieldRecordId,
+                                                                                                   auditLog,
+                                                                                                   tenantRecordId);
+        verifyBusinessModelDaoBase(accountFieldModelDao, accountRecordId, tenantRecordId);
+        Assert.assertEquals(accountFieldModelDao.getCustomFieldRecordId(), fieldRecordId);
         Assert.assertEquals(accountFieldModelDao.getName(), customField.getFieldName());
         Assert.assertEquals(accountFieldModelDao.getValue(), customField.getFieldValue());
     }
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountModelDao.java
index 8353e81..5cb258e 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountModelDao.java
@@ -27,7 +27,13 @@ public class TestBusinessAccountModelDao extends AnalyticsTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testConstructorWithNulls() throws Exception {
-        final BusinessAccountModelDao accountModelDao = new BusinessAccountModelDao(account, BigDecimal.ONE, null, null, auditLog);
+        final BusinessAccountModelDao accountModelDao = new BusinessAccountModelDao(account,
+                                                                                    accountRecordId,
+                                                                                    BigDecimal.ONE,
+                                                                                    null,
+                                                                                    null,
+                                                                                    auditLog,
+                                                                                    tenantRecordId);
         verifyAccountFields(accountModelDao);
         Assert.assertEquals(accountModelDao.getBalance(), BigDecimal.ONE);
         Assert.assertNull(accountModelDao.getLastInvoiceDate());
@@ -37,7 +43,13 @@ public class TestBusinessAccountModelDao extends AnalyticsTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testConstructorWithoutNulls() throws Exception {
-        final BusinessAccountModelDao accountModelDao = new BusinessAccountModelDao(account, BigDecimal.ONE, invoice, payment, auditLog);
+        final BusinessAccountModelDao accountModelDao = new BusinessAccountModelDao(account,
+                                                                                    accountRecordId,
+                                                                                    BigDecimal.ONE,
+                                                                                    invoice,
+                                                                                    payment,
+                                                                                    auditLog,
+                                                                                    tenantRecordId);
         verifyAccountFields(accountModelDao);
         Assert.assertEquals(accountModelDao.getBalance(), BigDecimal.ONE);
         Assert.assertEquals(accountModelDao.getLastInvoiceDate(), invoice.getInvoiceDate());
@@ -46,7 +58,7 @@ public class TestBusinessAccountModelDao extends AnalyticsTestSuiteNoDB {
     }
 
     private void verifyAccountFields(final BusinessAccountModelDao accountModelDao) {
-        verifyBusinessModelDaoBase(accountModelDao);
+        verifyBusinessModelDaoBase(accountModelDao, accountRecordId, tenantRecordId);
         Assert.assertEquals(accountModelDao.getEmail(), account.getEmail());
         Assert.assertEquals(accountModelDao.getFirstNameLength(), account.getFirstNameLength());
         Assert.assertEquals(accountModelDao.getCurrency(), account.getCurrency().toString());
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountTagModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountTagModelDao.java
index cdc1bbc..750c00a 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountTagModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessAccountTagModelDao.java
@@ -25,9 +25,15 @@ public class TestBusinessAccountTagModelDao extends AnalyticsTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testConstructor() throws Exception {
-        final BusinessAccountTagModelDao tagModelDao = new BusinessAccountTagModelDao(account, tag, tagDefinition, auditLog);
-        verifyBusinessModelDaoBase(tagModelDao);
-        //Assert.assertEquals(tagModelDao.getTagRecordId(), /* TODO */);
+        final BusinessAccountTagModelDao tagModelDao = new BusinessAccountTagModelDao(account,
+                                                                                      accountRecordId,
+                                                                                      tag,
+                                                                                      tagRecordId,
+                                                                                      tagDefinition,
+                                                                                      auditLog,
+                                                                                      tenantRecordId);
+        verifyBusinessModelDaoBase(tagModelDao, accountRecordId, tenantRecordId);
+        Assert.assertEquals(tagModelDao.getTagRecordId(), tagRecordId);
         Assert.assertEquals(tagModelDao.getName(), tagDefinition.getName());
     }
 }
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceFieldModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceFieldModelDao.java
index c42b4a2..4bc36ff 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceFieldModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceFieldModelDao.java
@@ -26,10 +26,13 @@ public class TestBusinessInvoiceFieldModelDao extends AnalyticsTestSuiteNoDB {
     @Test(groups = "fast")
     public void testConstructor() throws Exception {
         final BusinessInvoiceFieldModelDao invoiceFieldModelDao = new BusinessInvoiceFieldModelDao(account,
+                                                                                                   accountRecordId,
                                                                                                    customField,
-                                                                                                   auditLog);
-        verifyBusinessModelDaoBase(invoiceFieldModelDao);
-        //Assert.assertEquals(invoiceFieldModelDao.getCustomFieldRecordId(), /* TODO */);
+                                                                                                   fieldRecordId,
+                                                                                                   auditLog,
+                                                                                                   tenantRecordId);
+        verifyBusinessModelDaoBase(invoiceFieldModelDao, accountRecordId, tenantRecordId);
+        Assert.assertEquals(invoiceFieldModelDao.getCustomFieldRecordId(), fieldRecordId);
         Assert.assertEquals(invoiceFieldModelDao.getInvoiceId(), customField.getObjectId());
         Assert.assertEquals(invoiceFieldModelDao.getName(), customField.getFieldName());
         Assert.assertEquals(invoiceFieldModelDao.getValue(), customField.getFieldValue());
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceItemModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceItemModelDao.java
index 3957591..fc802ad 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceItemModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceItemModelDao.java
@@ -26,12 +26,15 @@ public class TestBusinessInvoiceItemModelDao extends AnalyticsTestSuiteNoDB {
     @Test(groups = "fast")
     public void testConstructorWithNulls() throws Exception {
         final BusinessInvoiceItemModelDao invoiceItemModelDao = new BusinessInvoiceItemModelDao(account,
+                                                                                                accountRecordId,
                                                                                                 invoice,
                                                                                                 invoiceItem,
+                                                                                                invoiceItemRecordId,
                                                                                                 null,
                                                                                                 null,
                                                                                                 null,
-                                                                                                auditLog);
+                                                                                                auditLog,
+                                                                                                tenantRecordId);
         verifyInvoiceItemFields(invoiceItemModelDao);
         Assert.assertNull(invoiceItemModelDao.getBundleExternalKey());
         Assert.assertNull(invoiceItemModelDao.getProductName());
@@ -46,12 +49,15 @@ public class TestBusinessInvoiceItemModelDao extends AnalyticsTestSuiteNoDB {
     @Test(groups = "fast")
     public void testConstructorWithoutNulls() throws Exception {
         final BusinessInvoiceItemModelDao invoiceItemModelDao = new BusinessInvoiceItemModelDao(account,
+                                                                                                accountRecordId,
                                                                                                 invoice,
                                                                                                 invoiceItem,
+                                                                                                invoiceItemRecordId,
                                                                                                 bundle,
                                                                                                 plan,
                                                                                                 phase,
-                                                                                                auditLog);
+                                                                                                auditLog,
+                                                                                                tenantRecordId);
         verifyInvoiceItemFields(invoiceItemModelDao);
         Assert.assertEquals(invoiceItemModelDao.getBundleExternalKey(), bundle.getExternalKey());
         Assert.assertEquals(invoiceItemModelDao.getProductName(), plan.getProduct().getName());
@@ -64,8 +70,8 @@ public class TestBusinessInvoiceItemModelDao extends AnalyticsTestSuiteNoDB {
     }
 
     private void verifyInvoiceItemFields(final BusinessInvoiceItemModelDao invoiceItemModelDao) {
-        verifyBusinessModelDaoBase(invoiceItemModelDao);
-        //Assert.assertEquals(invoiceItemModelDao.getInvoiceItemRecordId(), /* TODO */);
+        verifyBusinessModelDaoBase(invoiceItemModelDao, accountRecordId, tenantRecordId);
+        Assert.assertEquals(invoiceItemModelDao.getInvoiceItemRecordId(), invoiceItemRecordId);
         Assert.assertEquals(invoiceItemModelDao.getItemId(), invoiceItem.getId());
         Assert.assertEquals(invoiceItemModelDao.getInvoiceId(), invoice.getId());
         Assert.assertEquals(invoiceItemModelDao.getInvoiceNumber(), invoice.getInvoiceNumber());
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceModelDao.java
index a349d1d..ad1e378 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceModelDao.java
@@ -25,9 +25,14 @@ public class TestBusinessInvoiceModelDao extends AnalyticsTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testConstructor() throws Exception {
-        final BusinessInvoiceModelDao invoiceModelDao = new BusinessInvoiceModelDao(account, invoice, auditLog);
-        verifyBusinessModelDaoBase(invoiceModelDao);
-        //Assert.assertEquals(invoiceModelDao.getInvoiceRecordId(), /* TODO */);
+        final BusinessInvoiceModelDao invoiceModelDao = new BusinessInvoiceModelDao(account,
+                                                                                    accountRecordId,
+                                                                                    invoice,
+                                                                                    invoiceRecordId,
+                                                                                    auditLog,
+                                                                                    tenantRecordId);
+        verifyBusinessModelDaoBase(invoiceModelDao, accountRecordId, tenantRecordId);
+        Assert.assertEquals(invoiceModelDao.getInvoiceRecordId(), invoiceItemRecordId);
         Assert.assertEquals(invoiceModelDao.getInvoiceId(), invoice.getId());
         Assert.assertEquals(invoiceModelDao.getInvoiceNumber(), invoice.getInvoiceNumber());
         Assert.assertEquals(invoiceModelDao.getInvoiceDate(), invoice.getInvoiceDate());
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentFieldModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentFieldModelDao.java
index 1455c3e..9d46391 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentFieldModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentFieldModelDao.java
@@ -26,10 +26,13 @@ public class TestBusinessInvoicePaymentFieldModelDao extends AnalyticsTestSuiteN
     @Test(groups = "fast")
     public void testConstructor() throws Exception {
         final BusinessInvoicePaymentFieldModelDao invoicePaymentFieldModelDao = new BusinessInvoicePaymentFieldModelDao(account,
+                                                                                                                        accountRecordId,
                                                                                                                         customField,
-                                                                                                                        auditLog);
-        verifyBusinessModelDaoBase(invoicePaymentFieldModelDao);
-        //Assert.assertEquals(invoicePaymentFieldModelDao.getCustomFieldRecordId(), /* TODO */);
+                                                                                                                        fieldRecordId,
+                                                                                                                        auditLog,
+                                                                                                                        tenantRecordId);
+        verifyBusinessModelDaoBase(invoicePaymentFieldModelDao, accountRecordId, tenantRecordId);
+        Assert.assertEquals(invoicePaymentFieldModelDao.getCustomFieldRecordId(), fieldRecordId);
         Assert.assertEquals(invoicePaymentFieldModelDao.getInvoicePaymentId(), customField.getObjectId());
         Assert.assertEquals(invoicePaymentFieldModelDao.getName(), customField.getFieldName());
         Assert.assertEquals(invoicePaymentFieldModelDao.getValue(), customField.getFieldValue());
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentModelDao.java
index 669be7e..e53fd35 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentModelDao.java
@@ -26,13 +26,16 @@ public class TestBusinessInvoicePaymentModelDao extends AnalyticsTestSuiteNoDB {
     @Test(groups = "fast")
     public void testConstructor() throws Exception {
         final BusinessInvoicePaymentModelDao invoicePaymentModelDao = new BusinessInvoicePaymentModelDao(account,
+                                                                                                         accountRecordId,
                                                                                                          invoice,
                                                                                                          invoicePayment,
+                                                                                                         invoicePaymentRecordId,
                                                                                                          payment,
                                                                                                          paymentMethod,
-                                                                                                         auditLog);
-        verifyBusinessModelDaoBase(invoicePaymentModelDao);
-        //Assert.assertEquals(invoicePaymentModelDao.getInvoicePaymentRecordId(), /* TODO */);
+                                                                                                         auditLog,
+                                                                                                         tenantRecordId);
+        verifyBusinessModelDaoBase(invoicePaymentModelDao, accountRecordId, tenantRecordId);
+        Assert.assertEquals(invoicePaymentModelDao.getInvoicePaymentRecordId(), invoicePaymentRecordId);
         Assert.assertEquals(invoicePaymentModelDao.getInvoicePaymentId(), invoicePayment.getId());
         Assert.assertEquals(invoicePaymentModelDao.getInvoiceId(), invoice.getId());
         Assert.assertEquals(invoicePaymentModelDao.getInvoiceNumber(), invoice.getInvoiceNumber());
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentTagModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentTagModelDao.java
index 530d93e..30e4dd8 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentTagModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoicePaymentTagModelDao.java
@@ -26,11 +26,14 @@ public class TestBusinessInvoicePaymentTagModelDao extends AnalyticsTestSuiteNoD
     @Test(groups = "fast")
     public void testConstructor() throws Exception {
         final BusinessInvoicePaymentTagModelDao invoicePaymentTagModelDao = new BusinessInvoicePaymentTagModelDao(account,
+                                                                                                                  accountRecordId,
                                                                                                                   tag,
+                                                                                                                  tagRecordId,
                                                                                                                   tagDefinition,
-                                                                                                                  auditLog);
-        verifyBusinessModelDaoBase(invoicePaymentTagModelDao);
-        //Assert.assertEquals(invoicePaymentTagModelDao.getTagRecordId(), /* TODO */);
+                                                                                                                  auditLog,
+                                                                                                                  tenantRecordId);
+        verifyBusinessModelDaoBase(invoicePaymentTagModelDao, accountRecordId, tenantRecordId);
+        Assert.assertEquals(invoicePaymentTagModelDao.getTagRecordId(), tagRecordId);
         Assert.assertEquals(invoicePaymentTagModelDao.getInvoicePaymentId(), tag.getObjectId());
         Assert.assertEquals(invoicePaymentTagModelDao.getName(), tagDefinition.getName());
     }
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceTagModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceTagModelDao.java
index 84f67e8..5eb3f24 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceTagModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessInvoiceTagModelDao.java
@@ -26,11 +26,14 @@ public class TestBusinessInvoiceTagModelDao extends AnalyticsTestSuiteNoDB {
     @Test(groups = "fast")
     public void testConstructor() throws Exception {
         final BusinessInvoiceTagModelDao invoiceTagModelDao = new BusinessInvoiceTagModelDao(account,
+                                                                                             accountRecordId,
                                                                                              tag,
+                                                                                             tagRecordId,
                                                                                              tagDefinition,
-                                                                                             auditLog);
-        verifyBusinessModelDaoBase(invoiceTagModelDao);
-        //Assert.assertEquals(invoiceTagModelDao.getTagRecordId(), /* TODO */);
+                                                                                             auditLog,
+                                                                                             tenantRecordId);
+        verifyBusinessModelDaoBase(invoiceTagModelDao, accountRecordId, tenantRecordId);
+        Assert.assertEquals(invoiceTagModelDao.getTagRecordId(), tagRecordId);
         Assert.assertEquals(invoiceTagModelDao.getInvoiceId(), tag.getObjectId());
         Assert.assertEquals(invoiceTagModelDao.getName(), tagDefinition.getName());
     }
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessOverdueStatusModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessOverdueStatusModelDao.java
index bdb4d65..0a6a218 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessOverdueStatusModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessOverdueStatusModelDao.java
@@ -29,12 +29,15 @@ public class TestBusinessOverdueStatusModelDao extends AnalyticsTestSuiteNoDB {
     public void testEquals() throws Exception {
         final DateTime endDate = new DateTime(2012, 7, 21, 10, 10, 10, DateTimeZone.UTC);
         final BusinessOverdueStatusModelDao overdueStatusModelDao = new BusinessOverdueStatusModelDao(account,
+                                                                                                      accountRecordId,
                                                                                                       bundle,
                                                                                                       blockingState,
+                                                                                                      blockingStateRecordId,
                                                                                                       endDate,
-                                                                                                      auditLog);
-        verifyBusinessModelDaoBase(overdueStatusModelDao);
-        //Assert.assertEquals(overdueStatusModelDao.getBlockingStateRecordId(), /* TODO */);
+                                                                                                      auditLog,
+                                                                                                      tenantRecordId);
+        verifyBusinessModelDaoBase(overdueStatusModelDao, accountRecordId, tenantRecordId);
+        Assert.assertEquals(overdueStatusModelDao.getBlockingStateRecordId(), blockingStateRecordId);
         Assert.assertEquals(overdueStatusModelDao.getBundleId(), bundle.getId());
         Assert.assertEquals(overdueStatusModelDao.getBundleExternalKey(), bundle.getExternalKey());
         Assert.assertEquals(overdueStatusModelDao.getStatus(), blockingState.getStateName());
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessSubscriptionTransitionModelDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessSubscriptionTransitionModelDao.java
index 3aaf1ab..755a0e1 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessSubscriptionTransitionModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/model/TestBusinessSubscriptionTransitionModelDao.java
@@ -36,14 +36,17 @@ public class TestBusinessSubscriptionTransitionModelDao extends AnalyticsTestSui
         final BusinessSubscription previousSubscription = null;
         final BusinessSubscription nextSubscription = new BusinessSubscription(null, null, null, Currency.GBP, startDate, SubscriptionState.ACTIVE);
         final BusinessSubscriptionTransitionModelDao subscriptionTransitionModelDao = new BusinessSubscriptionTransitionModelDao(account,
+                                                                                                                                 accountRecordId,
                                                                                                                                  bundle,
                                                                                                                                  subscriptionTransition,
+                                                                                                                                 subscriptionEventRecordId,
                                                                                                                                  requestedTimestamp,
                                                                                                                                  event,
                                                                                                                                  previousSubscription,
                                                                                                                                  nextSubscription,
-                                                                                                                                 auditLog);
-        verifyBusinessModelDaoBase(subscriptionTransitionModelDao);
+                                                                                                                                 auditLog,
+                                                                                                                                 tenantRecordId);
+        verifyBusinessModelDaoBase(subscriptionTransitionModelDao, accountRecordId, tenantRecordId);
         //Assert.assertEquals(subscriptionTransitionModelDao.getSubscriptionEventRecordId(), /* TODO */);
         Assert.assertEquals(subscriptionTransitionModelDao.getBundleId(), bundle.getId());
         Assert.assertEquals(subscriptionTransitionModelDao.getBundleExternalKey(), bundle.getExternalKey());
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestAnalyticsDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestAnalyticsDao.java
index 46ab06e..bd8be6b 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestAnalyticsDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestAnalyticsDao.java
@@ -33,10 +33,12 @@ public class TestAnalyticsDao extends AnalyticsTestSuiteWithEmbeddedDB {
         Assert.assertNull(analyticsDao.getAccountById(account.getId(), callContext));
 
         final BusinessAccountModelDao accountModelDao = new BusinessAccountModelDao(account,
+                                                                                    accountRecordId,
                                                                                     BigDecimal.ONE,
                                                                                     invoice,
                                                                                     payment,
-                                                                                    auditLog);
+                                                                                    auditLog,
+                                                                                    tenantRecordId);
 
         analyticsSqlDao.create(accountModelDao.getTableName(), accountModelDao, callContext);
         Assert.assertEquals(analyticsDao.getAccountById(account.getId(), callContext), new BusinessAccount(accountModelDao));
diff --git a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestBusinessAnalyticsSqlDao.java b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestBusinessAnalyticsSqlDao.java
index f3cda23..83ba49b 100644
--- a/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestBusinessAnalyticsSqlDao.java
+++ b/osgi-bundles/bundles/analytics/src/test/java/com/ning/billing/osgi/bundles/analytics/dao/TestBusinessAnalyticsSqlDao.java
@@ -29,10 +29,12 @@ public class TestBusinessAnalyticsSqlDao extends AnalyticsTestSuiteWithEmbeddedD
     @Test(groups = "slow")
     public void testSqlDao() throws Exception {
         final BusinessAccountModelDao accountModelDao = new BusinessAccountModelDao(account,
+                                                                                    accountRecordId,
                                                                                     BigDecimal.ONE,
                                                                                     invoice,
                                                                                     payment,
-                                                                                    auditLog);
+                                                                                    auditLog,
+                                                                                    tenantRecordId);
 
         Assert.assertNull(analyticsSqlDao.getAccountByAccountRecordId(accountModelDao.getAccountRecordId(),
                                                                       accountModelDao.getTenantRecordId(),
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 0e4da16..cc9aee0 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
@@ -29,7 +29,7 @@ public enum TableName {
     ACCOUNT_EMAIL_HISTORY("account_email_history"),
     ACCOUNT_EMAIL("account_emails", ObjectType.ACCOUNT_EMAIL, ACCOUNT_EMAIL_HISTORY),
     BUNDLES("bundles", ObjectType.BUNDLE),
-    BLOCKING_STATES("blocking_states"),
+    BLOCKING_STATES("blocking_states", ObjectType.BLOCKING_STATES),
     CUSTOM_FIELD_HISTORY("custom_field_history"),
     CUSTOM_FIELD("custom_fields", ObjectType.CUSTOM_FIELD, CUSTOM_FIELD_HISTORY),
     INVOICE_ITEMS("invoice_items", ObjectType.INVOICE_ITEM),