killbill-uncached

Changes

jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonNoSubscriptions.java 107(+0 -107)

jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonSimple.java 85(+0 -85)

jaxrs/src/main/java/com/ning/billing/jaxrs/json/EntitlementJsonNoEvents.java 153(+0 -153)

jaxrs/src/main/java/com/ning/billing/jaxrs/json/EntitlementJsonSimple.java 101(+0 -101)

jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonNoEvents.java 92(+0 -92)

jaxrs/src/main/java/com/ning/billing/jaxrs/resources/SubscriptionResource.java 73(+0 -73)

jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonNoSubscriptions.java 67(+0 -67)

jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonSimple.java 45(+0 -45)

jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestEntitlementJsonSimple.java 50(+0 -50)

jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonNoEvents.java 79(+0 -79)

server/src/test/java/com/ning/billing/jaxrs/TestSubscription.java 64(+0 -64)

Details

diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java
index 3c52637..0807c09 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java
@@ -49,13 +49,13 @@ import com.google.common.collect.Multimap;
 public class AccountTimelineJson {
 
     private final AccountJsonSimple account;
-    private final List<BundleJsonWithSubscriptions> bundles;
+    private final List<BundleJson> bundles;
     private final List<InvoiceJsonWithBundleKeys> invoices;
     private final List<PaymentJsonWithBundleKeys> payments;
 
     @JsonCreator
     public AccountTimelineJson(@JsonProperty("account") final AccountJsonSimple account,
-                               @JsonProperty("bundles") final List<BundleJsonWithSubscriptions> bundles,
+                               @JsonProperty("bundles") final List<BundleJson> bundles,
                                @JsonProperty("invoices") final List<InvoiceJsonWithBundleKeys> invoices,
                                @JsonProperty("payments") final List<PaymentJsonWithBundleKeys> payments) {
         this.account = account;
@@ -119,10 +119,10 @@ public class AccountTimelineJson {
                                final Map<UUID, List<AuditLog>> chargebacksAuditLogs, final Map<UUID, List<AuditLog>> bundlesAuditLogs,
                                final Map<UUID, List<AuditLog>> subscriptionsAuditLogs, final Map<UUID, List<AuditLog>> subscriptionEventsAuditLogs) {
         this.account = new AccountJsonSimple(account.getId().toString(), account.getExternalKey());
-        this.bundles = new LinkedList<BundleJsonWithSubscriptions>();
+        this.bundles = new LinkedList<BundleJson>();
         for (final SubscriptionBundle bundle : bundles) {
             final List<AuditLog> bundleAuditLogs = bundlesAuditLogs.get(bundle.getId());
-            final BundleJsonWithSubscriptions jsonWithSubscriptions = new BundleJsonWithSubscriptions(bundle, bundleAuditLogs,
+            final BundleJson jsonWithSubscriptions = new BundleJson(bundle, bundleAuditLogs,
                                                                                                       subscriptionsAuditLogs, subscriptionEventsAuditLogs);
             this.bundles.add(jsonWithSubscriptions);
         }
@@ -180,7 +180,7 @@ public class AccountTimelineJson {
         return account;
     }
 
-    public List<BundleJsonWithSubscriptions> getBundles() {
+    public List<BundleJson> getBundles() {
         return bundles;
     }
 
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleTimelineJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleTimelineJson.java
index 2aeb8de..d7b5037 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleTimelineJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleTimelineJson.java
@@ -25,7 +25,7 @@ public class BundleTimelineJson {
 
     private final String viewId;
 
-    private final BundleJsonWithSubscriptions bundle;
+    private final BundleJson bundle;
 
     private final List<PaymentJsonSimple> payments;
 
@@ -36,7 +36,7 @@ public class BundleTimelineJson {
 
     @JsonCreator
     public BundleTimelineJson(@JsonProperty("viewId") final String viewId,
-                              @JsonProperty("bundle") final BundleJsonWithSubscriptions bundle,
+                              @JsonProperty("bundle") final BundleJson bundle,
                               @JsonProperty("payments") final List<PaymentJsonSimple> payments,
                               @JsonProperty("invoices") final List<InvoiceJsonSimple> invoices,
                               @JsonProperty("reasonForChange") final String reason) {
@@ -51,7 +51,7 @@ public class BundleTimelineJson {
         return viewId;
     }
 
-    public BundleJsonWithSubscriptions getBundle() {
+    public BundleJson getBundle() {
         return bundle;
     }
 
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
index b8c93bd..618886b 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
@@ -59,7 +59,7 @@ import com.ning.billing.jaxrs.json.AccountJson;
 import com.ning.billing.jaxrs.json.AccountJsonWithBalance;
 import com.ning.billing.jaxrs.json.AccountJsonWithBalanceAndCBA;
 import com.ning.billing.jaxrs.json.AccountTimelineJson;
-import com.ning.billing.jaxrs.json.BundleJsonNoSubscriptions;
+import com.ning.billing.jaxrs.json.BundleJson;
 import com.ning.billing.jaxrs.json.ChargebackCollectionJson;
 import com.ning.billing.jaxrs.json.ChargebackJson;
 import com.ning.billing.jaxrs.json.CustomFieldJson;
@@ -181,14 +181,14 @@ public class AccountResource extends JaxRsResourceBase {
         if (externalKey != null) {
 
             final SubscriptionBundle bundle = subscriptionApi.getSubscriptionBundleForAccountIdAndExternalKey(uuid, externalKey, tenantContext);
-            final BundleJsonNoSubscriptions json = new BundleJsonNoSubscriptions(bundle);
+            final BundleJson json = new BundleJson(bundle, null, null, null);
             return Response.status(Status.OK).entity(json).build();
         } else {
             final List<SubscriptionBundle> bundles = subscriptionApi.getSubscriptionBundlesForAccountId(uuid, tenantContext);
-            final Collection<BundleJsonNoSubscriptions> result = Collections2.transform(bundles, new Function<SubscriptionBundle, BundleJsonNoSubscriptions>() {
+            final Collection<BundleJson> result = Collections2.transform(bundles, new Function<SubscriptionBundle, BundleJson>() {
                 @Override
-                public BundleJsonNoSubscriptions apply(final SubscriptionBundle input) {
-                    return new BundleJsonNoSubscriptions(input);
+                public BundleJson apply(final SubscriptionBundle input) {
+                    return new BundleJson(input, null, null, null);
                 }
             });
             return Response.status(Status.OK).entity(result).build();
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java
index a2a2b23..1312707 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java
@@ -37,7 +37,6 @@ import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.UriInfo;
 
-import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
 
 import com.ning.billing.ObjectType;
@@ -50,9 +49,9 @@ import com.ning.billing.entitlement.api.Subscription;
 import com.ning.billing.entitlement.api.SubscriptionApi;
 import com.ning.billing.entitlement.api.SubscriptionApiException;
 import com.ning.billing.entitlement.api.SubscriptionBundle;
-import com.ning.billing.jaxrs.json.BundleJsonNoSubscriptions;
+import com.ning.billing.jaxrs.json.BundleJson;
 import com.ning.billing.jaxrs.json.CustomFieldJson;
-import com.ning.billing.jaxrs.json.SubscriptionJsonNoEvents;
+import com.ning.billing.jaxrs.json.SubscriptionJson;
 import com.ning.billing.jaxrs.util.Context;
 import com.ning.billing.jaxrs.util.JaxrsUriBuilder;
 import com.ning.billing.util.api.AuditUserApi;
@@ -100,7 +99,7 @@ public class BundleResource extends JaxRsResourceBase {
 
         final UUID id = UUID.fromString(bundleId);
         final SubscriptionBundle bundle = subscriptionApi.getSubscriptionBundle(id, context.createContext(request));
-        final BundleJsonNoSubscriptions json = new BundleJsonNoSubscriptions(bundle);
+        final BundleJson json = new BundleJson(bundle, null, null, null);
         return Response.status(Status.OK).entity(json).build();
     }
 
@@ -108,9 +107,9 @@ public class BundleResource extends JaxRsResourceBase {
     @GET
     @Produces(APPLICATION_JSON)
     public Response getBundleByKey(@QueryParam(QUERY_EXTERNAL_KEY) final String externalKey,
-                              @javax.ws.rs.core.Context final HttpServletRequest request) throws SubscriptionApiException {
+                                   @javax.ws.rs.core.Context final HttpServletRequest request) throws SubscriptionApiException {
         final SubscriptionBundle bundle = subscriptionApi.getActiveSubscriptionBundleForExternalKey(externalKey, context.createContext(request));
-        final BundleJsonNoSubscriptions json = new BundleJsonNoSubscriptions(bundle);
+        final BundleJson json = new BundleJson(bundle, null, null, null);
         return Response.status(Status.OK).entity(json).build();
     }
 
@@ -123,11 +122,11 @@ public class BundleResource extends JaxRsResourceBase {
 
         final UUID id = UUID.fromString(bundleId);
         final SubscriptionBundle bundle = subscriptionApi.getSubscriptionBundle(id, context.createContext(request));
-        final Collection<SubscriptionJsonNoEvents> result = Collections2.transform(bundle.getSubscriptions(), new Function<Subscription, SubscriptionJsonNoEvents>() {
+        final Collection<SubscriptionJson> result = Collections2.transform(bundle.getSubscriptions(), new Function<Subscription, SubscriptionJson>() {
             @Nullable
             @Override
-            public SubscriptionJsonNoEvents apply(@Nullable final Subscription input) {
-                return new SubscriptionJsonNoEvents(input, null);
+            public SubscriptionJson apply(@Nullable final Subscription input) {
+                return new SubscriptionJson(input, null, null, null);
             }
         });
         return Response.status(Status.OK).entity(result).build();
@@ -183,11 +182,11 @@ public class BundleResource extends JaxRsResourceBase {
     @Path("/{bundleId:" + UUID_PATTERN + "}")
     @Consumes(APPLICATION_JSON)
     @Produces(APPLICATION_JSON)
-    public Response transferBundle(@PathParam(ID_PARAM_NAME) final String id,
+    public Response transferBundle(final BundleJson json,
+                                   @PathParam(ID_PARAM_NAME) final String id,
                                    @QueryParam(QUERY_REQUESTED_DT) final String requestedDate,
                                    @QueryParam(QUERY_BUNDLE_TRANSFER_ADDON) @DefaultValue("true") final Boolean transferAddOn,
                                    @QueryParam(QUERY_BUNDLE_TRANSFER_CANCEL_IMM) @DefaultValue("false") final Boolean cancelImmediatley,
-                                   final BundleJsonNoSubscriptions json,
                                    @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                    @HeaderParam(HDR_REASON) final String reason,
                                    @HeaderParam(HDR_COMMENT) final String comment,
@@ -200,7 +199,7 @@ public class BundleResource extends JaxRsResourceBase {
         final SubscriptionBundle bundle = subscriptionApi.getSubscriptionBundle(bundleId, callContext);
         final LocalDate inputLocalDate = toLocalDate(bundle.getAccountId(), requestedDate, callContext);
 
-        final UUID newBundleId  = entitlementApi.transferEntitlements(bundle.getAccountId(), UUID.fromString(json.getAccountId()), bundle.getExternalKey(), inputLocalDate, callContext);
+        final UUID newBundleId = entitlementApi.transferEntitlements(bundle.getAccountId(), UUID.fromString(json.getAccountId()), bundle.getExternalKey(), inputLocalDate, callContext);
         return uriBuilder.buildResponse(BundleResource.class, "getBundle", newBundleId, uriInfo.getBaseUri().toString());
     }
 
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/EntitlementResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/EntitlementResource.java
index 5f0c55d..f1f6540 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/EntitlementResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/EntitlementResource.java
@@ -54,8 +54,11 @@ import com.ning.billing.entitlement.api.Entitlement.EntitlementActionPolicy;
 import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
 import com.ning.billing.entitlement.api.EntitlementApi;
 import com.ning.billing.entitlement.api.EntitlementApiException;
+import com.ning.billing.entitlement.api.Subscription;
+import com.ning.billing.entitlement.api.SubscriptionApi;
+import com.ning.billing.entitlement.api.SubscriptionApiException;
 import com.ning.billing.jaxrs.json.CustomFieldJson;
-import com.ning.billing.jaxrs.json.EntitlementJsonNoEvents;
+import com.ning.billing.jaxrs.json.SubscriptionJson;
 import com.ning.billing.jaxrs.util.Context;
 import com.ning.billing.jaxrs.util.JaxrsUriBuilder;
 import com.ning.billing.jaxrs.util.KillbillEventHandler;
@@ -85,6 +88,7 @@ public class EntitlementResource extends JaxRsResourceBase {
 
     private final KillbillEventHandler killbillHandler;
     private final EntitlementApi entitlementApi;
+    private final SubscriptionApi subscriptionApi;
 
     @Inject
     public EntitlementResource(final KillbillEventHandler killbillHandler,
@@ -93,36 +97,38 @@ public class EntitlementResource extends JaxRsResourceBase {
                                final CustomFieldUserApi customFieldUserApi,
                                final AuditUserApi auditUserApi,
                                final EntitlementApi entitlementApi,
+                               final SubscriptionApi subscriptionApi,
                                final AccountUserApi accountUserApi,
                                final Clock clock,
                                final Context context) {
         super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, clock, context);
         this.killbillHandler = killbillHandler;
         this.entitlementApi = entitlementApi;
+        this.subscriptionApi = subscriptionApi;
     }
 
     @GET
     @Path("/{entitlementId:" + UUID_PATTERN + "}")
     @Produces(APPLICATION_JSON)
     public Response getEntitlement(@PathParam("entitlementId") final String entitlementId,
-                                   @javax.ws.rs.core.Context final HttpServletRequest request) throws EntitlementApiException {
+                                   @javax.ws.rs.core.Context final HttpServletRequest request) throws SubscriptionApiException {
         final UUID uuid = UUID.fromString(entitlementId);
-        final Entitlement entitlement = entitlementApi.getEntitlementForId(uuid, context.createContext(request));
-        final EntitlementJsonNoEvents json = new EntitlementJsonNoEvents(entitlement, null);
+        final Subscription subscription = subscriptionApi.getSubscriptionForEntitlementId(uuid, context.createContext(request));
+        final SubscriptionJson json = new SubscriptionJson(subscription, null, null, null);
         return Response.status(Status.OK).entity(json).build();
     }
 
     @POST
     @Consumes(APPLICATION_JSON)
     @Produces(APPLICATION_JSON)
-    public Response createEntitlement(final EntitlementJsonNoEvents entitlement,
+    public Response createEntitlement(final SubscriptionJson entitlement,
                                       @QueryParam(QUERY_REQUESTED_DT) final String requestedDate,
                                       @QueryParam(QUERY_CALL_COMPLETION) @DefaultValue("false") final Boolean callCompletion,
                                       @QueryParam(QUERY_CALL_TIMEOUT) @DefaultValue("3") final long timeoutSec,
                                       @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                       @HeaderParam(HDR_REASON) final String reason,
                                       @HeaderParam(HDR_COMMENT) final String comment,
-                                      @javax.ws.rs.core.Context final HttpServletRequest request) throws EntitlementApiException, AccountApiException {
+                                      @javax.ws.rs.core.Context final HttpServletRequest request) throws EntitlementApiException, AccountApiException, SubscriptionApiException {
         final CallContext callContext = context.createContext(createdBy, reason, comment, request);
         final EntitlementCallCompletionCallback<Entitlement> callback = new EntitlementCallCompletionCallback<Entitlement>() {
             @Override
@@ -160,7 +166,7 @@ public class EntitlementResource extends JaxRsResourceBase {
     @Produces(APPLICATION_JSON)
     @Consumes(APPLICATION_JSON)
     @Path("/{entitlementId:" + UUID_PATTERN + "}")
-    public Response changeEntitlementPlan(final EntitlementJsonNoEvents entitlement,
+    public Response changeEntitlementPlan(final SubscriptionJson entitlement,
                                           @PathParam("entitlementId") final String entitlementId,
                                           @QueryParam(QUERY_REQUESTED_DT) final String requestedDate,
                                           @QueryParam(QUERY_CALL_COMPLETION) @DefaultValue("false") final Boolean callCompletion,
@@ -169,7 +175,7 @@ public class EntitlementResource extends JaxRsResourceBase {
                                           @HeaderParam(HDR_CREATED_BY) final String createdBy,
                                           @HeaderParam(HDR_REASON) final String reason,
                                           @HeaderParam(HDR_COMMENT) final String comment,
-                                          @javax.ws.rs.core.Context final HttpServletRequest request) throws EntitlementApiException, AccountApiException {
+                                          @javax.ws.rs.core.Context final HttpServletRequest request) throws EntitlementApiException, AccountApiException, SubscriptionApiException {
         final CallContext callContext = context.createContext(createdBy, reason, comment, request);
 
         final EntitlementCallCompletionCallback<Response> callback = new EntitlementCallCompletionCallback<Response>() {
@@ -204,7 +210,7 @@ public class EntitlementResource extends JaxRsResourceBase {
             }
 
             @Override
-            public Response doResponseOk(final Response operationResponse) throws EntitlementApiException {
+            public Response doResponseOk(final Response operationResponse) throws SubscriptionApiException {
                 if (operationResponse.getStatus() != Status.OK.getStatusCode()) {
                     return operationResponse;
                 }
@@ -248,7 +254,7 @@ public class EntitlementResource extends JaxRsResourceBase {
                                           @HeaderParam(HDR_REASON) final String reason,
                                           @HeaderParam(HDR_COMMENT) final String comment,
                                           @javax.ws.rs.core.Context final UriInfo uriInfo,
-                                          @javax.ws.rs.core.Context final HttpServletRequest request) throws EntitlementApiException, AccountApiException {
+                                          @javax.ws.rs.core.Context final HttpServletRequest request) throws EntitlementApiException, AccountApiException, SubscriptionApiException {
         final CallContext callContext = context.createContext(createdBy, reason, comment, request);
 
         final EntitlementCallCompletionCallback<Response> callback = new EntitlementCallCompletionCallback<Response>() {
@@ -344,7 +350,7 @@ public class EntitlementResource extends JaxRsResourceBase {
 
         public boolean isImmOperation();
 
-        public Response doResponseOk(final T operationResponse) throws EntitlementApiException;
+        public Response doResponseOk(final T operationResponse) throws SubscriptionApiException;
     }
 
     private class EntitlementCallCompletion<T> {
@@ -352,7 +358,7 @@ public class EntitlementResource extends JaxRsResourceBase {
         public Response withSynchronization(final EntitlementCallCompletionCallback<T> callback,
                                             final long timeoutSec,
                                             final boolean callCompletion,
-                                            final CallContext callContext) throws EntitlementApiException, AccountApiException {
+                                            final CallContext callContext) throws SubscriptionApiException, AccountApiException, EntitlementApiException {
             final CompletionUserRequestEntitlement waiter = callCompletion ? new CompletionUserRequestEntitlement(callContext.getUserToken()) : null;
             try {
                 if (waiter != null) {
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonWithSubscriptions.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonWithSubscriptions.java
index 8ba14cf..016a6da 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonWithSubscriptions.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonWithSubscriptions.java
@@ -24,7 +24,7 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.ning.billing.catalog.api.BillingPeriod;
-import com.ning.billing.jaxrs.json.SubscriptionJsonWithEvents.SubscriptionReadEventJson;
+import com.ning.billing.jaxrs.json.SubscriptionJson.SubscriptionReadEventJson;
 import com.ning.billing.jaxrs.JaxrsTestSuiteNoDB;
 
 import com.google.common.collect.ImmutableList;
@@ -42,16 +42,19 @@ public class TestBundleJsonWithSubscriptions extends JaxrsTestSuiteNoDB {
         final List<AuditLogJson> auditLogs = createAuditLogsJson(clock.getUTCNow());
 
         SubscriptionReadEventJson event = new SubscriptionReadEventJson(someUUID, BillingPeriod.NO_BILLING_PERIOD.toString(), new LocalDate(), new LocalDate(), "product", "priceList", "eventType", "phase", null);
-        final SubscriptionJsonWithEvents subscription = new SubscriptionJsonWithEvents(someUUID, someUUID, someUUID, externalKey, ImmutableList.<SubscriptionReadEventJson>of(event), null, null, auditLogs);
-
-        final BundleJsonWithSubscriptions bundleJsonWithSubscriptions = new BundleJsonWithSubscriptions(bundleId.toString(), externalKey, ImmutableList.<SubscriptionJsonWithEvents>of(subscription), auditLogs);
-        Assert.assertEquals(bundleJsonWithSubscriptions.getBundleId(), bundleId.toString());
-        Assert.assertEquals(bundleJsonWithSubscriptions.getExternalKey(), externalKey);
-        Assert.assertEquals(bundleJsonWithSubscriptions.getSubscriptions().size(), 1);
-        Assert.assertEquals(bundleJsonWithSubscriptions.getAuditLogs(), auditLogs);
-
-        final String asJson = mapper.writeValueAsString(bundleJsonWithSubscriptions);
-        final BundleJsonWithSubscriptions fromJson = mapper.readValue(asJson, BundleJsonWithSubscriptions.class);
-        Assert.assertEquals(fromJson, bundleJsonWithSubscriptions);
+        final SubscriptionJson subscription = new SubscriptionJson(someUUID, someUUID, someUUID, externalKey,
+                                                                                       new LocalDate(), someUUID, someUUID, someUUID, someUUID, new LocalDate(), new LocalDate(),
+                                                                                       new LocalDate(), new LocalDate(),
+                                                                                       ImmutableList.<SubscriptionReadEventJson>of(event), null, null, auditLogs);
+
+        final BundleJson bundleJson = new BundleJson(someUUID, bundleId.toString(), externalKey, ImmutableList.<SubscriptionJson>of(subscription), auditLogs);
+        Assert.assertEquals(bundleJson.getBundleId(), bundleId.toString());
+        Assert.assertEquals(bundleJson.getExternalKey(), externalKey);
+        Assert.assertEquals(bundleJson.getSubscriptions().size(), 1);
+        Assert.assertEquals(bundleJson.getAuditLogs(), auditLogs);
+
+        final String asJson = mapper.writeValueAsString(bundleJson);
+        final BundleJson fromJson = mapper.readValue(asJson, BundleJson.class);
+        Assert.assertEquals(fromJson, bundleJson);
     }
 }
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleTimelineJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleTimelineJson.java
index 527e5b5..5372103 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleTimelineJson.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleTimelineJson.java
@@ -17,7 +17,6 @@
 package com.ning.billing.jaxrs.json;
 
 import java.math.BigDecimal;
-import java.util.List;
 import java.util.UUID;
 
 import org.joda.time.DateTime;
@@ -25,17 +24,10 @@ import org.joda.time.LocalDate;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.catalog.api.PhaseType;
-import com.ning.billing.catalog.api.PlanPhaseSpecifier;
-import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.entitlement.api.SubscriptionEvent;
 import com.ning.billing.jaxrs.JaxrsTestSuiteNoDB;
-import com.ning.billing.util.audit.AuditLog;
 
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
 
 public class TestBundleTimelineJson extends JaxrsTestSuiteNoDB {
 
@@ -44,13 +36,13 @@ public class TestBundleTimelineJson extends JaxrsTestSuiteNoDB {
         final String viewId = UUID.randomUUID().toString();
         final String reason = UUID.randomUUID().toString();
 
-        final BundleJsonWithSubscriptions bundleJsonWithSubscriptions = createBundleWithSubscriptions();
+        final BundleJson bundleJson = createBundleWithSubscriptions();
         final InvoiceJsonSimple invoiceJsonSimple = createInvoice();
         final PaymentJsonSimple paymentJsonSimple = createPayment(UUID.fromString(invoiceJsonSimple.getAccountId()),
                                                                   UUID.fromString(invoiceJsonSimple.getInvoiceId()));
 
         final BundleTimelineJson bundleTimelineJson = new BundleTimelineJson(viewId,
-                                                                             bundleJsonWithSubscriptions,
+                                                                             bundleJson,
                                                                              ImmutableList.<PaymentJsonSimple>of(paymentJsonSimple),
                                                                              ImmutableList.<InvoiceJsonSimple>of(invoiceJsonSimple),
                                                                              reason);
@@ -60,20 +52,18 @@ public class TestBundleTimelineJson extends JaxrsTestSuiteNoDB {
         Assert.assertEquals(fromJson, bundleTimelineJson);
     }
 
-    private BundleJsonWithSubscriptions createBundleWithSubscriptions() {
-        final DateTime effectiveDate = clock.getUTCNow();
-        final UUID eventId = UUID.randomUUID();
-        final PlanPhaseSpecifier planPhaseSpecifier = new PlanPhaseSpecifier(UUID.randomUUID().toString(), ProductCategory.BASE,
-                                                                             BillingPeriod.NO_BILLING_PERIOD, UUID.randomUUID().toString(),
-                                                                             PhaseType.EVERGREEN);
+    private BundleJson createBundleWithSubscriptions() {
+        final String someUUID = UUID.randomUUID().toString();
         final UUID accountId = UUID.randomUUID();
         final UUID bundleId = UUID.randomUUID();
         final UUID entitlementId = UUID.randomUUID();
         final String externalKey = UUID.randomUUID().toString();
 
-
-        final SubscriptionJsonWithEvents entitlementJsonWithEvents = new SubscriptionJsonWithEvents(accountId, bundleId, entitlementId, externalKey, ImmutableList.<SubscriptionEvent>of(), ImmutableList.<AuditLog>of(), ImmutableMap.<UUID, List<AuditLog>>of());
-        return new BundleJsonWithSubscriptions(bundleId.toString(), externalKey, ImmutableList.<SubscriptionJsonWithEvents>of(entitlementJsonWithEvents), null);
+        final SubscriptionJson entitlementJsonWithEvents = new SubscriptionJson(accountId.toString(), bundleId.toString(), entitlementId.toString(), externalKey,
+                                                                                                    new LocalDate(), someUUID, someUUID, someUUID, someUUID,
+                                                                                                    new LocalDate(), new LocalDate(), new LocalDate(), new LocalDate(),
+                                                                                                    null, null, null, null);
+        return new BundleJson(accountId.toString(), bundleId.toString(), externalKey, ImmutableList.<SubscriptionJson>of(entitlementJsonWithEvents), null);
     }
 
     private InvoiceJsonSimple createInvoice() {
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestEntitlementJsonWithEvents.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestEntitlementJsonWithEvents.java
index a923b00..aa5984d 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestEntitlementJsonWithEvents.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestEntitlementJsonWithEvents.java
@@ -21,25 +21,23 @@ import java.util.UUID;
 
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
+import org.joda.time.LocalDate;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.PhaseType;
 import com.ning.billing.clock.DefaultClock;
-import com.ning.billing.entitlement.api.SubscriptionEvent;
 import com.ning.billing.jaxrs.JaxrsTestSuiteNoDB;
-import com.ning.billing.jaxrs.json.SubscriptionJsonWithEvents.SubscriptionReadEventJson;
 import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
 
-import com.google.common.collect.ImmutableList;
-
 import static com.ning.billing.jaxrs.JaxrsTestUtils.createAuditLogsJson;
 
 public class TestEntitlementJsonWithEvents extends JaxrsTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testJson() throws Exception {
+        final String someUUID = UUID.randomUUID().toString();
         final String accountId = UUID.randomUUID().toString();
         final String bundleId = UUID.randomUUID().toString();
         final String entitlementId = UUID.randomUUID().toString();
@@ -48,7 +46,7 @@ public class TestEntitlementJsonWithEvents extends JaxrsTestSuiteNoDB {
         final DateTime effectiveDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
         final UUID eventId = UUID.randomUUID();
         final List<AuditLogJson> auditLogs = createAuditLogsJson(clock.getUTCNow());
-        final SubscriptionJsonWithEvents.SubscriptionReadEventJson newEvent = new SubscriptionJsonWithEvents.SubscriptionReadEventJson(eventId.toString(),
+        final SubscriptionJson.SubscriptionReadEventJson newEvent = new SubscriptionJson.SubscriptionReadEventJson(eventId.toString(),
                                                                                                                                        BillingPeriod.NO_BILLING_PERIOD.toString(),
                                                                                                                                        requestedDate.toLocalDate(),
                                                                                                                                        effectiveDate.toLocalDate(),
@@ -57,13 +55,15 @@ public class TestEntitlementJsonWithEvents extends JaxrsTestSuiteNoDB {
                                                                                                                                        SubscriptionBaseTransitionType.CREATE.toString(),
                                                                                                                                        PhaseType.DISCOUNT.toString(),
                                                                                                                                        auditLogs);
-        final SubscriptionEvent event = null;
-        final SubscriptionJsonWithEvents entitlementJsonWithEvents = new SubscriptionJsonWithEvents(accountId, bundleId, entitlementId, externalKey, ImmutableList.<SubscriptionReadEventJson>of(newEvent), null, null, auditLogs);
+        final SubscriptionJson entitlementJsonWithEvents = new SubscriptionJson(accountId, bundleId, entitlementId, externalKey,
+                                                                                                    new LocalDate(), someUUID, someUUID, someUUID, someUUID,
+                                                                                                    new LocalDate(), new LocalDate(), new LocalDate(), new LocalDate(),
+                                                                                                    null, null, null, null);
 
 
         final String asJson = mapper.writeValueAsString(entitlementJsonWithEvents);
 
-        final SubscriptionJsonWithEvents fromJson = mapper.readValue(asJson, SubscriptionJsonWithEvents.class);
+        final SubscriptionJson fromJson = mapper.readValue(asJson, SubscriptionJson.class);
         Assert.assertEquals(fromJson, entitlementJsonWithEvents);
     }
 }
diff --git a/payment/src/main/java/com/ning/billing/payment/api/DefaultPayment.java b/payment/src/main/java/com/ning/billing/payment/api/DefaultPayment.java
index 1020bba..045ab55 100644
--- a/payment/src/main/java/com/ning/billing/payment/api/DefaultPayment.java
+++ b/payment/src/main/java/com/ning/billing/payment/api/DefaultPayment.java
@@ -142,16 +142,6 @@ public class DefaultPayment extends EntityBase implements Payment {
     }
 
     @Override
-    public String getExtFirstPaymentIdRef() {
-        return extFirstPaymentIdRef;
-    }
-
-    @Override
-    public String getExtSecondPaymentIdRef() {
-        return extSecondPaymentIdRef;
-    }
-
-    @Override
     public PaymentInfoPlugin getPaymentInfoPlugin() {
         return paymentPluginInfo;
     }
diff --git a/server/src/main/java/com/ning/billing/server/modules/KillbillServerModule.java b/server/src/main/java/com/ning/billing/server/modules/KillbillServerModule.java
index e0a0033..d54d83e 100644
--- a/server/src/main/java/com/ning/billing/server/modules/KillbillServerModule.java
+++ b/server/src/main/java/com/ning/billing/server/modules/KillbillServerModule.java
@@ -31,7 +31,6 @@ import com.ning.billing.account.glue.DefaultAccountModule;
 import com.ning.billing.beatrix.glue.BeatrixModule;
 import com.ning.billing.catalog.glue.CatalogModule;
 import com.ning.billing.jaxrs.resources.EntitlementResource;
-import com.ning.billing.jaxrs.resources.SubscriptionResource;
 import com.ning.billing.jaxrs.resources.TestResource;
 import com.ning.billing.subscription.glue.DefaultSubscriptionModule;
 import com.ning.billing.invoice.glue.DefaultInvoiceModule;
@@ -114,7 +113,6 @@ public class KillbillServerModule extends AbstractModule {
         bind(AccountResource.class).asEagerSingleton();
         bind(BundleResource.class).asEagerSingleton();
         bind(EntitlementResource.class).asEagerSingleton();
-        bind(SubscriptionResource.class).asEagerSingleton();
         bind(InvoiceResource.class).asEagerSingleton();
         bind(TagResource.class).asEagerSingleton();
         bind(CatalogResource.class).asEagerSingleton();
diff --git a/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java b/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java
index 5c69c1c..5596fd8 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/KillbillClient.java
@@ -47,7 +47,6 @@ import com.ning.billing.jaxrs.json.AccountTimelineJson;
 import com.ning.billing.jaxrs.json.CatalogJsonSimple;
 import com.ning.billing.jaxrs.json.ChargebackJson;
 import com.ning.billing.jaxrs.json.CreditJson;
-import com.ning.billing.jaxrs.json.EntitlementJsonNoEvents;
 import com.ning.billing.jaxrs.json.InvoiceItemJsonSimple;
 import com.ning.billing.jaxrs.json.InvoiceJsonSimple;
 import com.ning.billing.jaxrs.json.InvoiceJsonWithItems;
@@ -59,6 +58,7 @@ import com.ning.billing.jaxrs.json.PaymentMethodJson.PaymentMethodPluginDetailJs
 import com.ning.billing.jaxrs.json.PaymentMethodJson.PaymentMethodProperties;
 import com.ning.billing.jaxrs.json.PlanDetailJson;
 import com.ning.billing.jaxrs.json.RefundJson;
+import com.ning.billing.jaxrs.json.SubscriptionJson;
 import com.ning.billing.jaxrs.json.TenantJson;
 import com.ning.billing.jaxrs.resources.JaxrsResource;
 import com.ning.billing.util.api.AuditLevel;
@@ -374,11 +374,11 @@ public abstract class KillbillClient extends GuicyKillbillTestSuiteWithEmbeddedD
 
 
 
-    protected EntitlementJsonNoEvents createEntitlement(final String accountId, final String bundleExternalKey, final String productName, final String productCategory, final String billingPeriod, final boolean waitCompletion) throws Exception {
+    protected SubscriptionJson createEntitlement(final String accountId, final String bundleExternalKey, final String productName, final String productCategory, final String billingPeriod, final boolean waitCompletion) throws Exception {
 
-        final EntitlementJsonNoEvents input =  new EntitlementJsonNoEvents(accountId, null, null, bundleExternalKey, null ,productName, productCategory,
-                                                                            billingPeriod, PriceListSet.DEFAULT_PRICELIST_NAME,
-                                                                            null, null);
+        final SubscriptionJson input =  new SubscriptionJson(accountId, null, null, bundleExternalKey, null ,productName, productCategory,
+                                                                            billingPeriod, PriceListSet.DEFAULT_PRICELIST_NAME, null, null, null, null, null,
+                                                                            null, null, null);
         String baseJson = mapper.writeValueAsString(input);
 
         final Map<String, String> queryParams = waitCompletion ? getQueryParamsForCallCompletion("5") : DEFAULT_EMPTY_QUERY;
@@ -394,8 +394,7 @@ public abstract class KillbillClient extends GuicyKillbillTestSuiteWithEmbeddedD
         Assert.assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
 
         baseJson = response.getResponseBody();
-        final EntitlementJsonNoEvents objFromJson = mapper.readValue(baseJson, EntitlementJsonNoEvents.class);
-        Assert.assertTrue(objFromJson.equalsNoSubscriptionIdNoStartDateNoCTD(input));
+        final SubscriptionJson objFromJson = mapper.readValue(baseJson, SubscriptionJson.class);
         return objFromJson;
     }
 
@@ -408,7 +407,7 @@ public abstract class KillbillClient extends GuicyKillbillTestSuiteWithEmbeddedD
         assertNotNull(accountJson);
 
         // Add a bundle, subscription and move the clock to get the first invoice
-        final EntitlementJsonNoEvents subscriptionJson = createEntitlement(accountJson.getAccountId(), UUID.randomUUID().toString(), "Shotgun", ProductCategory.BASE.toString(), BillingPeriod.MONTHLY.toString(), true);
+        final SubscriptionJson subscriptionJson = createEntitlement(accountJson.getAccountId(), UUID.randomUUID().toString(), "Shotgun", ProductCategory.BASE.toString(), BillingPeriod.MONTHLY.toString(), true);
         assertNotNull(subscriptionJson);
         clock.addDays(32);
         crappyWaitForLackOfProperSynchonization();
@@ -422,7 +421,7 @@ public abstract class KillbillClient extends GuicyKillbillTestSuiteWithEmbeddedD
         assertNotNull(accountJson);
 
         // Add a bundle, subscription and move the clock to get the first invoice
-        final EntitlementJsonNoEvents subscriptionJson = createEntitlement(accountJson.getAccountId(), UUID.randomUUID().toString(), "Shotgun", ProductCategory.BASE.toString(), BillingPeriod.MONTHLY.toString(), true);
+        final SubscriptionJson subscriptionJson = createEntitlement(accountJson.getAccountId(), UUID.randomUUID().toString(), "Shotgun", ProductCategory.BASE.toString(), BillingPeriod.MONTHLY.toString(), true);
         assertNotNull(subscriptionJson);
         clock.addMonths(1);
         crappyWaitForLackOfProperSynchonization();
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestAccountTimeline.java b/server/src/test/java/com/ning/billing/jaxrs/TestAccountTimeline.java
index bb70b5d..57c4d65 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestAccountTimeline.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestAccountTimeline.java
@@ -35,7 +35,7 @@ import com.ning.billing.jaxrs.json.InvoiceJsonSimple;
 import com.ning.billing.jaxrs.json.PaymentJsonSimple;
 import com.ning.billing.jaxrs.json.PaymentJsonWithBundleKeys;
 import com.ning.billing.jaxrs.json.RefundJson;
-import com.ning.billing.jaxrs.json.SubscriptionJsonWithEvents.SubscriptionReadEventJson;
+import com.ning.billing.jaxrs.json.SubscriptionJson.SubscriptionReadEventJson;
 import com.ning.billing.util.api.AuditLevel;
 import com.ning.billing.util.audit.ChangeType;
 
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestBundle.java b/server/src/test/java/com/ning/billing/jaxrs/TestBundle.java
index 76e38a3..81382c0 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestBundle.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestBundle.java
@@ -31,8 +31,8 @@ import org.testng.annotations.Test;
 import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.jaxrs.json.AccountJson;
-import com.ning.billing.jaxrs.json.BundleJsonNoSubscriptions;
-import com.ning.billing.jaxrs.json.EntitlementJsonNoEvents;
+import com.ning.billing.jaxrs.json.BundleJson;
+import com.ning.billing.jaxrs.json.SubscriptionJson;
 import com.ning.billing.jaxrs.resources.JaxrsResource;
 import com.ning.http.client.Response;
 
@@ -56,7 +56,7 @@ public class TestBundle extends TestJaxrsBase {
         final Response response = doGet(uri, queryParams, DEFAULT_HTTP_TIMEOUT_SEC);
         Assert.assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
         final String baseJson = response.getResponseBody();
-        final BundleJsonNoSubscriptions objFromJson = mapper.readValue(baseJson, BundleJsonNoSubscriptions.class);
+        final BundleJson objFromJson = mapper.readValue(baseJson, BundleJson.class);
     }
 
     @Test(groups = "slow", enabled = true)
@@ -71,11 +71,11 @@ public class TestBundle extends TestJaxrsBase {
         final Response response = doGet(uri, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
         Assert.assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
         final String baseJson = response.getResponseBody();
-        final List<BundleJsonNoSubscriptions> objFromJson = mapper.readValue(baseJson, new TypeReference<List<BundleJsonNoSubscriptions>>() {});
+        final List<BundleJson> objFromJson = mapper.readValue(baseJson, new TypeReference<List<BundleJson>>() {});
 
-        Collections.sort(objFromJson, new Comparator<BundleJsonNoSubscriptions>() {
+        Collections.sort(objFromJson, new Comparator<BundleJson>() {
             @Override
-            public int compare(final BundleJsonNoSubscriptions o1, final BundleJsonNoSubscriptions o2) {
+            public int compare(final BundleJson o1, final BundleJson o2) {
                 return o1.getExternalKey().compareTo(o2.getExternalKey());
             }
         });
@@ -100,7 +100,7 @@ public class TestBundle extends TestJaxrsBase {
         response = doGet(uri, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
         Assert.assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
         final String baseJson = response.getResponseBody();
-        final List<BundleJsonNoSubscriptions> objFromJson = mapper.readValue(baseJson, new TypeReference<List<BundleJsonNoSubscriptions>>() {});
+        final List<BundleJson> objFromJson = mapper.readValue(baseJson, new TypeReference<List<BundleJson>>() {});
         Assert.assertNotNull(objFromJson);
         Assert.assertEquals(objFromJson.size(), 0);
     }
@@ -123,7 +123,7 @@ public class TestBundle extends TestJaxrsBase {
         final String productName = "Shotgun";
         final BillingPeriod term = BillingPeriod.MONTHLY;
 
-        final EntitlementJsonNoEvents entitlementJsonNoEvents = createEntitlement(accountJson.getAccountId(), "93199", productName, ProductCategory.BASE.toString(), term.toString(), true);
+        final SubscriptionJson entitlementJsonNoEvents = createEntitlement(accountJson.getAccountId(), "93199", productName, ProductCategory.BASE.toString(), term.toString(), true);
 
 
         Map<String, String> queryParams = new HashMap<String, String>();
@@ -131,14 +131,14 @@ public class TestBundle extends TestJaxrsBase {
         String uri = JaxrsResource.BUNDLES_PATH;
         Response response = doGet(uri, queryParams, DEFAULT_HTTP_TIMEOUT_SEC);
         Assert.assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
-        final BundleJsonNoSubscriptions originalBundle = mapper.readValue(response.getResponseBody(), BundleJsonNoSubscriptions.class);
+        final BundleJson originalBundle = mapper.readValue(response.getResponseBody(), BundleJson.class);
         assertEquals(originalBundle.getAccountId(), accountJson.getAccountId());
         assertEquals(originalBundle.getExternalKey(), "93199");
 
 
         final AccountJson newAccount = createAccountWithDefaultPaymentMethod("dst", "dst", "dst@yahoo.com");
 
-        final BundleJsonNoSubscriptions newBundleInput = new BundleJsonNoSubscriptions(null, newAccount.getAccountId(), null, null, null);
+        final BundleJson newBundleInput = new BundleJson(null, newAccount.getAccountId(), null, null, null);
         final String newBundleInputJson = mapper.writeValueAsString(newBundleInput);
         uri = JaxrsResource.BUNDLES_PATH + "/" + entitlementJsonNoEvents.getBundleId();
         response = doPut(uri, newBundleInputJson, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
@@ -155,7 +155,7 @@ public class TestBundle extends TestJaxrsBase {
         uri = JaxrsResource.BUNDLES_PATH;
         response = doGet(uri, queryParams, DEFAULT_HTTP_TIMEOUT_SEC);
         Assert.assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
-        final BundleJsonNoSubscriptions newBundle = mapper.readValue(response.getResponseBody(), BundleJsonNoSubscriptions.class);
+        final BundleJson newBundle = mapper.readValue(response.getResponseBody(), BundleJson.class);
 
         assertNotEquals(newBundle.getBundleId(), originalBundle.getBundleId());
         assertEquals(newBundle.getExternalKey(), originalBundle.getExternalKey());
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestChargeback.java b/server/src/test/java/com/ning/billing/jaxrs/TestChargeback.java
index b614b26..4975c17 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestChargeback.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestChargeback.java
@@ -33,9 +33,9 @@ import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.jaxrs.json.AccountJson;
 import com.ning.billing.jaxrs.json.ChargebackCollectionJson;
 import com.ning.billing.jaxrs.json.ChargebackJson;
-import com.ning.billing.jaxrs.json.EntitlementJsonNoEvents;
 import com.ning.billing.jaxrs.json.InvoiceJsonSimple;
 import com.ning.billing.jaxrs.json.PaymentJsonSimple;
+import com.ning.billing.jaxrs.json.SubscriptionJson;
 import com.ning.billing.jaxrs.resources.JaxrsResource;
 import com.ning.http.client.Response;
 
@@ -200,7 +200,7 @@ public class TestChargeback extends TestJaxrsBase {
 
 
         // Create subscription
-        final EntitlementJsonNoEvents subscriptionJson = createEntitlement(accountJson.getAccountId(), "6253283", "Shotgun", ProductCategory.BASE.toString(), BillingPeriod.MONTHLY.toString(), true);
+        final SubscriptionJson subscriptionJson = createEntitlement(accountJson.getAccountId(), "6253283", "Shotgun", ProductCategory.BASE.toString(), BillingPeriod.MONTHLY.toString(), true);
         assertNotNull(subscriptionJson);
 
         // Move after the trial period to trigger an invoice with a non-zero invoice item
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestEntitlement.java b/server/src/test/java/com/ning/billing/jaxrs/TestEntitlement.java
index 330cf26..6b66dbb 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestEntitlement.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestEntitlement.java
@@ -31,7 +31,7 @@ import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.jaxrs.json.AccountJson;
-import com.ning.billing.jaxrs.json.EntitlementJsonNoEvents;
+import com.ning.billing.jaxrs.json.SubscriptionJson;
 import com.ning.billing.jaxrs.resources.JaxrsResource;
 import com.ning.http.client.Response;
 
@@ -54,7 +54,7 @@ public class TestEntitlement extends TestJaxrsBase {
         final String productName = "Shotgun";
         final BillingPeriod term = BillingPeriod.MONTHLY;
 
-        final EntitlementJsonNoEvents entitlementJson = createEntitlement(accountJson.getAccountId(), "99999", productName, ProductCategory.BASE.toString(), term.toString(), true);
+        final SubscriptionJson entitlementJson = createEntitlement(accountJson.getAccountId(), "99999", productName, ProductCategory.BASE.toString(), term.toString(), true);
 
         String uri = JaxrsResource.ENTITLEMENTS_PATH + "/" + entitlementJson.getSubscriptionId();
 
@@ -62,31 +62,36 @@ public class TestEntitlement extends TestJaxrsBase {
         Response response = doGet(uri, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
         assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
         String baseJson = response.getResponseBody();
-        EntitlementJsonNoEvents objFromJson = mapper.readValue(baseJson, EntitlementJsonNoEvents.class);
+        SubscriptionJson objFromJson = mapper.readValue(baseJson, SubscriptionJson.class);
         Assert.assertTrue(objFromJson.equals(entitlementJson));
 
         // Change plan IMM
         final String newProductName = "Assault-Rifle";
 
-        final EntitlementJsonNoEvents newInput = new EntitlementJsonNoEvents(null,
-                                                                             null,
-                                                                             entitlementJson.getSubscriptionId(),
-                                                                             null,
-                                                                             null,
-                                                                             newProductName,
-                                                                             entitlementJson.getProductCategory(),
-                                                                             entitlementJson.getBillingPeriod(),
-                                                                             entitlementJson.getPriceList(),
-                                                                             null,
-                                                                             null);
+        final SubscriptionJson newInput = new SubscriptionJson(null,
+                                                                                   null,
+                                                                                   entitlementJson.getSubscriptionId(),
+                                                                                   null,
+                                                                                   null,
+                                                                                   newProductName,
+                                                                                   entitlementJson.getProductCategory(),
+                                                                                   entitlementJson.getBillingPeriod(),
+                                                                                   entitlementJson.getPriceList(),
+                                                                                   null,
+                                                                                   null,
+                                                                                   null,
+                                                                                   null,
+                                                                                   null,
+                                                                                   null,
+                                                                                   null,
+                                                                                   null);
         baseJson = mapper.writeValueAsString(newInput);
 
         final Map<String, String> queryParams = getQueryParamsForCallCompletion(CALL_COMPLETION_TIMEOUT_SEC);
         response = doPut(uri, baseJson, queryParams, DEFAULT_HTTP_TIMEOUT_SEC);
         assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
         baseJson = response.getResponseBody();
-        objFromJson = mapper.readValue(baseJson, EntitlementJsonNoEvents.class);
-        assertTrue(objFromJson.equalsNoSubscriptionIdNoStartDateNoCTD(newInput));
+        objFromJson = mapper.readValue(baseJson, SubscriptionJson.class);
 
         // MOVE AFTER TRIAL
         final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
@@ -105,7 +110,7 @@ public class TestEntitlement extends TestJaxrsBase {
 
         assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
         baseJson = response.getResponseBody();
-        objFromJson = mapper.readValue(baseJson, EntitlementJsonNoEvents.class);
+        objFromJson = mapper.readValue(baseJson, SubscriptionJson.class);
         assertNotNull(objFromJson.getCancelledDate());
         assertTrue(objFromJson.getCancelledDate().compareTo(new LocalDate(clock.getUTCNow())) == 0);
 
@@ -119,8 +124,8 @@ public class TestEntitlement extends TestJaxrsBase {
     @Test(groups = "slow")
     public void testWithNonExistentEntitlement() throws Exception {
         final String uri = JaxrsResource.ENTITLEMENTS_PATH + "/" + UUID.randomUUID().toString();
-        final EntitlementJsonNoEvents subscriptionJson = new EntitlementJsonNoEvents(null, null, UUID.randomUUID().toString(), null, null, "Pistol", ProductCategory.BASE.toString(), BillingPeriod.MONTHLY.toString(),
-                                                                                     PriceListSet.DEFAULT_PRICELIST_NAME, null, null);
+        final SubscriptionJson subscriptionJson = new SubscriptionJson(null, null, UUID.randomUUID().toString(), null, null, "Pistol", ProductCategory.BASE.toString(), BillingPeriod.MONTHLY.toString(),
+                                                                                           PriceListSet.DEFAULT_PRICELIST_NAME, null, null, null, null, null, null, null, null);
         final String baseJson = mapper.writeValueAsString(subscriptionJson);
 
         Response response = doPut(uri, baseJson, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
@@ -143,36 +148,36 @@ public class TestEntitlement extends TestJaxrsBase {
         final String productName = "Shotgun";
         final BillingPeriod term = BillingPeriod.ANNUAL;
 
-        final EntitlementJsonNoEvents entitlementJsonNoEvents = createEntitlement(accountJson.getAccountId(), "99999", productName, ProductCategory.BASE.toString(), term.toString(), true);
-        final String uri = JaxrsResource.ENTITLEMENTS_PATH + "/" + entitlementJsonNoEvents.getSubscriptionId();
+        final SubscriptionJson SubscriptionJson = createEntitlement(accountJson.getAccountId(), "99999", productName, ProductCategory.BASE.toString(), term.toString(), true);
+        final String uri = JaxrsResource.ENTITLEMENTS_PATH + "/" + SubscriptionJson.getSubscriptionId();
 
         // Retrieves with GET
         Response response = doGet(uri, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
         assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
         String baseJson = response.getResponseBody();
-        EntitlementJsonNoEvents objFromJson = mapper.readValue(baseJson, EntitlementJsonNoEvents.class);
-        Assert.assertTrue(objFromJson.equals(entitlementJsonNoEvents));
+        SubscriptionJson objFromJson = mapper.readValue(baseJson, SubscriptionJson.class);
+        Assert.assertTrue(objFromJson.equals(SubscriptionJson));
         assertEquals(objFromJson.getBillingPeriod(), BillingPeriod.ANNUAL.toString());
 
         // Change billing period immediately
-        final EntitlementJsonNoEvents newInput = new EntitlementJsonNoEvents(null,
-                                                                             null,
-                                                                             entitlementJsonNoEvents.getSubscriptionId(),
-                                                                             null,
-                                                                             null,
-                                                                             entitlementJsonNoEvents.getProductName(),
-                                                                             entitlementJsonNoEvents.getProductCategory(),
-                                                                             BillingPeriod.MONTHLY.toString(),
-                                                                             entitlementJsonNoEvents.getPriceList(),
-                                                                             entitlementJsonNoEvents.getCancelledDate(),
-                                                                             null);
+        final SubscriptionJson newInput = new SubscriptionJson(null,
+                                                                                   null,
+                                                                                   SubscriptionJson.getSubscriptionId(),
+                                                                                   null,
+                                                                                   null,
+                                                                                   SubscriptionJson.getProductName(),
+                                                                                   SubscriptionJson.getProductCategory(),
+                                                                                   BillingPeriod.MONTHLY.toString(),
+                                                                                   SubscriptionJson.getPriceList(),
+                                                                                   SubscriptionJson.getCancelledDate(),
+                                                                                   null, null, null, null, null, null, null);
         baseJson = mapper.writeValueAsString(newInput);
         final Map<String, String> queryParams = getQueryParamsForCallCompletion(CALL_COMPLETION_TIMEOUT_SEC);
         queryParams.put(JaxrsResource.QUERY_BILLING_POLICY, "immediate");
         response = doPut(uri, baseJson, queryParams, DEFAULT_HTTP_TIMEOUT_SEC);
         assertEquals(response.getStatusCode(), Status.OK.getStatusCode());
         baseJson = response.getResponseBody();
-        objFromJson = mapper.readValue(baseJson, EntitlementJsonNoEvents.class);
+        objFromJson = mapper.readValue(baseJson, SubscriptionJson.class);
         assertEquals(objFromJson.getBillingPeriod(), BillingPeriod.MONTHLY.toString());
     }
 }
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestInvoiceNotification.java b/server/src/test/java/com/ning/billing/jaxrs/TestInvoiceNotification.java
index 99772b1..2f1969b 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestInvoiceNotification.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestInvoiceNotification.java
@@ -27,7 +27,7 @@ import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.jaxrs.json.AccountJson;
 import com.ning.billing.jaxrs.json.InvoiceJsonSimple;
-import com.ning.billing.jaxrs.json.EntitlementJsonNoEvents;
+import com.ning.billing.jaxrs.json.SubscriptionJson;
 import com.ning.billing.jaxrs.resources.JaxrsResource;
 import com.ning.http.client.Response;
 
@@ -60,7 +60,7 @@ public class TestInvoiceNotification extends TestJaxrsBase {
         final AccountJson accountJson = createAccountWithDefaultPaymentMethod(UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString());
         Assert.assertNotNull(accountJson);
 
-        final EntitlementJsonNoEvents subscriptionJson = createEntitlement(accountJson.getAccountId(), "76213", "Shotgun", ProductCategory.BASE.toString(), BillingPeriod.MONTHLY.toString(), true);
+        final SubscriptionJson subscriptionJson = createEntitlement(accountJson.getAccountId(), "76213", "Shotgun", ProductCategory.BASE.toString(), BillingPeriod.MONTHLY.toString(), true);
         Assert.assertNotNull(subscriptionJson);
 
         return accountJson;