killbill-uncached

subscription: trivial cleanups in tests No functional change. Signed-off-by:

11/15/2013 10:12:45 AM

Changes

Details

diff --git a/subscription/src/test/java/com/ning/billing/subscription/alignment/TestPlanAligner.java b/subscription/src/test/java/com/ning/billing/subscription/alignment/TestPlanAligner.java
index 1dcdb85..09cb69f 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/alignment/TestPlanAligner.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/alignment/TestPlanAligner.java
@@ -175,10 +175,10 @@ public class TestPlanAligner extends SubscriptionTestSuiteNoDB {
         // Create the transitions
         final DefaultSubscriptionBase defaultSubscriptionBase = new DefaultSubscriptionBase(builder, null, clock);
         final SubscriptionBaseEvent event = createSubscriptionEvent(builder.getAlignStartDate(),
-                                                                productName,
-                                                                phaseType,
-                                                                ApiEventType.CREATE,
-                                                                defaultSubscriptionBase.getActiveVersion());
+                                                                    productName,
+                                                                    phaseType,
+                                                                    ApiEventType.CREATE,
+                                                                    defaultSubscriptionBase.getActiveVersion());
         defaultSubscriptionBase.rebuildTransitions(ImmutableList.<SubscriptionBaseEvent>of(event), catalogService.getFullCatalog());
 
         Assert.assertEquals(defaultSubscriptionBase.getAllTransitions().size(), 1);
@@ -194,15 +194,15 @@ public class TestPlanAligner extends SubscriptionTestSuiteNoDB {
                                     final String newProductName,
                                     final PhaseType commonPhaseType) {
         final SubscriptionBaseEvent previousEvent = createSubscriptionEvent(defaultSubscriptionBase.getStartDate(),
-                                                                        previousProductName,
-                                                                        commonPhaseType,
-                                                                        ApiEventType.CREATE,
-                                                                        defaultSubscriptionBase.getActiveVersion());
+                                                                            previousProductName,
+                                                                            commonPhaseType,
+                                                                            ApiEventType.CREATE,
+                                                                            defaultSubscriptionBase.getActiveVersion());
         final SubscriptionBaseEvent event = createSubscriptionEvent(effectiveChangeDate,
-                                                                newProductName,
-                                                                commonPhaseType,
-                                                                ApiEventType.CHANGE,
-                                                                defaultSubscriptionBase.getActiveVersion());
+                                                                    newProductName,
+                                                                    commonPhaseType,
+                                                                    ApiEventType.CHANGE,
+                                                                    defaultSubscriptionBase.getActiveVersion());
 
         defaultSubscriptionBase.rebuildTransitions(ImmutableList.<SubscriptionBaseEvent>of(previousEvent, event), catalogService.getFullCatalog());
 
@@ -214,10 +214,10 @@ public class TestPlanAligner extends SubscriptionTestSuiteNoDB {
     }
 
     private SubscriptionBaseEvent createSubscriptionEvent(final DateTime effectiveDate,
-                                                      final String productName,
-                                                      final PhaseType phaseType,
-                                                      final ApiEventType apiEventType,
-                                                      final long activeVersion) {
+                                                          final String productName,
+                                                          final PhaseType phaseType,
+                                                          final ApiEventType apiEventType,
+                                                          final long activeVersion) {
         final ApiEventBuilder eventBuilder = new ApiEventBuilder();
         eventBuilder.setEffectiveDate(effectiveDate);
         eventBuilder.setEventPlan(productName);
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/migration/TestMigration.java b/subscription/src/test/java/com/ning/billing/subscription/api/migration/TestMigration.java
index 1a4b0fe..87cb560 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/migration/TestMigration.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/migration/TestMigration.java
@@ -20,7 +20,6 @@ import java.util.List;
 
 import org.joda.time.DateTime;
 import org.joda.time.Interval;
-import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.ning.billing.api.TestApiListener.NextEvent;
@@ -28,307 +27,276 @@ import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.PhaseType;
 import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
 import com.ning.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
+import com.ning.billing.subscription.api.SubscriptionBase;
 import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApi.AccountMigration;
 import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
 import com.ning.billing.subscription.api.user.SubscriptionBaseBundle;
 import com.ning.billing.subscription.api.user.SubscriptionBaseTransition;
 import com.ning.billing.subscription.api.user.SubscriptionBaseTransitionData;
 import com.ning.billing.subscription.events.user.ApiEventType;
-import com.ning.billing.subscription.api.SubscriptionBase;
-import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
 
-
 public class TestMigration extends SubscriptionTestSuiteWithEmbeddedDB {
 
     @Test(groups = "slow")
-    public void testSingleBasePlan() {
-        try {
-            final DateTime startDate = clock.getUTCNow().minusMonths(2);
-            final DateTime beforeMigration = clock.getUTCNow();
-            final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlan(startDate);
-            final DateTime afterMigration = clock.getUTCNow();
-
-            testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
-            migrationApi.migrate(toBeMigrated, callContext);
-            assertListenerStatus();
-
-            final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
-            assertEquals(bundles.size(), 1);
-            final SubscriptionBaseBundle bundle = bundles.get(0);
-
-            final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
-            assertEquals(subscriptions.size(), 1);
-            final SubscriptionBase subscription = subscriptions.get(0);
-            assertTrue(subscription.getStartDate().compareTo(startDate) == 0);
-            assertEquals(subscription.getEndDate(), null);
-            assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
-            assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
-            assertEquals(subscription.getState(), EntitlementState.ACTIVE);
-            assertEquals(subscription.getCurrentPlan().getName(), "shotgun-annual");
-            assertEquals(subscription.getChargedThroughDate(), startDate.plusYears(1));
-
-            assertListenerStatus();
-        } catch (SubscriptionBaseMigrationApiException e) {
-            Assert.fail("", e);
-        }
+    public void testSingleBasePlan() throws SubscriptionBaseMigrationApiException {
+        final DateTime startDate = clock.getUTCNow().minusMonths(2);
+        final DateTime beforeMigration = clock.getUTCNow();
+        final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlan(startDate);
+        final DateTime afterMigration = clock.getUTCNow();
+
+        testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+        migrationApi.migrate(toBeMigrated, callContext);
+        assertListenerStatus();
+
+        final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
+        assertEquals(bundles.size(), 1);
+        final SubscriptionBaseBundle bundle = bundles.get(0);
+
+        final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
+        assertEquals(subscriptions.size(), 1);
+        final SubscriptionBase subscription = subscriptions.get(0);
+        assertTrue(subscription.getStartDate().compareTo(startDate) == 0);
+        assertEquals(subscription.getEndDate(), null);
+        assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+        assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
+        assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+        assertEquals(subscription.getCurrentPlan().getName(), "shotgun-annual");
+        assertEquals(subscription.getChargedThroughDate(), startDate.plusYears(1));
+
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testPlanWithAddOn() {
-        try {
-            final DateTime beforeMigration = clock.getUTCNow();
-            final DateTime initalBPStart = clock.getUTCNow().minusMonths(3);
-            final DateTime initalAddonStart = clock.getUTCNow().minusMonths(1).plusDays(7);
-            final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlanAndAddons(initalBPStart, initalAddonStart);
-            final DateTime afterMigration = clock.getUTCNow();
-
-            testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
-            testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
-            migrationApi.migrate(toBeMigrated, callContext);
-            assertListenerStatus();
-
-            final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
-            assertEquals(bundles.size(), 1);
-            final SubscriptionBaseBundle bundle = bundles.get(0);
-
-            final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
-            assertEquals(subscriptions.size(), 2);
-
-            final SubscriptionBase baseSubscription = (subscriptions.get(0).getCurrentPlan().getProduct().getCategory() == ProductCategory.BASE) ?
+    public void testPlanWithAddOn() throws SubscriptionBaseMigrationApiException {
+        final DateTime beforeMigration = clock.getUTCNow();
+        final DateTime initalBPStart = clock.getUTCNow().minusMonths(3);
+        final DateTime initalAddonStart = clock.getUTCNow().minusMonths(1).plusDays(7);
+        final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlanAndAddons(initalBPStart, initalAddonStart);
+        final DateTime afterMigration = clock.getUTCNow();
+
+        testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+        testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+        migrationApi.migrate(toBeMigrated, callContext);
+        assertListenerStatus();
+
+        final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
+        assertEquals(bundles.size(), 1);
+        final SubscriptionBaseBundle bundle = bundles.get(0);
+
+        final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
+        assertEquals(subscriptions.size(), 2);
+
+        final SubscriptionBase baseSubscription = (subscriptions.get(0).getCurrentPlan().getProduct().getCategory() == ProductCategory.BASE) ?
                                                   subscriptions.get(0) : subscriptions.get(1);
-            assertTrue(baseSubscription.getStartDate().compareTo(initalBPStart) == 0);
-            assertEquals(baseSubscription.getEndDate(), null);
-            assertEquals(baseSubscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
-            assertEquals(baseSubscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
-            assertEquals(baseSubscription.getState(), EntitlementState.ACTIVE);
-            assertEquals(baseSubscription.getCurrentPlan().getName(), "shotgun-annual");
-            assertEquals(baseSubscription.getChargedThroughDate(), initalBPStart.plusYears(1));
-
-            final SubscriptionBase aoSubscription = (subscriptions.get(0).getCurrentPlan().getProduct().getCategory() == ProductCategory.ADD_ON) ?
+        assertTrue(baseSubscription.getStartDate().compareTo(initalBPStart) == 0);
+        assertEquals(baseSubscription.getEndDate(), null);
+        assertEquals(baseSubscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+        assertEquals(baseSubscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
+        assertEquals(baseSubscription.getState(), EntitlementState.ACTIVE);
+        assertEquals(baseSubscription.getCurrentPlan().getName(), "shotgun-annual");
+        assertEquals(baseSubscription.getChargedThroughDate(), initalBPStart.plusYears(1));
+
+        final SubscriptionBase aoSubscription = (subscriptions.get(0).getCurrentPlan().getProduct().getCategory() == ProductCategory.ADD_ON) ?
                                                 subscriptions.get(0) : subscriptions.get(1);
-            // initalAddonStart.plusMonths(1).minusMonths(1) may be different from initalAddonStart, depending on exact date
-            // e.g : March 31 + 1 month => April 30 and April 30 - 1 month = March 30 which is != March 31 !!!!
-            assertEquals(aoSubscription.getStartDate(), initalAddonStart.plusMonths(1).minusMonths(1));
-            assertEquals(aoSubscription.getEndDate(), null);
-            assertEquals(aoSubscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
-            assertEquals(aoSubscription.getCurrentPhase().getPhaseType(), PhaseType.DISCOUNT);
-            assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
-            assertEquals(aoSubscription.getCurrentPlan().getName(), "telescopic-scope-monthly");
-            assertEquals(aoSubscription.getChargedThroughDate(), initalAddonStart.plusMonths(1));
-
-            assertListenerStatus();
-        } catch (SubscriptionBaseMigrationApiException e) {
-            Assert.fail("", e);
-        }
+        // initalAddonStart.plusMonths(1).minusMonths(1) may be different from initalAddonStart, depending on exact date
+        // e.g : March 31 + 1 month => April 30 and April 30 - 1 month = March 30 which is != March 31 !!!!
+        assertEquals(aoSubscription.getStartDate(), initalAddonStart.plusMonths(1).minusMonths(1));
+        assertEquals(aoSubscription.getEndDate(), null);
+        assertEquals(aoSubscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+        assertEquals(aoSubscription.getCurrentPhase().getPhaseType(), PhaseType.DISCOUNT);
+        assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+        assertEquals(aoSubscription.getCurrentPlan().getName(), "telescopic-scope-monthly");
+        assertEquals(aoSubscription.getChargedThroughDate(), initalAddonStart.plusMonths(1));
+
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testSingleBasePlanFutureCancelled() {
-
-        try {
-            final DateTime startDate = clock.getUTCNow().minusMonths(1);
-            final DateTime beforeMigration = clock.getUTCNow();
-            final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlanFutreCancelled(startDate);
-            final DateTime afterMigration = clock.getUTCNow();
-
-            testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
-            migrationApi.migrate(toBeMigrated, callContext);
-            assertListenerStatus();
-
-            final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
-            assertEquals(bundles.size(), 1);
-            final SubscriptionBaseBundle bundle = bundles.get(0);
-            //assertEquals(bundle.getStartDate(), effectiveDate);
-
-            final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
-            assertEquals(subscriptions.size(), 1);
-            final SubscriptionBase subscription = subscriptions.get(0);
-            assertTrue(subscription.getStartDate().compareTo(startDate) == 0);
-            assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
-            assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
-            assertEquals(subscription.getState(), EntitlementState.ACTIVE);
-            assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-annual");
-            assertEquals(subscription.getChargedThroughDate(), startDate.plusYears(1));
-
-            // The MIGRATE_BILLING will not be there because the subscription is cancelled at the same date so no BILLING should occur
-            //testListener.pushExpectedEvent(NextEvent.MIGRATE_BILLING);
-            testListener.pushExpectedEvent(NextEvent.CANCEL);
-
-            final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusYears(1));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-            assertTrue(subscription.getStartDate().compareTo(startDate) == 0);
-            assertNotNull(subscription.getEndDate());
-            assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
-            assertEquals(subscription.getCurrentPhase(), null);
-            assertEquals(subscription.getState(), EntitlementState.CANCELLED);
-            assertNull(subscription.getCurrentPlan());
-
-            assertListenerStatus();
-        } catch (SubscriptionBaseMigrationApiException e) {
-            Assert.fail("", e);
-        }
+    public void testSingleBasePlanFutureCancelled() throws SubscriptionBaseMigrationApiException {
+        final DateTime startDate = clock.getUTCNow().minusMonths(1);
+        final DateTime beforeMigration = clock.getUTCNow();
+        final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlanFutreCancelled(startDate);
+        final DateTime afterMigration = clock.getUTCNow();
+
+        testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+        migrationApi.migrate(toBeMigrated, callContext);
+        assertListenerStatus();
+
+        final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
+        assertEquals(bundles.size(), 1);
+        final SubscriptionBaseBundle bundle = bundles.get(0);
+        //assertEquals(bundle.getStartDate(), effectiveDate);
+
+        final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
+        assertEquals(subscriptions.size(), 1);
+        final SubscriptionBase subscription = subscriptions.get(0);
+        assertTrue(subscription.getStartDate().compareTo(startDate) == 0);
+        assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+        assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
+        assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+        assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-annual");
+        assertEquals(subscription.getChargedThroughDate(), startDate.plusYears(1));
+
+        // The MIGRATE_BILLING will not be there because the subscription is cancelled at the same date so no BILLING should occur
+        //testListener.pushExpectedEvent(NextEvent.MIGRATE_BILLING);
+        testListener.pushExpectedEvent(NextEvent.CANCEL);
+
+        final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusYears(1));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        assertTrue(subscription.getStartDate().compareTo(startDate) == 0);
+        assertNotNull(subscription.getEndDate());
+        assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+        assertEquals(subscription.getCurrentPhase(), null);
+        assertEquals(subscription.getState(), EntitlementState.CANCELLED);
+        assertNull(subscription.getCurrentPlan());
+
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testSingleBasePlanWithPendingPhase() {
-        try {
-            final DateTime trialDate = clock.getUTCNow().minusDays(10);
-            final AccountMigration toBeMigrated = testUtil.createAccountForMigrationFuturePendingPhase(trialDate);
-
-            testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
-            migrationApi.migrate(toBeMigrated, callContext);
-            assertListenerStatus();
-
-            final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
-            assertEquals(bundles.size(), 1);
-            final SubscriptionBaseBundle bundle = bundles.get(0);
-
-            final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
-            assertEquals(subscriptions.size(), 1);
-            final SubscriptionBase subscription = subscriptions.get(0);
-
-            assertEquals(subscription.getStartDate(), trialDate);
-            assertEquals(subscription.getEndDate(), null);
-            assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
-            assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.TRIAL);
-            assertEquals(subscription.getState(), EntitlementState.ACTIVE);
-            assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-monthly");
-            assertEquals(subscription.getChargedThroughDate(), trialDate.plusDays(30));
-
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            testListener.pushExpectedEvent(NextEvent.MIGRATE_BILLING);
-
-            final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(30));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-            assertEquals(subscription.getStartDate(), trialDate);
-            assertEquals(subscription.getEndDate(), null);
-            assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
-            assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
-            assertEquals(subscription.getState(), EntitlementState.ACTIVE);
-            assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-monthly");
-            assertEquals(subscription.getCurrentPhase().getName(), "assault-rifle-monthly-evergreen");
-
-            assertListenerStatus();
-        } catch (SubscriptionBaseMigrationApiException e) {
-            Assert.fail("", e);
-        }
+    public void testSingleBasePlanWithPendingPhase() throws SubscriptionBaseMigrationApiException {
+        final DateTime trialDate = clock.getUTCNow().minusDays(10);
+        final AccountMigration toBeMigrated = testUtil.createAccountForMigrationFuturePendingPhase(trialDate);
+
+        testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+        migrationApi.migrate(toBeMigrated, callContext);
+        assertListenerStatus();
+
+        final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
+        assertEquals(bundles.size(), 1);
+        final SubscriptionBaseBundle bundle = bundles.get(0);
+
+        final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
+        assertEquals(subscriptions.size(), 1);
+        final SubscriptionBase subscription = subscriptions.get(0);
+
+        assertEquals(subscription.getStartDate(), trialDate);
+        assertEquals(subscription.getEndDate(), null);
+        assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+        assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.TRIAL);
+        assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+        assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-monthly");
+        assertEquals(subscription.getChargedThroughDate(), trialDate.plusDays(30));
+
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        testListener.pushExpectedEvent(NextEvent.MIGRATE_BILLING);
+
+        final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(30));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        assertEquals(subscription.getStartDate(), trialDate);
+        assertEquals(subscription.getEndDate(), null);
+        assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+        assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
+        assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+        assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-monthly");
+        assertEquals(subscription.getCurrentPhase().getName(), "assault-rifle-monthly-evergreen");
+
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testSingleBasePlanWithPendingChange() {
-        try {
-            final DateTime beforeMigration = clock.getUTCNow();
-            final AccountMigration toBeMigrated = testUtil.createAccountForMigrationFuturePendingChange();
-            final DateTime afterMigration = clock.getUTCNow();
-
-            testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
-            migrationApi.migrate(toBeMigrated, callContext);
-            assertListenerStatus();
-
-            final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
-            assertEquals(bundles.size(), 1);
-            final SubscriptionBaseBundle bundle = bundles.get(0);
-
-            final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
-            assertEquals(subscriptions.size(), 1);
-            final SubscriptionBase subscription = subscriptions.get(0);
-            //assertDateWithin(subscription.getStartDate(), beforeMigration, afterMigration);
-            assertEquals(subscription.getEndDate(), null);
-            assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
-            assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
-            assertEquals(subscription.getState(), EntitlementState.ACTIVE);
-            assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-monthly");
-
-            testListener.pushExpectedEvent(NextEvent.CHANGE);
-            testListener.pushExpectedEvent(NextEvent.MIGRATE_BILLING);
-
-            final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-            //assertDateWithin(subscription.getStartDate(), beforeMigration, afterMigration);
-            assertEquals(subscription.getEndDate(), null);
-            assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
-
-            assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
-            assertEquals(subscription.getState(), EntitlementState.ACTIVE);
-            assertEquals(subscription.getCurrentPlan().getName(), "shotgun-annual");
-
-            assertListenerStatus();
-
-        } catch (SubscriptionBaseMigrationApiException e) {
-            Assert.fail("", e);
-        }
+    public void testSingleBasePlanWithPendingChange() throws SubscriptionBaseMigrationApiException {
+        final DateTime beforeMigration = clock.getUTCNow();
+        final AccountMigration toBeMigrated = testUtil.createAccountForMigrationFuturePendingChange();
+        final DateTime afterMigration = clock.getUTCNow();
+
+        testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+        migrationApi.migrate(toBeMigrated, callContext);
+        assertListenerStatus();
+
+        final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
+        assertEquals(bundles.size(), 1);
+        final SubscriptionBaseBundle bundle = bundles.get(0);
+
+        final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
+        assertEquals(subscriptions.size(), 1);
+        final SubscriptionBase subscription = subscriptions.get(0);
+        //assertDateWithin(subscription.getStartDate(), beforeMigration, afterMigration);
+        assertEquals(subscription.getEndDate(), null);
+        assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+        assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
+        assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+        assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-monthly");
+
+        testListener.pushExpectedEvent(NextEvent.CHANGE);
+        testListener.pushExpectedEvent(NextEvent.MIGRATE_BILLING);
+
+        final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        //assertDateWithin(subscription.getStartDate(), beforeMigration, afterMigration);
+        assertEquals(subscription.getEndDate(), null);
+        assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+
+        assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
+        assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+        assertEquals(subscription.getCurrentPlan().getName(), "shotgun-annual");
+
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
     public void testChangePriorMigrateBilling() throws Exception {
-        try {
-            final DateTime startDate = clock.getUTCNow().minusMonths(2);
-            final DateTime beforeMigration = clock.getUTCNow();
-            final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlan(startDate);
-            final DateTime afterMigration = clock.getUTCNow();
-
-            testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
-            migrationApi.migrate(toBeMigrated, callContext);
-            assertListenerStatus();
-
-            final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
-            assertEquals(bundles.size(), 1);
-
-            final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundles.get(0).getId(), internalCallContext);
-            assertEquals(subscriptions.size(), 1);
-            final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptions.get(0);
-
-            final List<SubscriptionBaseTransition> transitions = subscription.getAllTransitions();
-            assertEquals(transitions.size(), 2);
-            final SubscriptionBaseTransitionData initialMigrateBilling = (SubscriptionBaseTransitionData) transitions.get(1);
-            assertEquals(initialMigrateBilling.getApiEventType(), ApiEventType.MIGRATE_BILLING);
-            assertTrue(initialMigrateBilling.getEffectiveTransitionTime().compareTo(subscription.getChargedThroughDate()) == 0);
-            assertEquals(initialMigrateBilling.getNextPlan().getName(), "shotgun-annual");
-            assertEquals(initialMigrateBilling.getNextPhase().getName(), "shotgun-annual-evergreen");
-
-            final List<SubscriptionBaseTransition> billingTransitions = subscription.getBillingTransitions();
-            assertEquals(billingTransitions.size(), 1);
-            assertEquals(billingTransitions.get(0), initialMigrateBilling);
-
-            // Now make an IMMEDIATE change of plan
-            testListener.pushExpectedEvent(NextEvent.CHANGE);
-            subscription.changePlanWithDate("Assault-Rifle", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow(), callContext);
-            assertListenerStatus();
-
-            final List<SubscriptionBaseTransition> newTransitions = subscription.getAllTransitions();
-            assertEquals(newTransitions.size(), 3);
-
-            final SubscriptionBaseTransitionData changeTransition = (SubscriptionBaseTransitionData) newTransitions.get(1);
-            assertEquals(changeTransition.getApiEventType(), ApiEventType.CHANGE);
-
-            final SubscriptionBaseTransitionData newMigrateBilling = (SubscriptionBaseTransitionData) newTransitions.get(2);
-            assertEquals(newMigrateBilling.getApiEventType(), ApiEventType.MIGRATE_BILLING);
-            assertTrue(newMigrateBilling.getEffectiveTransitionTime().compareTo(subscription.getChargedThroughDate()) == 0);
-            assertTrue(newMigrateBilling.getEffectiveTransitionTime().compareTo(initialMigrateBilling.getEffectiveTransitionTime()) == 0);
-            assertEquals(newMigrateBilling.getNextPlan().getName(), "assault-rifle-monthly");
-            assertEquals(newMigrateBilling.getNextPhase().getName(), "assault-rifle-monthly-evergreen");
-
-
-            final List<SubscriptionBaseTransition> newBillingTransitions = subscription.getBillingTransitions();
-            assertEquals(newBillingTransitions.size(), 1);
-            assertEquals(newBillingTransitions.get(0), newMigrateBilling);
-
-
-        } catch (SubscriptionBaseMigrationApiException e) {
-            Assert.fail("", e);
-        }
-
+        final DateTime startDate = clock.getUTCNow().minusMonths(2);
+        final DateTime beforeMigration = clock.getUTCNow();
+        final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlan(startDate);
+        final DateTime afterMigration = clock.getUTCNow();
+
+        testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+        migrationApi.migrate(toBeMigrated, callContext);
+        assertListenerStatus();
+
+        final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
+        assertEquals(bundles.size(), 1);
+
+        final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundles.get(0).getId(), internalCallContext);
+        assertEquals(subscriptions.size(), 1);
+        final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptions.get(0);
+
+        final List<SubscriptionBaseTransition> transitions = subscription.getAllTransitions();
+        assertEquals(transitions.size(), 2);
+        final SubscriptionBaseTransitionData initialMigrateBilling = (SubscriptionBaseTransitionData) transitions.get(1);
+        assertEquals(initialMigrateBilling.getApiEventType(), ApiEventType.MIGRATE_BILLING);
+        assertTrue(initialMigrateBilling.getEffectiveTransitionTime().compareTo(subscription.getChargedThroughDate()) == 0);
+        assertEquals(initialMigrateBilling.getNextPlan().getName(), "shotgun-annual");
+        assertEquals(initialMigrateBilling.getNextPhase().getName(), "shotgun-annual-evergreen");
+
+        final List<SubscriptionBaseTransition> billingTransitions = subscription.getBillingTransitions();
+        assertEquals(billingTransitions.size(), 1);
+        assertEquals(billingTransitions.get(0), initialMigrateBilling);
+
+        // Now make an IMMEDIATE change of plan
+        testListener.pushExpectedEvent(NextEvent.CHANGE);
+        subscription.changePlanWithDate("Assault-Rifle", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow(), callContext);
+        assertListenerStatus();
+
+        final List<SubscriptionBaseTransition> newTransitions = subscription.getAllTransitions();
+        assertEquals(newTransitions.size(), 3);
+
+        final SubscriptionBaseTransitionData changeTransition = (SubscriptionBaseTransitionData) newTransitions.get(1);
+        assertEquals(changeTransition.getApiEventType(), ApiEventType.CHANGE);
+
+        final SubscriptionBaseTransitionData newMigrateBilling = (SubscriptionBaseTransitionData) newTransitions.get(2);
+        assertEquals(newMigrateBilling.getApiEventType(), ApiEventType.MIGRATE_BILLING);
+        assertTrue(newMigrateBilling.getEffectiveTransitionTime().compareTo(subscription.getChargedThroughDate()) == 0);
+        assertTrue(newMigrateBilling.getEffectiveTransitionTime().compareTo(initialMigrateBilling.getEffectiveTransitionTime()) == 0);
+        assertEquals(newMigrateBilling.getNextPlan().getName(), "assault-rifle-monthly");
+        assertEquals(newMigrateBilling.getNextPhase().getName(), "assault-rifle-monthly-evergreen");
+
+        final List<SubscriptionBaseTransition> newBillingTransitions = subscription.getBillingTransitions();
+        assertEquals(newBillingTransitions.size(), 1);
+        assertEquals(newBillingTransitions.get(0), newMigrateBilling);
     }
 }
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairBP.java b/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairBP.java
index 54ce65a..c430a3c 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairBP.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairBP.java
@@ -34,18 +34,18 @@ import com.ning.billing.catalog.api.PlanPhase;
 import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
 import com.ning.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
+import com.ning.billing.subscription.api.SubscriptionBase;
 import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
-import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
-import com.ning.billing.subscription.api.user.SubscriptionEvents;
-import com.ning.billing.subscription.api.user.TestSubscriptionHelper.TestWithException;
-import com.ning.billing.subscription.api.user.TestSubscriptionHelper.TestWithExceptionCallback;
 import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.DeletedEvent;
 import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.ExistingEvent;
 import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.NewEvent;
-import com.ning.billing.subscription.api.SubscriptionBase;
-import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
+import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
 import com.ning.billing.subscription.api.user.SubscriptionBaseApiException;
+import com.ning.billing.subscription.api.user.SubscriptionEvents;
+import com.ning.billing.subscription.api.user.TestSubscriptionHelper.TestWithException;
+import com.ning.billing.subscription.api.user.TestSubscriptionHelper.TestWithExceptionCallback;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithAO.java b/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithAO.java
index 5e457b8..9a6bd0e 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithAO.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithAO.java
@@ -32,22 +32,20 @@ import com.ning.billing.catalog.api.PlanPhase;
 import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
 import com.ning.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
 import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
-import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
-import com.ning.billing.subscription.api.user.SubscriptionEvents;
 import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.DeletedEvent;
 import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.ExistingEvent;
 import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.NewEvent;
-import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
+import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
+import com.ning.billing.subscription.api.user.SubscriptionEvents;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
 
 public class TestRepairWithAO extends SubscriptionTestSuiteWithEmbeddedDB {
 
-
     @Test(groups = "slow")
     public void testRepairChangeBPWithAddonIncluded() throws Exception {
         final String baseProduct = "Shotgun";
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithError.java b/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithError.java
index 7423bbe..7a04168 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithError.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithError.java
@@ -34,17 +34,16 @@ import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.subscription.SubscriptionTestSuiteNoDB;
+import com.ning.billing.subscription.api.SubscriptionBase;
 import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
-import com.ning.billing.subscription.api.user.SubscriptionBaseApiException;
+import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.DeletedEvent;
+import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.NewEvent;
 import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
+import com.ning.billing.subscription.api.user.SubscriptionBaseApiException;
 import com.ning.billing.subscription.api.user.TestSubscriptionHelper.TestWithException;
 import com.ning.billing.subscription.api.user.TestSubscriptionHelper.TestWithExceptionCallback;
-import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.DeletedEvent;
-import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.NewEvent;
-import com.ning.billing.subscription.api.SubscriptionBase;
 
-import static org.testng.Assert.assertTrue;
-import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.Assert.assertEquals;
 
 public class TestRepairWithError extends SubscriptionTestSuiteNoDB {
 
@@ -53,7 +52,7 @@ public class TestRepairWithError extends SubscriptionTestSuiteNoDB {
     private SubscriptionBase baseSubscription;
 
     @Override
-    @BeforeMethod(alwaysRun = true)
+    @BeforeMethod(groups = "fast")
     public void beforeMethod() throws Exception {
         super.beforeMethod();
         test = new TestWithException();
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java b/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java
index d144351..d296dc1 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java
@@ -36,6 +36,7 @@ import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.subscription.SubscriptionTestSuiteNoDB;
 import com.ning.billing.subscription.api.SubscriptionBaseApiService;
 import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
+import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.ExistingEvent;
 import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimelineApi;
 import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
 import com.ning.billing.subscription.api.user.SubscriptionBuilder;
@@ -44,7 +45,6 @@ import com.ning.billing.subscription.events.SubscriptionBaseEvent;
 import com.ning.billing.subscription.events.SubscriptionBaseEvent.EventType;
 import com.ning.billing.subscription.events.user.ApiEventTransfer;
 import com.ning.billing.subscription.events.user.ApiEventType;
-import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.ExistingEvent;
 import com.ning.billing.util.cache.CacheControllerDispatcher;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.dao.NonEntityDao;
@@ -159,7 +159,7 @@ public class TestDefaultSubscriptionTransferApi extends SubscriptionTestSuiteNoD
     }
 
     private List<SubscriptionBaseEvent> transferBundle(final DateTime migrateSubscriptionEventEffectiveDate, final DateTime migrateBillingEventEffectiveDate,
-                                                  final DateTime transferDate) throws SubscriptionBaseTransferApiException {
+                                                       final DateTime transferDate) throws SubscriptionBaseTransferApiException {
         final ImmutableList<ExistingEvent> existingEvents = createMigrateEvents(migrateSubscriptionEventEffectiveDate, migrateBillingEventEffectiveDate);
         final SubscriptionBuilder subscriptionBuilder = new SubscriptionBuilder();
         final DefaultSubscriptionBase subscription = new DefaultSubscriptionBase(subscriptionBuilder);
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestTransfer.java b/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestTransfer.java
index 6704bb1..62cf563 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestTransfer.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestTransfer.java
@@ -33,12 +33,11 @@ import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.api.Product;
 import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
 import com.ning.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
+import com.ning.billing.subscription.api.SubscriptionBase;
+import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
 import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApi.AccountMigration;
-import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApiException;
 import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
 import com.ning.billing.subscription.api.user.SubscriptionBaseBundle;
-import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
-import com.ning.billing.subscription.api.SubscriptionBase;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotEquals;
@@ -50,75 +49,64 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
 
     protected static final Logger log = LoggerFactory.getLogger(TestTransfer.class);
 
-
-    @Test(groups = "slow", enabled = true)
+    @Test(groups = "slow")
     public void testTransferMigratedSubscriptionWithCTDInFuture() throws Exception {
-
         final UUID newAccountId = UUID.randomUUID();
 
-        try {
-            final DateTime startDate = clock.getUTCNow().minusMonths(2);
-            final DateTime beforeMigration = clock.getUTCNow();
-            final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlan(startDate);
-            final DateTime afterMigration = clock.getUTCNow();
-
-            testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
-            migrationApi.migrate(toBeMigrated, callContext);
-            assertListenerStatus();
-
-            final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
-            assertEquals(bundles.size(), 1);
-            final SubscriptionBaseBundle bundle = bundles.get(0);
-
-            final DateTime bundleCreatedDate = bundle.getCreatedDate();
-
-            final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
-            assertEquals(subscriptions.size(), 1);
-            final SubscriptionBase subscription = subscriptions.get(0);
-            testUtil.assertDateWithin(subscription.getStartDate(), beforeMigration.minusMonths(2), afterMigration.minusMonths(2));
-            assertEquals(subscription.getEndDate(), null);
-            assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
-            assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
-            assertEquals(subscription.getState(), EntitlementState.ACTIVE);
-            assertEquals(subscription.getCurrentPlan().getName(), "shotgun-annual");
-            assertEquals(subscription.getChargedThroughDate(), startDate.plusYears(1));
-            // WE should see MIGRATE_ENTITLEMENT and then MIGRATE_BILLING in the future
-            assertEquals(subscriptionInternalApi.getBillingTransitions(subscription, internalCallContext).size(), 1);
-            assertEquals(subscriptionInternalApi.getBillingTransitions(subscription, internalCallContext).get(0).getTransitionType(), SubscriptionBaseTransitionType.MIGRATE_BILLING);
-            assertTrue(subscriptionInternalApi.getBillingTransitions(subscription, internalCallContext).get(0).getEffectiveTransitionTime().compareTo(clock.getUTCNow()) > 0);
-            assertListenerStatus();
-
-
-            // MOVE A LITTLE, STILL IN TRIAL
-            clock.addDays(20);
-
-            final DateTime transferRequestedDate = clock.getUTCNow();
-
-            testListener.pushExpectedEvent(NextEvent.TRANSFER);
-            testListener.pushExpectedEvent(NextEvent.CANCEL);
-            transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getExternalKey(), transferRequestedDate, false, true, callContext);
-            assertListenerStatus();
-
-            final SubscriptionBase oldBaseSubscription = subscriptionInternalApi.getBaseSubscription(bundle.getId(), internalCallContext);
-            assertTrue(oldBaseSubscription.getState() == EntitlementState.CANCELLED);
-            // The MIGRATE_BILLING event should have been invalidated
-            assertEquals(subscriptionInternalApi.getBillingTransitions(oldBaseSubscription, internalCallContext).size(), 0);
-            //assertEquals(subscriptionInternalApi.getBillingTransitions(oldBaseSubscription, internalCallContext).get(0).getTransitionType(), SubscriptionBaseTransitionType.CANCEL);
-
-            final SubscriptionBaseBundle newBundle = subscriptionInternalApi.getActiveBundleForKey(bundle.getExternalKey(), internalCallContext);
-            assertNotEquals(newBundle.getId(), bundle.getId());
-            assertEquals(newBundle.getOriginalCreatedDate().compareTo(bundleCreatedDate), 0);
-
-        } catch (SubscriptionBaseMigrationApiException e) {
-            Assert.fail("", e);
-        }
+        final DateTime startDate = clock.getUTCNow().minusMonths(2);
+        final DateTime beforeMigration = clock.getUTCNow();
+        final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlan(startDate);
+        final DateTime afterMigration = clock.getUTCNow();
+
+        testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+        migrationApi.migrate(toBeMigrated, callContext);
+        assertListenerStatus();
 
+        final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
+        assertEquals(bundles.size(), 1);
+        final SubscriptionBaseBundle bundle = bundles.get(0);
+
+        final DateTime bundleCreatedDate = bundle.getCreatedDate();
+
+        final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
+        assertEquals(subscriptions.size(), 1);
+        final SubscriptionBase subscription = subscriptions.get(0);
+        testUtil.assertDateWithin(subscription.getStartDate(), beforeMigration.minusMonths(2), afterMigration.minusMonths(2));
+        assertEquals(subscription.getEndDate(), null);
+        assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+        assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
+        assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+        assertEquals(subscription.getCurrentPlan().getName(), "shotgun-annual");
+        assertEquals(subscription.getChargedThroughDate(), startDate.plusYears(1));
+        // WE should see MIGRATE_ENTITLEMENT and then MIGRATE_BILLING in the future
+        assertEquals(subscriptionInternalApi.getBillingTransitions(subscription, internalCallContext).size(), 1);
+        assertEquals(subscriptionInternalApi.getBillingTransitions(subscription, internalCallContext).get(0).getTransitionType(), SubscriptionBaseTransitionType.MIGRATE_BILLING);
+        assertTrue(subscriptionInternalApi.getBillingTransitions(subscription, internalCallContext).get(0).getEffectiveTransitionTime().compareTo(clock.getUTCNow()) > 0);
+        assertListenerStatus();
+
+        // MOVE A LITTLE, STILL IN TRIAL
+        clock.addDays(20);
+
+        final DateTime transferRequestedDate = clock.getUTCNow();
 
+        testListener.pushExpectedEvent(NextEvent.TRANSFER);
+        testListener.pushExpectedEvent(NextEvent.CANCEL);
+        transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getExternalKey(), transferRequestedDate, false, true, callContext);
+        assertListenerStatus();
+
+        final SubscriptionBase oldBaseSubscription = subscriptionInternalApi.getBaseSubscription(bundle.getId(), internalCallContext);
+        assertTrue(oldBaseSubscription.getState() == EntitlementState.CANCELLED);
+        // The MIGRATE_BILLING event should have been invalidated
+        assertEquals(subscriptionInternalApi.getBillingTransitions(oldBaseSubscription, internalCallContext).size(), 0);
+        //assertEquals(subscriptionInternalApi.getBillingTransitions(oldBaseSubscription, internalCallContext).get(0).getTransitionType(), SubscriptionBaseTransitionType.CANCEL);
+
+        final SubscriptionBaseBundle newBundle = subscriptionInternalApi.getActiveBundleForKey(bundle.getExternalKey(), internalCallContext);
+        assertNotEquals(newBundle.getId(), bundle.getId());
+        assertEquals(newBundle.getOriginalCreatedDate().compareTo(bundleCreatedDate), 0);
     }
 
     @Test(groups = "slow")
     public void testTransferBPInTrialWithNoCTD() throws Exception {
-
         final UUID newAccountId = UUID.randomUUID();
 
         final String baseProduct = "Shotgun";
@@ -168,10 +156,8 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
         assertEquals(newBaseSubscription.getCurrentPhase().getPhaseType(), PhaseType.TRIAL);
     }
 
-
     @Test(groups = "slow")
     public void testTransferBPInTrialWithCTD() throws Exception {
-
         final UUID newAccountId = UUID.randomUUID();
 
         final String baseProduct = "Shotgun";
@@ -220,10 +206,8 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
         assertEquals(newBaseSubscription.getCurrentPhase().getPhaseType(), PhaseType.TRIAL);
     }
 
-
     @Test(groups = "slow")
     public void testTransferBPNoTrialWithNoCTD() throws Exception {
-
         final UUID newAccountId = UUID.randomUUID();
 
         final String baseProduct = "Shotgun";
@@ -273,7 +257,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
 
     @Test(groups = "slow")
     public void testTransferBPNoTrialWithCTD() throws Exception {
-
         final UUID newAccountId = UUID.randomUUID();
 
         final String baseProduct = "Shotgun";
@@ -292,7 +275,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
         final DateTime ctd = baseSubscription.getStartDate().plusDays(30).plusMonths(1);
         subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), ctd, internalCallContext);
 
-
         final DateTime transferRequestedDate = clock.getUTCNow();
         testListener.pushExpectedEvent(NextEvent.TRANSFER);
         transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getExternalKey(), transferRequestedDate, false, false, callContext);
@@ -326,7 +308,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
 
         final String newBaseProduct1 = "Assault-Rifle";
         final BillingPeriod newBaseTerm1 = BillingPeriod.ANNUAL;
-        final DateTime changeDate1 = clock.getUTCNow();
         testListener.pushExpectedEvent(NextEvent.CHANGE);
         newBaseSubscription.changePlan(newBaseProduct1, newBaseTerm1, basePriceList, callContext);
         assertListenerStatus();
@@ -344,20 +325,18 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
 
         final String newBaseProduct2 = "Pistol";
         final BillingPeriod newBaseTerm2 = BillingPeriod.ANNUAL;
-        final DateTime changeDate2 = clock.getUTCNow();
         newBaseSubscriptionWithCtd.changePlan(newBaseProduct2, newBaseTerm2, basePriceList, callContext);
 
         newPlan = newBaseSubscriptionWithCtd.getCurrentPlan();
         assertEquals(newPlan.getProduct().getName(), newBaseProduct1);
         assertEquals(newBaseSubscriptionWithCtd.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
 
-        assertNotNull(((DefaultSubscriptionBase) newBaseSubscriptionWithCtd).getPendingTransition());
-        assertEquals(((DefaultSubscriptionBase) newBaseSubscriptionWithCtd).getPendingTransition().getEffectiveTransitionTime(), newCtd);
+        assertNotNull(newBaseSubscriptionWithCtd.getPendingTransition());
+        assertEquals(newBaseSubscriptionWithCtd.getPendingTransition().getEffectiveTransitionTime(), newCtd);
     }
 
     @Test(groups = "slow")
     public void testTransferWithAO() throws Exception {
-
         final UUID newAccountId = UUID.randomUUID();
 
         final String baseProduct = "Shotgun";
@@ -415,15 +394,15 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
             if (curProduct.getName().equals(baseProduct)) {
                 foundBP = true;
                 assertTrue(((DefaultSubscriptionBase) cur).getAlignStartDate().compareTo(((DefaultSubscriptionBase) baseSubscription).getAlignStartDate()) == 0);
-                assertNull(((DefaultSubscriptionBase) cur).getPendingTransition());
+                assertNull(cur.getPendingTransition());
             } else if (curProduct.getName().equals(aoProduct1)) {
                 foundAO1 = true;
                 assertTrue(((DefaultSubscriptionBase) cur).getAlignStartDate().compareTo((aoSubscription1).getAlignStartDate()) == 0);
-                assertNull(((DefaultSubscriptionBase) cur).getPendingTransition());
+                assertNull(cur.getPendingTransition());
             } else if (curProduct.getName().equals(aoProduct2)) {
                 foundAO2 = true;
                 assertTrue(((DefaultSubscriptionBase) cur).getAlignStartDate().compareTo((aoSubscription2).getAlignStartDate()) == 0);
-                assertNotNull(((DefaultSubscriptionBase) cur).getPendingTransition());
+                assertNotNull(cur.getPendingTransition());
             } else {
                 Assert.fail("Unexpected product " + curProduct.getName());
             }
@@ -449,13 +428,10 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
         testListener.pushExpectedEvent(NextEvent.TRANSFER);
         transferApi.transferBundle(newBundle.getAccountId(), finalNewAccountId, newBundle.getExternalKey(), newTransferRequestedDate, true, false, callContext);
         assertListenerStatus();
-
     }
 
-
     @Test(groups = "slow")
     public void testTransferWithAOCancelled() throws Exception {
-
         final UUID newAccountId = UUID.randomUUID();
 
         final String baseProduct = "Shotgun";
@@ -506,7 +482,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
 
     @Test(groups = "slow")
     public void testTransferWithUncancel() throws Exception {
-
         final UUID newAccountId = UUID.randomUUID();
 
         final String baseProduct = "Shotgun";
@@ -524,7 +499,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
         final DateTime ctd = baseSubscription.getStartDate().plusDays(30).plusMonths(1);
         subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), ctd, internalCallContext);
 
-
         // CANCEL BP
         baseSubscription = subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
         baseSubscription.cancel(callContext);
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestSubscriptionHelper.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestSubscriptionHelper.java
index 27dc44e..522a48e 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestSubscriptionHelper.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestSubscriptionHelper.java
@@ -36,6 +36,7 @@ import com.ning.billing.ErrorCode;
 import com.ning.billing.api.TestApiListener;
 import com.ning.billing.api.TestApiListener.NextEvent;
 import com.ning.billing.api.TestListenerStatus;
+import com.ning.billing.callcontext.InternalCallContext;
 import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.Duration;
 import com.ning.billing.catalog.api.PhaseType;
@@ -44,27 +45,26 @@ import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.catalog.api.TimeUnit;
 import com.ning.billing.clock.Clock;
+import com.ning.billing.events.EffectiveSubscriptionInternalEvent;
 import com.ning.billing.subscription.SubscriptionTestListenerStatus;
 import com.ning.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
+import com.ning.billing.subscription.api.SubscriptionBaseInternalApi;
 import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
 import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApi.AccountMigration;
 import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApi.BundleMigration;
 import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApi.SubscriptionMigration;
 import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApi.SubscriptionMigrationCase;
+import com.ning.billing.subscription.api.timeline.BundleBaseTimeline;
 import com.ning.billing.subscription.api.timeline.SubscriptionBaseRepairException;
 import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline;
+import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.DeletedEvent;
+import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.ExistingEvent;
+import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.NewEvent;
 import com.ning.billing.subscription.engine.dao.SubscriptionDao;
 import com.ning.billing.subscription.events.SubscriptionBaseEvent;
 import com.ning.billing.subscription.events.phase.PhaseEvent;
 import com.ning.billing.subscription.events.user.ApiEvent;
 import com.ning.billing.subscription.events.user.ApiEventType;
-import com.ning.billing.subscription.api.timeline.BundleBaseTimeline;
-import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.DeletedEvent;
-import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.ExistingEvent;
-import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.NewEvent;
-import com.ning.billing.callcontext.InternalCallContext;
-import com.ning.billing.events.EffectiveSubscriptionInternalEvent;
-import com.ning.billing.subscription.api.SubscriptionBaseInternalApi;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -87,7 +87,6 @@ public class TestSubscriptionHelper {
 
     private final SubscriptionDao dao;
 
-
     @Inject
     public TestSubscriptionHelper(final SubscriptionBaseInternalApi subscriptionApi, final Clock clock, final InternalCallContext callContext, final TestApiListener testListener, final TestListenerStatus testListenerStatus, final SubscriptionDao dao) {
         this.subscriptionApi = subscriptionApi;
@@ -98,7 +97,6 @@ public class TestSubscriptionHelper {
         this.dao = dao;
     }
 
-
     public DefaultSubscriptionBase createSubscription(final SubscriptionBaseBundle bundle, final String productName, final BillingPeriod term, final String planSet, final DateTime requestedDate)
             throws SubscriptionBaseApiException {
         return createSubscriptionWithBundle(bundle.getId(), productName, term, planSet, requestedDate);
@@ -113,8 +111,8 @@ public class TestSubscriptionHelper {
             throws SubscriptionBaseApiException {
         testListener.pushExpectedEvent(NextEvent.CREATE);
         final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionApi.createSubscription(bundleId,
-                                                                                                   new PlanPhaseSpecifier(productName, ProductCategory.BASE, term, planSet, null),
-                                                                                                   requestedDate == null ? clock.getUTCNow() : requestedDate, callContext);
+                                                                                                                  new PlanPhaseSpecifier(productName, ProductCategory.BASE, term, planSet, null),
+                                                                                                                  requestedDate == null ? clock.getUTCNow() : requestedDate, callContext);
         assertNotNull(subscription);
 
         assertTrue(testListener.isCompleted(SubscriptionTestSuiteWithEmbeddedDB.DELAY));
@@ -395,7 +393,6 @@ public class TestSubscriptionHelper {
         return createAccountForMigrationTest(input);
     }
 
-
     public SubscriptionBaseTimeline createSubscriptionRepair(final UUID id, final List<DeletedEvent> deletedEvents, final List<NewEvent> newEvents) {
         return new SubscriptionBaseTimeline() {
             @Override
@@ -517,17 +514,17 @@ public class TestSubscriptionHelper {
     }
 
     public void validateExistingEventForAssertion(final ExistingEvent expected, final ExistingEvent input) {
-        log.info(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getProductName(), expected.getPlanPhaseSpecifier().getProductName()));
+        log.debug(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getProductName(), expected.getPlanPhaseSpecifier().getProductName()));
         assertEquals(input.getPlanPhaseSpecifier().getProductName(), expected.getPlanPhaseSpecifier().getProductName());
-        log.info(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getPhaseType(), expected.getPlanPhaseSpecifier().getPhaseType()));
+        log.debug(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getPhaseType(), expected.getPlanPhaseSpecifier().getPhaseType()));
         assertEquals(input.getPlanPhaseSpecifier().getPhaseType(), expected.getPlanPhaseSpecifier().getPhaseType());
-        log.info(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getProductCategory(), expected.getPlanPhaseSpecifier().getProductCategory()));
+        log.debug(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getProductCategory(), expected.getPlanPhaseSpecifier().getProductCategory()));
         assertEquals(input.getPlanPhaseSpecifier().getProductCategory(), expected.getPlanPhaseSpecifier().getProductCategory());
-        log.info(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getPriceListName(), expected.getPlanPhaseSpecifier().getPriceListName()));
+        log.debug(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getPriceListName(), expected.getPlanPhaseSpecifier().getPriceListName()));
         assertEquals(input.getPlanPhaseSpecifier().getPriceListName(), expected.getPlanPhaseSpecifier().getPriceListName());
-        log.info(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getBillingPeriod(), expected.getPlanPhaseSpecifier().getBillingPeriod()));
+        log.debug(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getBillingPeriod(), expected.getPlanPhaseSpecifier().getBillingPeriod()));
         assertEquals(input.getPlanPhaseSpecifier().getBillingPeriod(), expected.getPlanPhaseSpecifier().getBillingPeriod());
-        log.info(String.format("Got %s -> Expected %s", input.getEffectiveDate(), expected.getEffectiveDate()));
+        log.debug(String.format("Got %s -> Expected %s", input.getEffectiveDate(), expected.getEffectiveDate()));
         assertEquals(input.getEffectiveDate(), expected.getEffectiveDate());
     }
 
@@ -591,7 +588,6 @@ public class TestSubscriptionHelper {
         });
     }
 
-
     public static DateTime addOrRemoveDuration(final DateTime input, final List<Duration> durations, final boolean add) {
         DateTime result = input;
         for (final Duration cur : durations) {
@@ -635,7 +631,6 @@ public class TestSubscriptionHelper {
         return addOrRemoveDuration(input, list, false);
     }
 
-
     public static class SubscriptionMigrationCaseWithCTD implements SubscriptionMigrationCase {
 
         private final PlanPhaseSpecifier pps;
@@ -670,7 +665,6 @@ public class TestSubscriptionHelper {
         }
     }
 
-
     public interface TestWithExceptionCallback {
 
         public void doTest() throws SubscriptionBaseRepairException, SubscriptionBaseApiException;
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiAddOn.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiAddOn.java
index 1b2d8af..e04b4d2 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiAddOn.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiAddOn.java
@@ -16,17 +16,10 @@
 
 package com.ning.billing.subscription.api.user;
 
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
-
 import java.util.List;
 
 import org.joda.time.DateTime;
 import org.joda.time.Interval;
-import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.ning.billing.api.TestApiListener.NextEvent;
@@ -46,506 +39,464 @@ import com.ning.billing.entitlement.api.EntitlementAOStatusDryRun.DryRunChangeRe
 import com.ning.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
 import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
 
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
 public class TestUserApiAddOn extends SubscriptionTestSuiteWithEmbeddedDB {
 
     @Test(groups = "slow")
-    public void testCreateCancelAddon() {
-        try {
-            final String baseProduct = "Shotgun";
-            final BillingPeriod baseTerm = BillingPeriod.ANNUAL;
-            final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
+    public void testCreateCancelAddon() throws SubscriptionBaseApiException {
+        final String baseProduct = "Shotgun";
+        final BillingPeriod baseTerm = BillingPeriod.ANNUAL;
+        final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
 
-            final String aoProduct = "Telescopic-Scope";
-            final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
-            final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+        DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
 
-            DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
-            assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+        final String aoProduct = "Telescopic-Scope";
+        final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+        final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
 
-            testListener.pushExpectedEvent(NextEvent.CANCEL);
-            final DateTime now = clock.getUTCNow();
-            aoSubscription.cancel(callContext);
+        DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
+        assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
 
-            assertListenerStatus();
-            aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-            assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
+        testListener.pushExpectedEvent(NextEvent.CANCEL);
+        final DateTime now = clock.getUTCNow();
+        aoSubscription.cancel(callContext);
 
+        assertListenerStatus();
+        aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+        assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
 
-            assertListenerStatus();
-        } catch (Exception e) {
-            Assert.fail(e.getMessage());
-        }
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testCreateCancelAddonAndThenBP() {
-        try {
-            final String baseProduct = "Shotgun";
-            final BillingPeriod baseTerm = BillingPeriod.ANNUAL;
-            final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
-
-            final String aoProduct = "Telescopic-Scope";
-            final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
-            final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
-            assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
-
-            // Move clock after a month
-            Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-
-            // SET CTD TO CANCEL IN FUTURE
-            final DateTime now = clock.getUTCNow();
-            final Duration aoCtd = testUtil.getDurationMonth(1);
-            final DateTime newAOChargedThroughDate = TestSubscriptionHelper.addDuration(now, aoCtd);
-            subscriptionInternalApi.setChargedThroughDate(aoSubscription.getId(), newAOChargedThroughDate, internalCallContext);
-
-            final Duration bpCtd = testUtil.getDurationMonth(11);
-            final DateTime newBPChargedThroughDate = TestSubscriptionHelper.addDuration(now, bpCtd);
-            subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newBPChargedThroughDate, internalCallContext);
-
-            baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
-            aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(1));
-            clock.addDeltaFromReality(it.toDurationMillis());
-
-            // CANCEL AO
-            aoSubscription.cancel(callContext);
-            aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-            assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
-            assertTrue(aoSubscription.isSubscriptionFutureCancelled());
-
-            // CANCEL BASE NOW
-            baseSubscription.cancel(callContext);
-            baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
-            assertEquals(baseSubscription.getState(), EntitlementState.ACTIVE);
-            assertTrue(baseSubscription.isSubscriptionFutureCancelled());
-
-            aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-            List<SubscriptionBaseTransition> aoTransitions =  aoSubscription.getAllTransitions();
-            assertEquals(aoTransitions.size(), 3);
-            assertEquals(aoTransitions.get(0).getTransitionType(), SubscriptionBaseTransitionType.CREATE);
-            assertEquals(aoTransitions.get(1).getTransitionType(), SubscriptionBaseTransitionType.PHASE);
-            assertEquals(aoTransitions.get(2).getTransitionType(), SubscriptionBaseTransitionType.CANCEL);
-            assertTrue(aoSubscription.getFutureEndDate().compareTo(newAOChargedThroughDate) == 0);
-
-            testListener.pushExpectedEvent(NextEvent.UNCANCEL);
-            aoSubscription.uncancel(callContext);
-            assertListenerStatus();
-
-            aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-            aoTransitions =  aoSubscription.getAllTransitions();
-            assertEquals(aoTransitions.size(), 3);
-            assertEquals(aoTransitions.get(0).getTransitionType(), SubscriptionBaseTransitionType.CREATE);
-            assertEquals(aoTransitions.get(1).getTransitionType(), SubscriptionBaseTransitionType.PHASE);
-            assertEquals(aoTransitions.get(2).getTransitionType(), SubscriptionBaseTransitionType.CANCEL);
-            assertTrue(aoSubscription.getFutureEndDate().compareTo(newBPChargedThroughDate) == 0);
-
-            assertListenerStatus();
-        } catch (Exception e) {
-            Assert.fail(e.getMessage());
-        }
+    public void testCreateCancelAddonAndThenBP() throws SubscriptionBaseApiException {
+        final String baseProduct = "Shotgun";
+        final BillingPeriod baseTerm = BillingPeriod.ANNUAL;
+        final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
+
+        final String aoProduct = "Telescopic-Scope";
+        final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+        final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
+        assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+
+        // Move clock after a month
+        Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        // SET CTD TO CANCEL IN FUTURE
+        final DateTime now = clock.getUTCNow();
+        final Duration aoCtd = testUtil.getDurationMonth(1);
+        final DateTime newAOChargedThroughDate = TestSubscriptionHelper.addDuration(now, aoCtd);
+        subscriptionInternalApi.setChargedThroughDate(aoSubscription.getId(), newAOChargedThroughDate, internalCallContext);
+
+        final Duration bpCtd = testUtil.getDurationMonth(11);
+        final DateTime newBPChargedThroughDate = TestSubscriptionHelper.addDuration(now, bpCtd);
+        subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newBPChargedThroughDate, internalCallContext);
+
+        baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+        aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(1));
+        clock.addDeltaFromReality(it.toDurationMillis());
+
+        // CANCEL AO
+        aoSubscription.cancel(callContext);
+        aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+        assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+        assertTrue(aoSubscription.isSubscriptionFutureCancelled());
+
+        // CANCEL BASE NOW
+        baseSubscription.cancel(callContext);
+        baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+        assertEquals(baseSubscription.getState(), EntitlementState.ACTIVE);
+        assertTrue(baseSubscription.isSubscriptionFutureCancelled());
+
+        aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+        List<SubscriptionBaseTransition> aoTransitions = aoSubscription.getAllTransitions();
+        assertEquals(aoTransitions.size(), 3);
+        assertEquals(aoTransitions.get(0).getTransitionType(), SubscriptionBaseTransitionType.CREATE);
+        assertEquals(aoTransitions.get(1).getTransitionType(), SubscriptionBaseTransitionType.PHASE);
+        assertEquals(aoTransitions.get(2).getTransitionType(), SubscriptionBaseTransitionType.CANCEL);
+        assertTrue(aoSubscription.getFutureEndDate().compareTo(newAOChargedThroughDate) == 0);
+
+        testListener.pushExpectedEvent(NextEvent.UNCANCEL);
+        aoSubscription.uncancel(callContext);
+        assertListenerStatus();
+
+        aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+        aoTransitions = aoSubscription.getAllTransitions();
+        assertEquals(aoTransitions.size(), 3);
+        assertEquals(aoTransitions.get(0).getTransitionType(), SubscriptionBaseTransitionType.CREATE);
+        assertEquals(aoTransitions.get(1).getTransitionType(), SubscriptionBaseTransitionType.PHASE);
+        assertEquals(aoTransitions.get(2).getTransitionType(), SubscriptionBaseTransitionType.CANCEL);
+        assertTrue(aoSubscription.getFutureEndDate().compareTo(newBPChargedThroughDate) == 0);
+
+        assertListenerStatus();
     }
 
-
-
-
     @Test(groups = "slow")
-    public void testCancelBPWithAddon() {
-        try {
-            final String baseProduct = "Shotgun";
-            final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
-            final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            // CREATE BP
-            DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
-
-            final String aoProduct = "Telescopic-Scope";
-            final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
-            final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
-
-            testListener.reset();
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-
-            // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
-            Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-            // SET CTD TO CANCEL IN FUTURE
-            final DateTime now = clock.getUTCNow();
-            final Duration ctd = testUtil.getDurationMonth(1);
-            // Why not just use clock.getUTCNow().plusMonths(1) ?
-            final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
-            subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
-            baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
-
-            // FUTURE CANCELLATION
-            baseSubscription.cancel(callContext);
-
-            // REFETCH AO SUBSCRIPTION AND CHECK THIS IS ACTIVE
-            aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-            assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
-            assertTrue(aoSubscription.isSubscriptionFutureCancelled());
-
-            // MOVE AFTER CANCELLATION
-            testListener.reset();
-            testListener.pushExpectedEvent(NextEvent.CANCEL);
-            testListener.pushExpectedEvent(NextEvent.CANCEL);
-
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-            // REFETCH AO SUBSCRIPTION AND CHECK THIS IS CANCELLED
-            aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-            assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
-
-            assertListenerStatus();
-
-        } catch (Exception e) {
-            Assert.fail(e.getMessage());
-        }
+    public void testCancelBPWithAddon() throws SubscriptionBaseApiException {
+        final String baseProduct = "Shotgun";
+        final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
+        final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        // CREATE BP
+        DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
+
+        final String aoProduct = "Telescopic-Scope";
+        final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+        final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
+
+        testListener.reset();
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+
+        // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
+        Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        // SET CTD TO CANCEL IN FUTURE
+        final DateTime now = clock.getUTCNow();
+        final Duration ctd = testUtil.getDurationMonth(1);
+        // Why not just use clock.getUTCNow().plusMonths(1) ?
+        final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
+        subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
+        baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+
+        // FUTURE CANCELLATION
+        baseSubscription.cancel(callContext);
+
+        // REFETCH AO SUBSCRIPTION AND CHECK THIS IS ACTIVE
+        aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+        assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+        assertTrue(aoSubscription.isSubscriptionFutureCancelled());
+
+        // MOVE AFTER CANCELLATION
+        testListener.reset();
+        testListener.pushExpectedEvent(NextEvent.CANCEL);
+        testListener.pushExpectedEvent(NextEvent.CANCEL);
+
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        // REFETCH AO SUBSCRIPTION AND CHECK THIS IS CANCELLED
+        aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+        assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
+
+        assertListenerStatus();
     }
 
-
     @Test(groups = "slow")
-    public void testCancelUncancelBPWithAddon() {
-        try {
-            final String baseProduct = "Shotgun";
-            final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
-            final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            // CREATE BP
-            DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
-
-            final String aoProduct = "Telescopic-Scope";
-            final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
-            final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
-
-            testListener.reset();
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-
-            // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
-            Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-            // SET CTD TO CANCEL IN FUTURE
-            final DateTime now = clock.getUTCNow();
-            final Duration ctd = testUtil.getDurationMonth(1);
-            // Why not just use clock.getUTCNow().plusMonths(1) ?
-            final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
-            subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
-            baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
-
-            // FUTURE CANCELLATION
-            baseSubscription.cancel(callContext);
-
-            // REFETCH AO SUBSCRIPTION AND CHECK THIS IS ACTIVE
-            aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-            assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
-            assertTrue(aoSubscription.isSubscriptionFutureCancelled());
-
-
-            testListener.reset();
-            testListener.pushExpectedEvent(NextEvent.UNCANCEL);
-            baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
-            baseSubscription.uncancel(callContext);
-            assertListenerStatus();
-
-            aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-            assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
-            assertFalse(aoSubscription.isSubscriptionFutureCancelled());
-
-            // CANCEL AGAIN
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(1));
-            clock.addDeltaFromReality(it.toDurationMillis());
-
-            baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
-            baseSubscription.cancel(callContext);
-            baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
-            assertEquals(baseSubscription.getState(), EntitlementState.ACTIVE);
-            assertTrue(baseSubscription.isSubscriptionFutureCancelled());
-
-            aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-            assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
-            assertTrue(aoSubscription.isSubscriptionFutureCancelled());
-            assertListenerStatus();
-
-        } catch (Exception e) {
-            Assert.fail(e.getMessage());
-        }
+    public void testCancelUncancelBPWithAddon() throws SubscriptionBaseApiException {
+        final String baseProduct = "Shotgun";
+        final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
+        final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        // CREATE BP
+        DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
+
+        final String aoProduct = "Telescopic-Scope";
+        final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+        final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
+
+        testListener.reset();
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+
+        // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
+        Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        // SET CTD TO CANCEL IN FUTURE
+        final DateTime now = clock.getUTCNow();
+        final Duration ctd = testUtil.getDurationMonth(1);
+        // Why not just use clock.getUTCNow().plusMonths(1) ?
+        final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
+        subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
+        baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+
+        // FUTURE CANCELLATION
+        baseSubscription.cancel(callContext);
+
+        // REFETCH AO SUBSCRIPTION AND CHECK THIS IS ACTIVE
+        aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+        assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+        assertTrue(aoSubscription.isSubscriptionFutureCancelled());
+
+        testListener.reset();
+        testListener.pushExpectedEvent(NextEvent.UNCANCEL);
+        baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+        baseSubscription.uncancel(callContext);
+        assertListenerStatus();
+
+        aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+        assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+        assertFalse(aoSubscription.isSubscriptionFutureCancelled());
+
+        // CANCEL AGAIN
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(1));
+        clock.addDeltaFromReality(it.toDurationMillis());
+
+        baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+        baseSubscription.cancel(callContext);
+        baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+        assertEquals(baseSubscription.getState(), EntitlementState.ACTIVE);
+        assertTrue(baseSubscription.isSubscriptionFutureCancelled());
+
+        aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+        assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+        assertTrue(aoSubscription.isSubscriptionFutureCancelled());
+        assertListenerStatus();
     }
 
-
-
-
     @Test(groups = "slow")
-    public void testChangeBPWithAddonIncluded() {
-        try {
-            final String baseProduct = "Shotgun";
-            final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
-            final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            // CREATE BP
-            DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
-
-            final String aoProduct = "Telescopic-Scope";
-            final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
-            final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
-
-            testListener.reset();
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-
-            // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
-            final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-            // SET CTD TO CHANGE IN FUTURE
-            final DateTime now = clock.getUTCNow();
-            final Duration ctd = testUtil.getDurationMonth(1);
-            final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
-            subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
-            baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
-
-            // CHANGE IMMEDIATELY WITH TO BP WITH NON INCLUDED ADDON
-            final String newBaseProduct = "Assault-Rifle";
-            final BillingPeriod newBaseTerm = BillingPeriod.MONTHLY;
-            final String newBasePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            final List<EntitlementAOStatusDryRun> aoStatus = subscriptionInternalApi.getDryRunChangePlanStatus(baseSubscription.getId(),
-                                                                                                     newBaseProduct, now, internalCallContext);
-            assertEquals(aoStatus.size(), 1);
-            assertEquals(aoStatus.get(0).getId(), aoSubscription.getId());
-            assertEquals(aoStatus.get(0).getProductName(), aoProduct);
-            assertEquals(aoStatus.get(0).getBillingPeriod(), aoTerm);
-            assertEquals(aoStatus.get(0).getPhaseType(), aoSubscription.getCurrentPhase().getPhaseType());
-            assertEquals(aoStatus.get(0).getPriceList(), aoSubscription.getCurrentPriceList().getName());
-            assertEquals(aoStatus.get(0).getReason(), DryRunChangeReason.AO_INCLUDED_IN_NEW_PLAN);
-
-            testListener.reset();
-            testListener.pushExpectedEvent(NextEvent.CHANGE);
-            testListener.pushExpectedEvent(NextEvent.CANCEL);
-            baseSubscription.changePlan(newBaseProduct, newBaseTerm, newBasePriceList,  callContext);
-            assertListenerStatus();
-
-            // REFETCH AO SUBSCRIPTION AND CHECK THIS CANCELLED
-            aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-            assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
-
-            assertListenerStatus();
-        } catch (Exception e) {
-            Assert.fail(e.getMessage());
-        }
+    public void testChangeBPWithAddonIncluded() throws SubscriptionBaseApiException {
+        final String baseProduct = "Shotgun";
+        final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
+        final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        // CREATE BP
+        DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
+
+        final String aoProduct = "Telescopic-Scope";
+        final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+        final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
+
+        testListener.reset();
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+
+        // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
+        final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        // SET CTD TO CHANGE IN FUTURE
+        final DateTime now = clock.getUTCNow();
+        final Duration ctd = testUtil.getDurationMonth(1);
+        final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
+        subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
+        baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+
+        // CHANGE IMMEDIATELY WITH TO BP WITH NON INCLUDED ADDON
+        final String newBaseProduct = "Assault-Rifle";
+        final BillingPeriod newBaseTerm = BillingPeriod.MONTHLY;
+        final String newBasePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        final List<EntitlementAOStatusDryRun> aoStatus = subscriptionInternalApi.getDryRunChangePlanStatus(baseSubscription.getId(),
+                                                                                                           newBaseProduct, now, internalCallContext);
+        assertEquals(aoStatus.size(), 1);
+        assertEquals(aoStatus.get(0).getId(), aoSubscription.getId());
+        assertEquals(aoStatus.get(0).getProductName(), aoProduct);
+        assertEquals(aoStatus.get(0).getBillingPeriod(), aoTerm);
+        assertEquals(aoStatus.get(0).getPhaseType(), aoSubscription.getCurrentPhase().getPhaseType());
+        assertEquals(aoStatus.get(0).getPriceList(), aoSubscription.getCurrentPriceList().getName());
+        assertEquals(aoStatus.get(0).getReason(), DryRunChangeReason.AO_INCLUDED_IN_NEW_PLAN);
+
+        testListener.reset();
+        testListener.pushExpectedEvent(NextEvent.CHANGE);
+        testListener.pushExpectedEvent(NextEvent.CANCEL);
+        baseSubscription.changePlan(newBaseProduct, newBaseTerm, newBasePriceList, callContext);
+        assertListenerStatus();
+
+        // REFETCH AO SUBSCRIPTION AND CHECK THIS CANCELLED
+        aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+        assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
+
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testChangeBPWithAddonNonAvailable() {
-        try {
-            final String baseProduct = "Shotgun";
-            final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
-            final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            // CREATE BP
-            DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
-
-            final String aoProduct = "Telescopic-Scope";
-            final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
-            final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
-
-            testListener.reset();
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-
-            // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
-            Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-            // SET CTD TO CANCEL IN FUTURE
-            final DateTime now = clock.getUTCNow();
-            final Duration ctd = testUtil.getDurationMonth(1);
-            final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
-            subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
-            baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
-
-            // CHANGE IMMEDIATELY WITH TO BP WITH NON AVAILABLE ADDON
-            final String newBaseProduct = "Pistol";
-            final BillingPeriod newBaseTerm = BillingPeriod.MONTHLY;
-            final String newBasePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            final List<EntitlementAOStatusDryRun> aoStatus = subscriptionInternalApi.getDryRunChangePlanStatus(baseSubscription.getId(),
-                                                                                                     newBaseProduct, now, internalCallContext);
-            assertEquals(aoStatus.size(), 1);
-            assertEquals(aoStatus.get(0).getId(), aoSubscription.getId());
-            assertEquals(aoStatus.get(0).getProductName(), aoProduct);
-            assertEquals(aoStatus.get(0).getBillingPeriod(), aoTerm);
-            assertEquals(aoStatus.get(0).getPhaseType(), aoSubscription.getCurrentPhase().getPhaseType());
-            assertEquals(aoStatus.get(0).getPriceList(), aoSubscription.getCurrentPriceList().getName());
-            assertEquals(aoStatus.get(0).getReason(), DryRunChangeReason.AO_NOT_AVAILABLE_IN_NEW_PLAN);
-
-            baseSubscription.changePlan(newBaseProduct, newBaseTerm, newBasePriceList, callContext);
-
-            // REFETCH AO SUBSCRIPTION AND CHECK THIS IS ACTIVE
-            aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-            assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
-            assertTrue(aoSubscription.isSubscriptionFutureCancelled());
-
-            // MOVE AFTER CHANGE
-            testListener.reset();
-            testListener.pushExpectedEvent(NextEvent.CHANGE);
-            testListener.pushExpectedEvent(NextEvent.CANCEL);
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-            // REFETCH AO SUBSCRIPTION AND CHECK THIS CANCELLED
-            aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-            assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
-
-            assertListenerStatus();
-        } catch (Exception e) {
-            Assert.fail(e.getMessage());
-        }
+    public void testChangeBPWithAddonNonAvailable() throws SubscriptionBaseApiException {
+        final String baseProduct = "Shotgun";
+        final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
+        final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        // CREATE BP
+        DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
+
+        final String aoProduct = "Telescopic-Scope";
+        final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+        final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
+
+        testListener.reset();
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+
+        // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
+        Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        // SET CTD TO CANCEL IN FUTURE
+        final DateTime now = clock.getUTCNow();
+        final Duration ctd = testUtil.getDurationMonth(1);
+        final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
+        subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
+        baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+
+        // CHANGE IMMEDIATELY WITH TO BP WITH NON AVAILABLE ADDON
+        final String newBaseProduct = "Pistol";
+        final BillingPeriod newBaseTerm = BillingPeriod.MONTHLY;
+        final String newBasePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        final List<EntitlementAOStatusDryRun> aoStatus = subscriptionInternalApi.getDryRunChangePlanStatus(baseSubscription.getId(),
+                                                                                                           newBaseProduct, now, internalCallContext);
+        assertEquals(aoStatus.size(), 1);
+        assertEquals(aoStatus.get(0).getId(), aoSubscription.getId());
+        assertEquals(aoStatus.get(0).getProductName(), aoProduct);
+        assertEquals(aoStatus.get(0).getBillingPeriod(), aoTerm);
+        assertEquals(aoStatus.get(0).getPhaseType(), aoSubscription.getCurrentPhase().getPhaseType());
+        assertEquals(aoStatus.get(0).getPriceList(), aoSubscription.getCurrentPriceList().getName());
+        assertEquals(aoStatus.get(0).getReason(), DryRunChangeReason.AO_NOT_AVAILABLE_IN_NEW_PLAN);
+
+        baseSubscription.changePlan(newBaseProduct, newBaseTerm, newBasePriceList, callContext);
+
+        // REFETCH AO SUBSCRIPTION AND CHECK THIS IS ACTIVE
+        aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+        assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+        assertTrue(aoSubscription.isSubscriptionFutureCancelled());
+
+        // MOVE AFTER CHANGE
+        testListener.reset();
+        testListener.pushExpectedEvent(NextEvent.CHANGE);
+        testListener.pushExpectedEvent(NextEvent.CANCEL);
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        // REFETCH AO SUBSCRIPTION AND CHECK THIS CANCELLED
+        aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+        assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
+
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testAddonCreateWithBundleAlign() {
-        try {
-            final String aoProduct = "Telescopic-Scope";
-            final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
-            final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            // This is just to double check our test catalog gives us what we want before we start the test
-            final PlanSpecifier planSpecifier = new PlanSpecifier(aoProduct,
-                                                                  ProductCategory.ADD_ON,
-                                                                  aoTerm,
-                                                                  aoPriceList);
-            final PlanAlignmentCreate alignement = catalog.planCreateAlignment(planSpecifier, clock.getUTCNow());
-            assertEquals(alignement, PlanAlignmentCreate.START_OF_BUNDLE);
-
-            testAddonCreateInternal(aoProduct, aoTerm, aoPriceList, alignement);
-
-            assertListenerStatus();
-        } catch (CatalogApiException e) {
-            Assert.fail(e.getMessage());
-        }
+    public void testAddonCreateWithBundleAlign() throws CatalogApiException, SubscriptionBaseApiException {
+        final String aoProduct = "Telescopic-Scope";
+        final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+        final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        // This is just to double check our test catalog gives us what we want before we start the test
+        final PlanSpecifier planSpecifier = new PlanSpecifier(aoProduct,
+                                                              ProductCategory.ADD_ON,
+                                                              aoTerm,
+                                                              aoPriceList);
+        final PlanAlignmentCreate alignement = catalog.planCreateAlignment(planSpecifier, clock.getUTCNow());
+        assertEquals(alignement, PlanAlignmentCreate.START_OF_BUNDLE);
+
+        testAddonCreateInternal(aoProduct, aoTerm, aoPriceList, alignement);
+
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testAddonCreateWithSubscriptionAlign() {
-        try {
-            final String aoProduct = "Laser-Scope";
-            final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
-            final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            // This is just to double check our test catalog gives us what we want before we start the test
-            final PlanSpecifier planSpecifier = new PlanSpecifier(aoProduct,
-                                                                  ProductCategory.ADD_ON,
-                                                                  aoTerm,
-                                                                  aoPriceList);
-            final PlanAlignmentCreate alignement = catalog.planCreateAlignment(planSpecifier, clock.getUTCNow());
-            assertEquals(alignement, PlanAlignmentCreate.START_OF_SUBSCRIPTION);
-
-            testAddonCreateInternal(aoProduct, aoTerm, aoPriceList, alignement);
-
-            assertListenerStatus();
-        } catch (CatalogApiException e) {
-            Assert.fail(e.getMessage());
-        }
+    public void testAddonCreateWithSubscriptionAlign() throws SubscriptionBaseApiException, CatalogApiException {
+        final String aoProduct = "Laser-Scope";
+        final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+        final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        // This is just to double check our test catalog gives us what we want before we start the test
+        final PlanSpecifier planSpecifier = new PlanSpecifier(aoProduct,
+                                                              ProductCategory.ADD_ON,
+                                                              aoTerm,
+                                                              aoPriceList);
+        final PlanAlignmentCreate alignement = catalog.planCreateAlignment(planSpecifier, clock.getUTCNow());
+        assertEquals(alignement, PlanAlignmentCreate.START_OF_SUBSCRIPTION);
+
+        testAddonCreateInternal(aoProduct, aoTerm, aoPriceList, alignement);
+
+        assertListenerStatus();
     }
 
-    private void testAddonCreateInternal(final String aoProduct, final BillingPeriod aoTerm, final String aoPriceList, final PlanAlignmentCreate expAlignement) {
-        try {
-            final String baseProduct = "Shotgun";
-            final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
-            final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            // CREATE BP
-            final DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
-
-            // MOVE CLOCK 14 DAYS LATER
-            Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(14));
-            clock.addDeltaFromReality(it.toDurationMillis());
-
-            // CREATE ADDON
-            final DateTime beforeAOCreation = clock.getUTCNow();
-            DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
-            final DateTime afterAOCreation = clock.getUTCNow();
-
-            // CHECK EVERYTHING
-            Plan aoCurrentPlan = aoSubscription.getCurrentPlan();
-            assertNotNull(aoCurrentPlan);
-            assertEquals(aoCurrentPlan.getProduct().getName(), aoProduct);
-            assertEquals(aoCurrentPlan.getProduct().getCategory(), ProductCategory.ADD_ON);
-            assertEquals(aoCurrentPlan.getBillingPeriod(), aoTerm);
-
-            PlanPhase aoCurrentPhase = aoSubscription.getCurrentPhase();
-            assertNotNull(aoCurrentPhase);
-            assertEquals(aoCurrentPhase.getPhaseType(), PhaseType.DISCOUNT);
-
-            testUtil.assertDateWithin(aoSubscription.getStartDate(), beforeAOCreation, afterAOCreation);
-            assertEquals(aoSubscription.getBundleStartDate(), baseSubscription.getBundleStartDate());
-
-            // CHECK next AO PHASE EVENT IS INDEED A MONTH AFTER BP STARTED => BUNDLE ALIGNMENT
-            SubscriptionBaseTransition aoPendingTranstion = aoSubscription.getPendingTransition();
-            if (expAlignement == PlanAlignmentCreate.START_OF_BUNDLE) {
-                assertEquals(aoPendingTranstion.getEffectiveTransitionTime(), baseSubscription.getStartDate().plusMonths(1));
-            } else {
-                assertEquals(aoPendingTranstion.getEffectiveTransitionTime(), aoSubscription.getStartDate().plusMonths(1));
-            }
-
-            // ADD TWO PHASE EVENTS (BP + AO)
-            testListener.reset();
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-
-            // MOVE THROUGH TIME TO GO INTO EVERGREEN
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(33));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-            // CHECK EVERYTHING AGAIN
-            aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-
-            aoCurrentPlan = aoSubscription.getCurrentPlan();
-            assertNotNull(aoCurrentPlan);
-            assertEquals(aoCurrentPlan.getProduct().getName(), aoProduct);
-            assertEquals(aoCurrentPlan.getProduct().getCategory(), ProductCategory.ADD_ON);
-            assertEquals(aoCurrentPlan.getBillingPeriod(), aoTerm);
-
-            aoCurrentPhase = aoSubscription.getCurrentPhase();
-            assertNotNull(aoCurrentPhase);
-            assertEquals(aoCurrentPhase.getPhaseType(), PhaseType.EVERGREEN);
-
-            aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-            aoPendingTranstion = aoSubscription.getPendingTransition();
-            assertNull(aoPendingTranstion);
-        } catch (SubscriptionBaseApiException e) {
-            Assert.fail(e.getMessage());
+    private void testAddonCreateInternal(final String aoProduct, final BillingPeriod aoTerm, final String aoPriceList, final PlanAlignmentCreate expAlignement) throws SubscriptionBaseApiException {
+        final String baseProduct = "Shotgun";
+        final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
+        final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        // CREATE BP
+        final DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
+
+        // MOVE CLOCK 14 DAYS LATER
+        Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(14));
+        clock.addDeltaFromReality(it.toDurationMillis());
+
+        // CREATE ADDON
+        final DateTime beforeAOCreation = clock.getUTCNow();
+        DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
+        final DateTime afterAOCreation = clock.getUTCNow();
+
+        // CHECK EVERYTHING
+        Plan aoCurrentPlan = aoSubscription.getCurrentPlan();
+        assertNotNull(aoCurrentPlan);
+        assertEquals(aoCurrentPlan.getProduct().getName(), aoProduct);
+        assertEquals(aoCurrentPlan.getProduct().getCategory(), ProductCategory.ADD_ON);
+        assertEquals(aoCurrentPlan.getBillingPeriod(), aoTerm);
+
+        PlanPhase aoCurrentPhase = aoSubscription.getCurrentPhase();
+        assertNotNull(aoCurrentPhase);
+        assertEquals(aoCurrentPhase.getPhaseType(), PhaseType.DISCOUNT);
+
+        testUtil.assertDateWithin(aoSubscription.getStartDate(), beforeAOCreation, afterAOCreation);
+        assertEquals(aoSubscription.getBundleStartDate(), baseSubscription.getBundleStartDate());
+
+        // CHECK next AO PHASE EVENT IS INDEED A MONTH AFTER BP STARTED => BUNDLE ALIGNMENT
+        SubscriptionBaseTransition aoPendingTranstion = aoSubscription.getPendingTransition();
+        if (expAlignement == PlanAlignmentCreate.START_OF_BUNDLE) {
+            assertEquals(aoPendingTranstion.getEffectiveTransitionTime(), baseSubscription.getStartDate().plusMonths(1));
+        } else {
+            assertEquals(aoPendingTranstion.getEffectiveTransitionTime(), aoSubscription.getStartDate().plusMonths(1));
         }
+
+        // ADD TWO PHASE EVENTS (BP + AO)
+        testListener.reset();
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+
+        // MOVE THROUGH TIME TO GO INTO EVERGREEN
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(33));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        // CHECK EVERYTHING AGAIN
+        aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+
+        aoCurrentPlan = aoSubscription.getCurrentPlan();
+        assertNotNull(aoCurrentPlan);
+        assertEquals(aoCurrentPlan.getProduct().getName(), aoProduct);
+        assertEquals(aoCurrentPlan.getProduct().getCategory(), ProductCategory.ADD_ON);
+        assertEquals(aoCurrentPlan.getBillingPeriod(), aoTerm);
+
+        aoCurrentPhase = aoSubscription.getCurrentPhase();
+        assertNotNull(aoCurrentPhase);
+        assertEquals(aoCurrentPhase.getPhaseType(), PhaseType.EVERGREEN);
+
+        aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+        aoPendingTranstion = aoSubscription.getPendingTransition();
+        assertNull(aoPendingTranstion);
     }
 }
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCancel.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCancel.java
index cd1d5ed..dd7d8d3 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCancel.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCancel.java
@@ -40,222 +40,201 @@ import static org.testng.Assert.assertTrue;
 public class TestUserApiCancel extends SubscriptionTestSuiteWithEmbeddedDB {
 
     @Test(groups = "slow")
-    public void testCancelSubscriptionIMM() {
-        try {
-            final DateTime init = clock.getUTCNow();
+    public void testCancelSubscriptionIMM() throws SubscriptionBaseApiException {
+        final DateTime init = clock.getUTCNow();
 
-            final String prod = "Shotgun";
-            final BillingPeriod term = BillingPeriod.MONTHLY;
-            final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
+        final String prod = "Shotgun";
+        final BillingPeriod term = BillingPeriod.MONTHLY;
+        final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
 
-            // CREATE
-            final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
-            PlanPhase currentPhase = subscription.getCurrentPhase();
-            assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
+        // CREATE
+        final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
+        PlanPhase currentPhase = subscription.getCurrentPhase();
+        assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
 
-            // ADVANCE TIME still in trial
-            final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(3));
-            clock.addDeltaFromReality(it.toDurationMillis());
+        // ADVANCE TIME still in trial
+        final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(3));
+        clock.addDeltaFromReality(it.toDurationMillis());
 
-            final DateTime future = clock.getUTCNow();
-            testListener.pushExpectedEvent(NextEvent.CANCEL);
+        final DateTime future = clock.getUTCNow();
+        testListener.pushExpectedEvent(NextEvent.CANCEL);
 
-            assertEquals(subscription.getLastActiveProduct().getName(), prod);
-            assertEquals(subscription.getLastActivePriceList().getName(), planSet);
-            assertEquals(subscription.getLastActiveBillingPeriod(), term);
-            assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
+        assertEquals(subscription.getLastActiveProduct().getName(), prod);
+        assertEquals(subscription.getLastActivePriceList().getName(), planSet);
+        assertEquals(subscription.getLastActiveBillingPeriod(), term);
+        assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
 
+        // CANCEL in trial period to get IMM policy
+        subscription.cancel(callContext);
+        currentPhase = subscription.getCurrentPhase();
+        testListener.isCompleted(3000);
 
-            // CANCEL in trial period to get IMM policy
-            subscription.cancel(callContext);
-            currentPhase = subscription.getCurrentPhase();
-            testListener.isCompleted(3000);
+        assertEquals(subscription.getLastActiveProduct().getName(), prod);
+        assertEquals(subscription.getLastActivePriceList().getName(), planSet);
+        assertEquals(subscription.getLastActiveBillingPeriod(), term);
+        assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
 
-            assertEquals(subscription.getLastActiveProduct().getName(), prod);
-            assertEquals(subscription.getLastActivePriceList().getName(), planSet);
-            assertEquals(subscription.getLastActiveBillingPeriod(), term);
-            assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
+        assertNull(currentPhase);
+        testUtil.checkNextPhaseChange(subscription, 0, null);
 
-
-            assertNull(currentPhase);
-            testUtil.checkNextPhaseChange(subscription, 0, null);
-
-            assertListenerStatus();
-        } catch (SubscriptionBaseApiException e) {
-            Assert.fail(e.getMessage());
-        }
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testCancelSubscriptionEOTWithChargeThroughDate() throws SubscriptionBillingApiException {
-        try {
-            final String prod = "Shotgun";
-            final BillingPeriod term = BillingPeriod.MONTHLY;
-            final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            // CREATE
-            DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
-            PlanPhase trialPhase = subscription.getCurrentPhase();
-            assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
-            // NEXT PHASE
-            final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
-            testUtil.checkNextPhaseChange(subscription, 1, expectedPhaseTrialChange);
-
-            // MOVE TO NEXT PHASE
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
-            clock.addDeltaFromReality(it.toDurationMillis());
-
-            assertListenerStatus();
-            trialPhase = subscription.getCurrentPhase();
-            assertEquals(trialPhase.getPhaseType(), PhaseType.EVERGREEN);
-
-            // SET CTD + RE READ SUBSCRIPTION + CHANGE PLAN
-            final Duration ctd = testUtil.getDurationMonth(1);
-            final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
-            subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
-            subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
-
-            assertEquals(subscription.getLastActiveProduct().getName(), prod);
-            assertEquals(subscription.getLastActivePriceList().getName(), planSet);
-            assertEquals(subscription.getLastActiveBillingPeriod(), term);
-            assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
-
-            // CANCEL
-            testListener.setNonExpectedMode();
-            testListener.pushExpectedEvent(NextEvent.CANCEL);
-            subscription.cancel(callContext);
-            assertFalse(testListener.isCompleted(3000));
-            testListener.reset();
-
-
-            assertEquals(subscription.getLastActiveProduct().getName(), prod);
-            assertEquals(subscription.getLastActivePriceList().getName(), planSet);
-            assertEquals(subscription.getLastActiveBillingPeriod(), term);
-            assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
-
-            final DateTime futureEndDate = subscription.getFutureEndDate();
-            Assert.assertNotNull(futureEndDate);
-
-            // MOVE TO EOT + RECHECK
-            testListener.pushExpectedEvent(NextEvent.CANCEL);
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            final DateTime future = clock.getUTCNow();
-            assertListenerStatus();
-
-            assertTrue(futureEndDate.compareTo(subscription.getEndDate()) == 0);
-
-            final PlanPhase currentPhase = subscription.getCurrentPhase();
-            assertNull(currentPhase);
-            testUtil.checkNextPhaseChange(subscription, 0, null);
-
-            assertEquals(subscription.getLastActiveProduct().getName(), prod);
-            assertEquals(subscription.getLastActivePriceList().getName(), planSet);
-            assertEquals(subscription.getLastActiveBillingPeriod(), term);
-            assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
-
-
-            assertListenerStatus();
-        } catch (SubscriptionBaseApiException e) {
-            Assert.fail(e.getMessage());
-        }
+    public void testCancelSubscriptionEOTWithChargeThroughDate() throws SubscriptionBillingApiException, SubscriptionBaseApiException {
+        final String prod = "Shotgun";
+        final BillingPeriod term = BillingPeriod.MONTHLY;
+        final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        // CREATE
+        DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
+        PlanPhase trialPhase = subscription.getCurrentPhase();
+        assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+        // NEXT PHASE
+        final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+        testUtil.checkNextPhaseChange(subscription, 1, expectedPhaseTrialChange);
+
+        // MOVE TO NEXT PHASE
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+        clock.addDeltaFromReality(it.toDurationMillis());
+
+        assertListenerStatus();
+        trialPhase = subscription.getCurrentPhase();
+        assertEquals(trialPhase.getPhaseType(), PhaseType.EVERGREEN);
+
+        // SET CTD + RE READ SUBSCRIPTION + CHANGE PLAN
+        final Duration ctd = testUtil.getDurationMonth(1);
+        final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
+        subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
+        subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+
+        assertEquals(subscription.getLastActiveProduct().getName(), prod);
+        assertEquals(subscription.getLastActivePriceList().getName(), planSet);
+        assertEquals(subscription.getLastActiveBillingPeriod(), term);
+        assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
+
+        // CANCEL
+        testListener.setNonExpectedMode();
+        testListener.pushExpectedEvent(NextEvent.CANCEL);
+        subscription.cancel(callContext);
+        assertFalse(testListener.isCompleted(3000));
+        testListener.reset();
+
+        assertEquals(subscription.getLastActiveProduct().getName(), prod);
+        assertEquals(subscription.getLastActivePriceList().getName(), planSet);
+        assertEquals(subscription.getLastActiveBillingPeriod(), term);
+        assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
+
+        final DateTime futureEndDate = subscription.getFutureEndDate();
+        Assert.assertNotNull(futureEndDate);
+
+        // MOVE TO EOT + RECHECK
+        testListener.pushExpectedEvent(NextEvent.CANCEL);
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        final DateTime future = clock.getUTCNow();
+        assertListenerStatus();
+
+        assertTrue(futureEndDate.compareTo(subscription.getEndDate()) == 0);
+
+        final PlanPhase currentPhase = subscription.getCurrentPhase();
+        assertNull(currentPhase);
+        testUtil.checkNextPhaseChange(subscription, 0, null);
+
+        assertEquals(subscription.getLastActiveProduct().getName(), prod);
+        assertEquals(subscription.getLastActivePriceList().getName(), planSet);
+        assertEquals(subscription.getLastActiveBillingPeriod(), term);
+        assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
+
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testCancelSubscriptionEOTWithNoChargeThroughDate() {
-        try {
-            final String prod = "Shotgun";
-            final BillingPeriod term = BillingPeriod.MONTHLY;
-            final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            // CREATE
-            final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
-            PlanPhase trialPhase = subscription.getCurrentPhase();
-            assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
-            // NEXT PHASE
-            final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
-            testUtil.checkNextPhaseChange(subscription, 1, expectedPhaseTrialChange);
-
-            // MOVE TO NEXT PHASE
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-
-            final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-            trialPhase = subscription.getCurrentPhase();
-            assertEquals(trialPhase.getPhaseType(), PhaseType.EVERGREEN);
-
-            testListener.pushExpectedEvent(NextEvent.CANCEL);
-
-            // CANCEL
-            subscription.cancel(callContext);
-            assertListenerStatus();
-
-            final PlanPhase currentPhase = subscription.getCurrentPhase();
-            assertNull(currentPhase);
-            testUtil.checkNextPhaseChange(subscription, 0, null);
-
-            assertListenerStatus();
-        } catch (SubscriptionBaseApiException e) {
-            Assert.fail(e.getMessage());
-        }
+    public void testCancelSubscriptionEOTWithNoChargeThroughDate() throws SubscriptionBaseApiException {
+        final String prod = "Shotgun";
+        final BillingPeriod term = BillingPeriod.MONTHLY;
+        final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        // CREATE
+        final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
+        PlanPhase trialPhase = subscription.getCurrentPhase();
+        assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+        // NEXT PHASE
+        final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+        testUtil.checkNextPhaseChange(subscription, 1, expectedPhaseTrialChange);
+
+        // MOVE TO NEXT PHASE
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+
+        final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+        trialPhase = subscription.getCurrentPhase();
+        assertEquals(trialPhase.getPhaseType(), PhaseType.EVERGREEN);
+
+        testListener.pushExpectedEvent(NextEvent.CANCEL);
+
+        // CANCEL
+        subscription.cancel(callContext);
+        assertListenerStatus();
+
+        final PlanPhase currentPhase = subscription.getCurrentPhase();
+        assertNull(currentPhase);
+        testUtil.checkNextPhaseChange(subscription, 0, null);
+
+        assertListenerStatus();
     }
 
     // Similar test to testCancelSubscriptionEOTWithChargeThroughDate except we uncancel and check things
     // are as they used to be and we can move forward without hitting cancellation
-    //
     @Test(groups = "slow")
-    public void testUncancel() throws SubscriptionBillingApiException {
-        try {
-            final String prod = "Shotgun";
-            final BillingPeriod term = BillingPeriod.MONTHLY;
-            final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            // CREATE
-            DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
-            final PlanPhase trialPhase = subscription.getCurrentPhase();
-            assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
-            // NEXT PHASE
-            final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
-            testUtil.checkNextPhaseChange(subscription, 1, expectedPhaseTrialChange);
-
-            // MOVE TO NEXT PHASE
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-            PlanPhase currentPhase = subscription.getCurrentPhase();
-            assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
-
-            // SET CTD + RE READ SUBSCRIPTION + CHANGE PLAN
-            final Duration ctd = testUtil.getDurationMonth(1);
-            final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
-            subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
-            subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
-
-            // CANCEL EOT
-            subscription.cancel(callContext);
-
-            subscription.uncancel(callContext);
-
-            // MOVE TO EOT + RECHECK
-            testListener.pushExpectedEvent(NextEvent.UNCANCEL);
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-            final Plan currentPlan = subscription.getCurrentPlan();
-            assertEquals(currentPlan.getProduct().getName(), prod);
-            currentPhase = subscription.getCurrentPhase();
-            assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
-
-            assertListenerStatus();
-        } catch (SubscriptionBaseApiException e) {
-            Assert.fail(e.getMessage());
-        }
+    public void testUncancel() throws SubscriptionBillingApiException, SubscriptionBaseApiException {
+        final String prod = "Shotgun";
+        final BillingPeriod term = BillingPeriod.MONTHLY;
+        final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        // CREATE
+        DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
+        final PlanPhase trialPhase = subscription.getCurrentPhase();
+        assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+        // NEXT PHASE
+        final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+        testUtil.checkNextPhaseChange(subscription, 1, expectedPhaseTrialChange);
+
+        // MOVE TO NEXT PHASE
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+        PlanPhase currentPhase = subscription.getCurrentPhase();
+        assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
+
+        // SET CTD + RE READ SUBSCRIPTION + CHANGE PLAN
+        final Duration ctd = testUtil.getDurationMonth(1);
+        final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
+        subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
+        subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+
+        // CANCEL EOT
+        subscription.cancel(callContext);
+
+        subscription.uncancel(callContext);
+
+        // MOVE TO EOT + RECHECK
+        testListener.pushExpectedEvent(NextEvent.UNCANCEL);
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        final Plan currentPlan = subscription.getCurrentPlan();
+        assertEquals(currentPlan.getProduct().getName(), prod);
+        currentPhase = subscription.getCurrentPhase();
+        assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
+
+        assertListenerStatus();
     }
 }
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiChangePlan.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiChangePlan.java
index 9088ebc..4e43b10 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiChangePlan.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiChangePlan.java
@@ -33,9 +33,9 @@ import com.ning.billing.catalog.api.PlanPhase;
 import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
+import com.ning.billing.subscription.api.SubscriptionBillingApiException;
 import com.ning.billing.subscription.events.SubscriptionBaseEvent;
 import com.ning.billing.subscription.events.user.ApiEvent;
-import com.ning.billing.subscription.api.SubscriptionBillingApiException;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -97,385 +97,356 @@ public class TestUserApiChangePlan extends SubscriptionTestSuiteWithEmbeddedDB {
     }
 
     @Test(groups = "slow")
-    public void testChangePlanBundleAlignEOTWithChargeThroughDate() throws SubscriptionBillingApiException {
+    public void testChangePlanBundleAlignEOTWithChargeThroughDate() throws SubscriptionBillingApiException, SubscriptionBaseApiException {
         testChangePlanBundleAlignEOTWithChargeThroughDate("Shotgun", BillingPeriod.ANNUAL, "gunclubDiscount", "Pistol", BillingPeriod.ANNUAL, "gunclubDiscount");
     }
 
     private void testChangePlanBundleAlignEOTWithChargeThroughDate(final String fromProd, final BillingPeriod fromTerm, final String fromPlanSet,
-                                                                   final String toProd, final BillingPeriod toTerm, final String toPlanSet) throws SubscriptionBillingApiException {
-        try {
-            // CREATE
-            DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, fromProd, fromTerm, fromPlanSet);
-            final PlanPhase trialPhase = subscription.getCurrentPhase();
-            final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
-            assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
-            // MOVE TO NEXT PHASE
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-            PlanPhase currentPhase = subscription.getCurrentPhase();
-            assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
-
-            // SET CTD
-            final Duration ctd = testUtil.getDurationMonth(1);
-            final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
-            subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
-
-            // RE READ SUBSCRIPTION + CHANGE PLAN
-            testListener.setNonExpectedMode();
-            testListener.pushExpectedEvent(NextEvent.CHANGE);
-            subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
-            subscription.changePlan(toProd, toTerm, toPlanSet, callContext);
-            assertFalse(testListener.isCompleted(3000));
-            testListener.reset();
-
-            // CHECK CHANGE PLAN
-            currentPhase = subscription.getCurrentPhase();
-            checkChangePlan(subscription, fromProd, ProductCategory.BASE, fromTerm, PhaseType.DISCOUNT);
-
-            // NEXT PHASE
-            final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, currentPhase.getDuration());
-            testUtil.checkNextPhaseChange(subscription, 2, nextExpectedPhaseChange);
-
-            // ALSO VERIFY PENDING CHANGE EVENT
-            final List<SubscriptionBaseEvent> events = dao.getPendingEventsForSubscription(subscription.getId(), internalCallContext);
-            assertTrue(events.get(0) instanceof ApiEvent);
-
-            // MOVE TO EOT
-            testListener.pushExpectedEvent(NextEvent.CHANGE);
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-            subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
-            currentPhase = subscription.getCurrentPhase();
-            checkChangePlan(subscription, toProd, ProductCategory.BASE, toTerm, PhaseType.DISCOUNT);
-
-            assertListenerStatus();
-        } catch (SubscriptionBaseApiException e) {
-            Assert.fail(e.getMessage());
-        }
+                                                                   final String toProd, final BillingPeriod toTerm, final String toPlanSet) throws SubscriptionBillingApiException, SubscriptionBaseApiException {
+        // CREATE
+        DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, fromProd, fromTerm, fromPlanSet);
+        final PlanPhase trialPhase = subscription.getCurrentPhase();
+        final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+        assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+        // MOVE TO NEXT PHASE
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+        PlanPhase currentPhase = subscription.getCurrentPhase();
+        assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
+
+        // SET CTD
+        final Duration ctd = testUtil.getDurationMonth(1);
+        final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
+        subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
+
+        // RE READ SUBSCRIPTION + CHANGE PLAN
+        testListener.setNonExpectedMode();
+        testListener.pushExpectedEvent(NextEvent.CHANGE);
+        subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+        subscription.changePlan(toProd, toTerm, toPlanSet, callContext);
+        assertFalse(testListener.isCompleted(3000));
+        testListener.reset();
+
+        // CHECK CHANGE PLAN
+        currentPhase = subscription.getCurrentPhase();
+        checkChangePlan(subscription, fromProd, ProductCategory.BASE, fromTerm, PhaseType.DISCOUNT);
+
+        // NEXT PHASE
+        final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, currentPhase.getDuration());
+        testUtil.checkNextPhaseChange(subscription, 2, nextExpectedPhaseChange);
+
+        // ALSO VERIFY PENDING CHANGE EVENT
+        final List<SubscriptionBaseEvent> events = dao.getPendingEventsForSubscription(subscription.getId(), internalCallContext);
+        assertTrue(events.get(0) instanceof ApiEvent);
+
+        // MOVE TO EOT
+        testListener.pushExpectedEvent(NextEvent.CHANGE);
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+        currentPhase = subscription.getCurrentPhase();
+        checkChangePlan(subscription, toProd, ProductCategory.BASE, toTerm, PhaseType.DISCOUNT);
+
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testChangePlanBundleAlignIMM() {
+    public void testChangePlanBundleAlignIMM() throws SubscriptionBaseApiException {
         tChangePlanBundleAlignIMM("Shotgun", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, "Assault-Rifle", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME);
     }
 
     private void tChangePlanBundleAlignIMM(final String fromProd, final BillingPeriod fromTerm, final String fromPlanSet,
-                                           final String toProd, final BillingPeriod toTerm, final String toPlanSet) {
+                                           final String toProd, final BillingPeriod toTerm, final String toPlanSet) throws SubscriptionBaseApiException {
+        final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, fromProd, fromTerm, fromPlanSet);
 
-        try {
-            final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, fromProd, fromTerm, fromPlanSet);
+        testListener.pushExpectedEvent(NextEvent.CHANGE);
 
-            testListener.pushExpectedEvent(NextEvent.CHANGE);
+        Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(3));
+        clock.addDeltaFromReality(it.toDurationMillis());
 
-            Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(3));
-            clock.addDeltaFromReality(it.toDurationMillis());
-
-            // CHANGE PLAN IMM
-            subscription.changePlan(toProd, toTerm, toPlanSet, callContext);
-            checkChangePlan(subscription, toProd, ProductCategory.BASE, toTerm, PhaseType.TRIAL);
-
-            assertListenerStatus();
+        // CHANGE PLAN IMM
+        subscription.changePlan(toProd, toTerm, toPlanSet, callContext);
+        checkChangePlan(subscription, toProd, ProductCategory.BASE, toTerm, PhaseType.TRIAL);
 
-            final PlanPhase currentPhase = subscription.getCurrentPhase();
-            final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), currentPhase.getDuration());
-            testUtil.checkNextPhaseChange(subscription, 1, nextExpectedPhaseChange);
+        assertListenerStatus();
 
-            // NEXT PHASE
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(30));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            final DateTime futureNow = clock.getUTCNow();
+        final PlanPhase currentPhase = subscription.getCurrentPhase();
+        final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), currentPhase.getDuration());
+        testUtil.checkNextPhaseChange(subscription, 1, nextExpectedPhaseChange);
 
-            assertTrue(futureNow.isAfter(nextExpectedPhaseChange));
-            assertListenerStatus();
+        // NEXT PHASE
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(30));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        final DateTime futureNow = clock.getUTCNow();
 
-            assertListenerStatus();
-        } catch (SubscriptionBaseApiException e) {
-            Assert.fail(e.getMessage());
-        }
+        assertTrue(futureNow.isAfter(nextExpectedPhaseChange));
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testChangePlanChangePlanAlignEOTWithChargeThroughDate() throws SubscriptionBillingApiException {
+    public void testChangePlanChangePlanAlignEOTWithChargeThroughDate() throws SubscriptionBillingApiException, SubscriptionBaseApiException {
         tChangePlanChangePlanAlignEOTWithChargeThroughDate("Shotgun", BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME, "Assault-Rifle", BillingPeriod.ANNUAL, "rescue");
     }
 
     private void tChangePlanChangePlanAlignEOTWithChargeThroughDate(final String fromProd, final BillingPeriod fromTerm, final String fromPlanSet,
-                                                                    final String toProd, final BillingPeriod toTerm, final String toPlanSet) throws SubscriptionBillingApiException {
-        try {
-            DateTime currentTime = clock.getUTCNow();
-
-            DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, fromProd, fromTerm, fromPlanSet);
-            final PlanPhase trialPhase = subscription.getCurrentPhase();
-            final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
-            assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
-            // MOVE TO NEXT PHASE
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            currentTime = clock.getUTCNow();
-            Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            currentTime = clock.getUTCNow();
-            assertListenerStatus();
-
-            // SET CTD
-            final Duration ctd = testUtil.getDurationMonth(1);
-            final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
-            subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
-
-            // RE READ SUBSCRIPTION + CHECK CURRENT PHASE
-            subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
-            PlanPhase currentPhase = subscription.getCurrentPhase();
-            assertNotNull(currentPhase);
-            assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
-
-            // CHANGE PLAN
-            currentTime = clock.getUTCNow();
-            subscription.changePlan(toProd, toTerm, toPlanSet, callContext);
-
-            checkChangePlan(subscription, fromProd, ProductCategory.BASE, fromTerm, PhaseType.EVERGREEN);
-
-            // CHECK CHANGE DID NOT KICK IN YET
-            testListener.setNonExpectedMode();
-            testListener.pushExpectedEvent(NextEvent.CHANGE);
-            assertFalse(testListener.isCompleted(3000));
-            testListener.reset();
-
-            // MOVE TO AFTER CTD
-            testListener.pushExpectedEvent(NextEvent.CHANGE);
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            currentTime = clock.getUTCNow();
-            assertListenerStatus();
+                                                                    final String toProd, final BillingPeriod toTerm, final String toPlanSet) throws SubscriptionBillingApiException, SubscriptionBaseApiException {
+        DateTime currentTime = clock.getUTCNow();
+
+        DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, fromProd, fromTerm, fromPlanSet);
+        final PlanPhase trialPhase = subscription.getCurrentPhase();
+        final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+        assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+        // MOVE TO NEXT PHASE
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        currentTime = clock.getUTCNow();
+        Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        currentTime = clock.getUTCNow();
+        assertListenerStatus();
+
+        // SET CTD
+        final Duration ctd = testUtil.getDurationMonth(1);
+        final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
+        subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
+
+        // RE READ SUBSCRIPTION + CHECK CURRENT PHASE
+        subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+        PlanPhase currentPhase = subscription.getCurrentPhase();
+        assertNotNull(currentPhase);
+        assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
+
+        // CHANGE PLAN
+        currentTime = clock.getUTCNow();
+        subscription.changePlan(toProd, toTerm, toPlanSet, callContext);
+
+        checkChangePlan(subscription, fromProd, ProductCategory.BASE, fromTerm, PhaseType.EVERGREEN);
+
+        // CHECK CHANGE DID NOT KICK IN YET
+        testListener.setNonExpectedMode();
+        testListener.pushExpectedEvent(NextEvent.CHANGE);
+        assertFalse(testListener.isCompleted(3000));
+        testListener.reset();
+
+        // MOVE TO AFTER CTD
+        testListener.pushExpectedEvent(NextEvent.CHANGE);
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        currentTime = clock.getUTCNow();
+        assertListenerStatus();
+
+        // CHECK CORRECT PRODUCT, PHASE, PLAN SET
+        final String currentProduct = subscription.getCurrentPlan().getProduct().getName();
+        assertNotNull(currentProduct);
+        assertEquals(currentProduct, toProd);
+        currentPhase = subscription.getCurrentPhase();
+        assertNotNull(currentPhase);
+        assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
 
-            // CHECK CORRECT PRODUCT, PHASE, PLAN SET
-            final String currentProduct = subscription.getCurrentPlan().getProduct().getName();
-            assertNotNull(currentProduct);
-            assertEquals(currentProduct, toProd);
-            currentPhase = subscription.getCurrentPhase();
-            assertNotNull(currentPhase);
-            assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
+        // MOVE TIME ABOUT ONE MONTH BEFORE NEXT EXPECTED PHASE CHANGE
+        testListener.setNonExpectedMode();
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(11));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        currentTime = clock.getUTCNow();
+        assertFalse(testListener.isCompleted(3000));
+        testListener.reset();
 
-            // MOVE TIME ABOUT ONE MONTH BEFORE NEXT EXPECTED PHASE CHANGE
-            testListener.setNonExpectedMode();
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(11));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            currentTime = clock.getUTCNow();
-            assertFalse(testListener.isCompleted(3000));
-            testListener.reset();
+        final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(newChargedThroughDate, currentPhase.getDuration());
+        testUtil.checkNextPhaseChange(subscription, 1, nextExpectedPhaseChange);
 
-            final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(newChargedThroughDate, currentPhase.getDuration());
-            testUtil.checkNextPhaseChange(subscription, 1, nextExpectedPhaseChange);
+        // MOVE TIME RIGHT AFTER NEXT EXPECTED PHASE CHANGE
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+        clock.addDeltaFromReality(it.toDurationMillis());
 
-            // MOVE TIME RIGHT AFTER NEXT EXPECTED PHASE CHANGE
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
-            clock.addDeltaFromReality(it.toDurationMillis());
+        currentTime = clock.getUTCNow();
+        assertListenerStatus();
 
-            currentTime = clock.getUTCNow();
-            assertListenerStatus();
-
-            assertListenerStatus();
-        } catch (SubscriptionBaseApiException e) {
-            Assert.fail(e.getMessage());
-        }
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testMultipleChangeLastIMM() throws SubscriptionBillingApiException {
-        try {
-            DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, "Assault-Rifle", BillingPeriod.MONTHLY, "gunclubDiscount");
-            final PlanPhase trialPhase = subscription.getCurrentPhase();
-            assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
-            // MOVE TO NEXT PHASE
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
-            clock.addDeltaFromReality(it.toDurationMillis());
-
-            assertListenerStatus();
-
-            // SET CTD
-            final List<Duration> durationList = new ArrayList<Duration>();
-            durationList.add(trialPhase.getDuration());
-            //durationList.add(subscription.getCurrentPhase().getDuration());
-            final DateTime startDiscountPhase = TestSubscriptionHelper.addDuration(subscription.getStartDate(), durationList);
-            final Duration ctd = testUtil.getDurationMonth(1);
-            final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(startDiscountPhase, ctd);
-            subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
-            subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
-
-            // CHANGE EOT
-            testListener.setNonExpectedMode();
-            testListener.pushExpectedEvent(NextEvent.CHANGE);
-            subscription.changePlan("Pistol", BillingPeriod.MONTHLY, "gunclubDiscount", callContext);
-            assertFalse(testListener.isCompleted(3000));
-            testListener.reset();
-
-            // CHANGE
-            testListener.pushExpectedEvent(NextEvent.CHANGE);
-            subscription.changePlan("Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount", callContext);
-            assertListenerStatus();
+    public void testMultipleChangeLastIMM() throws SubscriptionBillingApiException, SubscriptionBaseApiException {
+        DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, "Assault-Rifle", BillingPeriod.MONTHLY, "gunclubDiscount");
+        final PlanPhase trialPhase = subscription.getCurrentPhase();
+        assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+        // MOVE TO NEXT PHASE
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+        clock.addDeltaFromReality(it.toDurationMillis());
+
+        assertListenerStatus();
+
+        // SET CTD
+        final List<Duration> durationList = new ArrayList<Duration>();
+        durationList.add(trialPhase.getDuration());
+        //durationList.add(subscription.getCurrentPhase().getDuration());
+        final DateTime startDiscountPhase = TestSubscriptionHelper.addDuration(subscription.getStartDate(), durationList);
+        final Duration ctd = testUtil.getDurationMonth(1);
+        final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(startDiscountPhase, ctd);
+        subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
+        subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+
+        // CHANGE EOT
+        testListener.setNonExpectedMode();
+        testListener.pushExpectedEvent(NextEvent.CHANGE);
+        subscription.changePlan("Pistol", BillingPeriod.MONTHLY, "gunclubDiscount", callContext);
+        assertFalse(testListener.isCompleted(3000));
+        testListener.reset();
+
+        // CHANGE
+        testListener.pushExpectedEvent(NextEvent.CHANGE);
+        subscription.changePlan("Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount", callContext);
+        assertListenerStatus();
 
-            final Plan currentPlan = subscription.getCurrentPlan();
-            assertNotNull(currentPlan);
-            assertEquals(currentPlan.getProduct().getName(), "Assault-Rifle");
-            assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
-            assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
+        final Plan currentPlan = subscription.getCurrentPlan();
+        assertNotNull(currentPlan);
+        assertEquals(currentPlan.getProduct().getName(), "Assault-Rifle");
+        assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+        assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
 
-            final PlanPhase currentPhase = subscription.getCurrentPhase();
-            assertNotNull(currentPhase);
-            assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
+        final PlanPhase currentPhase = subscription.getCurrentPhase();
+        assertNotNull(currentPhase);
+        assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
 
-            assertListenerStatus();
-        } catch (SubscriptionBaseApiException e) {
-            Assert.fail(e.getMessage());
-        }
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testMultipleChangeLastEOT() throws SubscriptionBillingApiException {
-        try {
-            DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, "Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount");
-            final PlanPhase trialPhase = subscription.getCurrentPhase();
-            assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-            // SET CTD
-            final List<Duration> durationList = new ArrayList<Duration>();
-            durationList.add(trialPhase.getDuration());
-            final DateTime startDiscountPhase = TestSubscriptionHelper.addDuration(subscription.getStartDate(), durationList);
-            final Duration ctd = testUtil.getDurationMonth(1);
-            final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(startDiscountPhase, ctd);
-            subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
-            subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
-
-            // CHANGE EOT
-            testListener.setNonExpectedMode();
-            testListener.pushExpectedEvent(NextEvent.CHANGE);
-            subscription.changePlan("Shotgun", BillingPeriod.MONTHLY, "gunclubDiscount", callContext);
-            assertFalse(testListener.isCompleted(3000));
-            testListener.reset();
-
-            // CHANGE EOT
-            testListener.setNonExpectedMode();
-            testListener.pushExpectedEvent(NextEvent.CHANGE);
-            subscription.changePlan("Pistol", BillingPeriod.ANNUAL, "gunclubDiscount", callContext);
-            assertFalse(testListener.isCompleted(3000));
-            testListener.reset();
-
-            // CHECK NO CHANGE OCCURED YET
-            Plan currentPlan = subscription.getCurrentPlan();
-            assertNotNull(currentPlan);
-            assertEquals(currentPlan.getProduct().getName(), "Assault-Rifle");
-            assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
-            assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
+    public void testMultipleChangeLastEOT() throws SubscriptionBillingApiException, SubscriptionBaseApiException {
+        DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, "Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount");
+        final PlanPhase trialPhase = subscription.getCurrentPhase();
+        assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        // SET CTD
+        final List<Duration> durationList = new ArrayList<Duration>();
+        durationList.add(trialPhase.getDuration());
+        final DateTime startDiscountPhase = TestSubscriptionHelper.addDuration(subscription.getStartDate(), durationList);
+        final Duration ctd = testUtil.getDurationMonth(1);
+        final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(startDiscountPhase, ctd);
+        subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
+        subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+
+        // CHANGE EOT
+        testListener.setNonExpectedMode();
+        testListener.pushExpectedEvent(NextEvent.CHANGE);
+        subscription.changePlan("Shotgun", BillingPeriod.MONTHLY, "gunclubDiscount", callContext);
+        assertFalse(testListener.isCompleted(3000));
+        testListener.reset();
+
+        // CHANGE EOT
+        testListener.setNonExpectedMode();
+        testListener.pushExpectedEvent(NextEvent.CHANGE);
+        subscription.changePlan("Pistol", BillingPeriod.ANNUAL, "gunclubDiscount", callContext);
+        assertFalse(testListener.isCompleted(3000));
+        testListener.reset();
+
+        // CHECK NO CHANGE OCCURED YET
+        Plan currentPlan = subscription.getCurrentPlan();
+        assertNotNull(currentPlan);
+        assertEquals(currentPlan.getProduct().getName(), "Assault-Rifle");
+        assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+        assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
 
-            PlanPhase currentPhase = subscription.getCurrentPhase();
-            assertNotNull(currentPhase);
-            assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
+        PlanPhase currentPhase = subscription.getCurrentPhase();
+        assertNotNull(currentPhase);
+        assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
 
-            // ACTIVATE CHNAGE BY MOVING AFTER CTD
-            testListener.pushExpectedEvent(NextEvent.CHANGE);
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
-            clock.addDeltaFromReality(it.toDurationMillis());
+        // ACTIVATE CHNAGE BY MOVING AFTER CTD
+        testListener.pushExpectedEvent(NextEvent.CHANGE);
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+        clock.addDeltaFromReality(it.toDurationMillis());
 
-            assertListenerStatus();
+        assertListenerStatus();
 
-            currentPlan = subscription.getCurrentPlan();
-            assertNotNull(currentPlan);
-            assertEquals(currentPlan.getProduct().getName(), "Pistol");
-            assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
-            assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
+        currentPlan = subscription.getCurrentPlan();
+        assertNotNull(currentPlan);
+        assertEquals(currentPlan.getProduct().getName(), "Pistol");
+        assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+        assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
 
-            currentPhase = subscription.getCurrentPhase();
-            assertNotNull(currentPhase);
-            assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
+        currentPhase = subscription.getCurrentPhase();
+        assertNotNull(currentPhase);
+        assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
 
-            // MOVE TO NEXT PHASE
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(6));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-            subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+        // MOVE TO NEXT PHASE
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(6));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+        subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
 
-            currentPlan = subscription.getCurrentPlan();
-            assertNotNull(currentPlan);
-            assertEquals(currentPlan.getProduct().getName(), "Pistol");
-            assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
-            assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
+        currentPlan = subscription.getCurrentPlan();
+        assertNotNull(currentPlan);
+        assertEquals(currentPlan.getProduct().getName(), "Pistol");
+        assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+        assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
 
-            currentPhase = subscription.getCurrentPhase();
-            assertNotNull(currentPhase);
-            assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
+        currentPhase = subscription.getCurrentPhase();
+        assertNotNull(currentPhase);
+        assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
 
-            assertListenerStatus();
-        } catch (SubscriptionBaseApiException e) {
-            Assert.fail(e.getMessage());
-        }
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testCorrectPhaseAlignmentOnChange() {
-        try {
-            DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME);
-            PlanPhase trialPhase = subscription.getCurrentPhase();
-            assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
-
-            // MOVE 2 DAYS AHEAD
-            Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(2));
-            clock.addDeltaFromReality(it.toDurationMillis());
-
-            // CHANGE IMMEDIATE TO A 3 PHASES PLAN
-            testListener.reset();
-            testListener.pushExpectedEvent(NextEvent.CHANGE);
-            subscription.changePlan("Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount", callContext);
-            assertListenerStatus();
-            testListener.reset();
-
-            // CHECK EVERYTHING LOOKS CORRECT
-            final Plan currentPlan = subscription.getCurrentPlan();
-            assertNotNull(currentPlan);
-            assertEquals(currentPlan.getProduct().getName(), "Assault-Rifle");
-            assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
-            assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
-
-            trialPhase = subscription.getCurrentPhase();
-            assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+    public void testCorrectPhaseAlignmentOnChange() throws SubscriptionBaseApiException {
+        DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME);
+        PlanPhase trialPhase = subscription.getCurrentPhase();
+        assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+        // MOVE 2 DAYS AHEAD
+        Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(2));
+        clock.addDeltaFromReality(it.toDurationMillis());
+
+        // CHANGE IMMEDIATE TO A 3 PHASES PLAN
+        testListener.reset();
+        testListener.pushExpectedEvent(NextEvent.CHANGE);
+        subscription.changePlan("Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount", callContext);
+        assertListenerStatus();
+        testListener.reset();
+
+        // CHECK EVERYTHING LOOKS CORRECT
+        final Plan currentPlan = subscription.getCurrentPlan();
+        assertNotNull(currentPlan);
+        assertEquals(currentPlan.getProduct().getName(), "Assault-Rifle");
+        assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+        assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
 
-            // MOVE AFTER TRIAL PERIOD -> DISCOUNT
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(30));
-            clock.addDeltaFromReality(it.toDurationMillis());
+        trialPhase = subscription.getCurrentPhase();
+        assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
 
-            assertListenerStatus();
+        // MOVE AFTER TRIAL PERIOD -> DISCOUNT
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(30));
+        clock.addDeltaFromReality(it.toDurationMillis());
 
-            trialPhase = subscription.getCurrentPhase();
-            assertEquals(trialPhase.getPhaseType(), PhaseType.DISCOUNT);
+        assertListenerStatus();
 
-            subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+        trialPhase = subscription.getCurrentPhase();
+        assertEquals(trialPhase.getPhaseType(), PhaseType.DISCOUNT);
 
-            final DateTime expectedNextPhaseDate = subscription.getStartDate().plusDays(30).plusMonths(6);
-            final SubscriptionBaseTransition nextPhase = subscription.getPendingTransition();
+        subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
 
-            final DateTime nextPhaseEffectiveDate = nextPhase.getEffectiveTransitionTime();
-            assertEquals(nextPhaseEffectiveDate, expectedNextPhaseDate);
+        final DateTime expectedNextPhaseDate = subscription.getStartDate().plusDays(30).plusMonths(6);
+        final SubscriptionBaseTransition nextPhase = subscription.getPendingTransition();
 
-            assertListenerStatus();
+        final DateTime nextPhaseEffectiveDate = nextPhase.getEffectiveTransitionTime();
+        assertEquals(nextPhaseEffectiveDate, expectedNextPhaseDate);
 
-        } catch (SubscriptionBaseApiException e) {
-            Assert.fail(e.getMessage());
-        }
+        assertListenerStatus();
     }
 }
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCreate.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCreate.java
index b9279a3..de6eef8 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCreate.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCreate.java
@@ -20,8 +20,6 @@ import java.util.List;
 
 import org.joda.time.DateTime;
 import org.joda.time.Interval;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
@@ -44,260 +42,223 @@ import static org.testng.Assert.assertTrue;
 
 public class TestUserApiCreate extends SubscriptionTestSuiteWithEmbeddedDB {
 
-    private static final Logger log = LoggerFactory.getLogger(TestUserApiCreate.class);
-
-
     @Test(groups = "slow")
-    public void testCreateBundlesWithSameExternalKeys() {
-        try {
-            final DateTime init = clock.getUTCNow();
-            final DateTime requestedDate = init.minusYears(1);
-
-            final String productName = "Shotgun";
-            final BillingPeriod term = BillingPeriod.MONTHLY;
-            final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
+    public void testCreateBundlesWithSameExternalKeys() throws SubscriptionBaseApiException {
+        final DateTime init = clock.getUTCNow();
+        final DateTime requestedDate = init.minusYears(1);
 
+        final String productName = "Shotgun";
+        final BillingPeriod term = BillingPeriod.MONTHLY;
+        final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
 
-            testListener.pushExpectedEvents(NextEvent.CREATE, NextEvent.PHASE);
-            final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
-                                                                                                                              testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
-            assertListenerStatus();
-            assertNotNull(subscription);
-
-            try {
-                final SubscriptionBaseBundle newBundle = subscriptionInternalApi.createBundleForAccount(bundle.getAccountId(), DefaultSubscriptionTestInitializer.DEFAULT_BUNDLE_KEY, internalCallContext);
-
-                Assert.fail("Unexpected success to create a bundle");
-            } catch (SubscriptionBaseApiException e) {
-                Assert.assertEquals(e.getCode(), ErrorCode.SUB_CREATE_ACTIVE_BUNDLE_KEY_EXISTS.getCode());
-            }
-
-            testListener.pushExpectedEvent(NextEvent.CANCEL);
-            subscription.cancelWithDate(clock.getUTCNow(), callContext);
-            assertListenerStatus();
+        testListener.pushExpectedEvents(NextEvent.CREATE, NextEvent.PHASE);
+        final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
+                                                                                                                          testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
+        assertListenerStatus();
+        assertNotNull(subscription);
 
+        try {
             final SubscriptionBaseBundle newBundle = subscriptionInternalApi.createBundleForAccount(bundle.getAccountId(), DefaultSubscriptionTestInitializer.DEFAULT_BUNDLE_KEY, internalCallContext);
-            assertNotNull(newBundle);
-            assertEquals(newBundle.getOriginalCreatedDate().compareTo(bundle.getCreatedDate()), 0);
-
-            testListener.pushExpectedEvents(NextEvent.CREATE, NextEvent.PHASE);
-            final DefaultSubscriptionBase newSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(newBundle.getId(),
-                                                                                                                                 testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
-            assertListenerStatus();
-            assertNotNull(newSubscription);
-
 
+            Assert.fail("Unexpected success to create a bundle");
         } catch (SubscriptionBaseApiException e) {
-            log.error("Unexpected exception", e);
-            Assert.fail(e.getMessage());
+            Assert.assertEquals(e.getCode(), ErrorCode.SUB_CREATE_ACTIVE_BUNDLE_KEY_EXISTS.getCode());
         }
-    }
 
-    @Test(groups = "slow")
-    public void testCreateWithRequestedDate() {
-        try {
-            final DateTime init = clock.getUTCNow();
-            final DateTime requestedDate = init.minusYears(1);
+        testListener.pushExpectedEvent(NextEvent.CANCEL);
+        subscription.cancelWithDate(clock.getUTCNow(), callContext);
+        assertListenerStatus();
 
-            final String productName = "Shotgun";
-            final BillingPeriod term = BillingPeriod.MONTHLY;
-            final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
+        final SubscriptionBaseBundle newBundle = subscriptionInternalApi.createBundleForAccount(bundle.getAccountId(), DefaultSubscriptionTestInitializer.DEFAULT_BUNDLE_KEY, internalCallContext);
+        assertNotNull(newBundle);
+        assertEquals(newBundle.getOriginalCreatedDate().compareTo(bundle.getCreatedDate()), 0);
 
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            testListener.pushExpectedEvent(NextEvent.CREATE);
+        testListener.pushExpectedEvents(NextEvent.CREATE, NextEvent.PHASE);
+        final DefaultSubscriptionBase newSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(newBundle.getId(),
+                                                                                                                             testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
+        assertListenerStatus();
+        assertNotNull(newSubscription);
+    }
 
-            final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
-                                                                                                                              testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
-            assertNotNull(subscription);
+    @Test(groups = "slow")
+    public void testCreateWithRequestedDate() throws SubscriptionBaseApiException {
+        final DateTime init = clock.getUTCNow();
+        final DateTime requestedDate = init.minusYears(1);
 
-            //
-            // In addition to Alignment phase we also test SubscriptionBaseTransition eventIds and created dates.
-            // Keep tracks of row events to compare with ids and created dates returned by SubscriptionBaseTransition later.
-            //
-            final List<SubscriptionBaseEvent> events = subscription.getEvents();
-            Assert.assertEquals(events.size(), 2);
+        final String productName = "Shotgun";
+        final BillingPeriod term = BillingPeriod.MONTHLY;
+        final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
 
-            final SubscriptionBaseEvent trialEvent = events.get(0);
-            final SubscriptionBaseEvent phaseEvent = events.get(1);
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        testListener.pushExpectedEvent(NextEvent.CREATE);
 
+        final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
+                                                                                                                          testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
+        assertNotNull(subscription);
 
-            assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
-            //assertEquals(subscription.getAccount(), account.getId());
-            assertEquals(subscription.getBundleId(), bundle.getId());
-            assertEquals(subscription.getStartDate(), requestedDate);
+        //
+        // In addition to Alignment phase we also test SubscriptionBaseTransition eventIds and created dates.
+        // Keep tracks of row events to compare with ids and created dates returned by SubscriptionBaseTransition later.
+        //
+        final List<SubscriptionBaseEvent> events = subscription.getEvents();
+        Assert.assertEquals(events.size(), 2);
 
-            assertListenerStatus();
+        final SubscriptionBaseEvent trialEvent = events.get(0);
+        final SubscriptionBaseEvent phaseEvent = events.get(1);
 
-            final SubscriptionBaseTransition transition = subscription.getPreviousTransition();
+        assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
+        //assertEquals(subscription.getAccount(), account.getId());
+        assertEquals(subscription.getBundleId(), bundle.getId());
+        assertEquals(subscription.getStartDate(), requestedDate);
 
-            assertEquals(transition.getPreviousEventId(), trialEvent.getId());
-            assertEquals(transition.getNextEventId(), phaseEvent.getId());
+        assertListenerStatus();
 
-            assertEquals(transition.getPreviousEventCreatedDate().compareTo(trialEvent.getCreatedDate()), 0);
-            assertEquals(transition.getNextEventCreatedDate().compareTo(phaseEvent.getCreatedDate()), 0);
+        final SubscriptionBaseTransition transition = subscription.getPreviousTransition();
 
-        } catch (SubscriptionBaseApiException e) {
-            log.error("Unexpected exception", e);
-            Assert.fail(e.getMessage());
-        }
+        assertEquals(transition.getPreviousEventId(), trialEvent.getId());
+        assertEquals(transition.getNextEventId(), phaseEvent.getId());
+
+        assertEquals(transition.getPreviousEventCreatedDate().compareTo(trialEvent.getCreatedDate()), 0);
+        assertEquals(transition.getNextEventCreatedDate().compareTo(phaseEvent.getCreatedDate()), 0);
     }
 
     @Test(groups = "slow")
-    public void testCreateWithInitialPhase() {
-        try {
-            final DateTime init = clock.getUTCNow();
-
-            final String productName = "Shotgun";
-            final BillingPeriod term = BillingPeriod.MONTHLY;
-            final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
+    public void testCreateWithInitialPhase() throws SubscriptionBaseApiException {
+        final DateTime init = clock.getUTCNow();
 
-            testListener.pushExpectedEvent(NextEvent.CREATE);
+        final String productName = "Shotgun";
+        final BillingPeriod term = BillingPeriod.MONTHLY;
+        final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
 
-            final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
-                                                                                                                              testUtil.getProductSpecifier(productName, planSetName, term, PhaseType.EVERGREEN), clock.getUTCNow(), internalCallContext);
-            assertNotNull(subscription);
+        testListener.pushExpectedEvent(NextEvent.CREATE);
 
-            assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
-            //assertEquals(subscription.getAccount(), account.getId());
-            assertEquals(subscription.getBundleId(), bundle.getId());
-            testUtil.assertDateWithin(subscription.getStartDate(), init, clock.getUTCNow());
-            testUtil.assertDateWithin(subscription.getBundleStartDate(), init, clock.getUTCNow());
+        final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
+                                                                                                                          testUtil.getProductSpecifier(productName, planSetName, term, PhaseType.EVERGREEN), clock.getUTCNow(), internalCallContext);
+        assertNotNull(subscription);
 
-            final Plan currentPlan = subscription.getCurrentPlan();
-            assertNotNull(currentPlan);
-            assertEquals(currentPlan.getProduct().getName(), productName);
-            assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
-            assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.MONTHLY);
+        assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
+        //assertEquals(subscription.getAccount(), account.getId());
+        assertEquals(subscription.getBundleId(), bundle.getId());
+        testUtil.assertDateWithin(subscription.getStartDate(), init, clock.getUTCNow());
+        testUtil.assertDateWithin(subscription.getBundleStartDate(), init, clock.getUTCNow());
 
-            final PlanPhase currentPhase = subscription.getCurrentPhase();
-            assertNotNull(currentPhase);
-            assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
+        final Plan currentPlan = subscription.getCurrentPlan();
+        assertNotNull(currentPlan);
+        assertEquals(currentPlan.getProduct().getName(), productName);
+        assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+        assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.MONTHLY);
 
-            assertListenerStatus();
+        final PlanPhase currentPhase = subscription.getCurrentPhase();
+        assertNotNull(currentPhase);
+        assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
 
-        } catch (SubscriptionBaseApiException e) {
-            Assert.fail(e.getMessage());
-        }
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testSimpleCreateSubscription() {
-        try {
-            final DateTime init = clock.getUTCNow();
-
-            final String productName = "Shotgun";
-            final BillingPeriod term = BillingPeriod.MONTHLY;
-            final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
-
-            testListener.pushExpectedEvent(NextEvent.CREATE);
-
-            final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
-                                                                                                                              testUtil.getProductSpecifier(productName, planSetName, term, null),
-                                                                                                                              clock.getUTCNow(), internalCallContext);
-            assertNotNull(subscription);
-
-            assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
-            //assertEquals(subscription.getAccount(), account.getId());
-            assertEquals(subscription.getBundleId(), bundle.getId());
-            testUtil.assertDateWithin(subscription.getStartDate(), init, clock.getUTCNow());
-            testUtil.assertDateWithin(subscription.getBundleStartDate(), init, clock.getUTCNow());
-
-            final Plan currentPlan = subscription.getCurrentPlan();
-            assertNotNull(currentPlan);
-            assertEquals(currentPlan.getProduct().getName(), productName);
-            assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
-            assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.MONTHLY);
-
-            final PlanPhase currentPhase = subscription.getCurrentPhase();
-            assertNotNull(currentPhase);
-            assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
-            assertListenerStatus();
-
-            final List<SubscriptionBaseEvent> events = dao.getPendingEventsForSubscription(subscription.getId(), internalCallContext);
-            assertNotNull(events);
-            testUtil.printEvents(events);
-            assertTrue(events.size() == 1);
-            assertTrue(events.get(0) instanceof PhaseEvent);
-            final DateTime nextPhaseChange = ((PhaseEvent) events.get(0)).getEffectiveDate();
-            final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), currentPhase.getDuration());
-            assertEquals(nextPhaseChange, nextExpectedPhaseChange);
-
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
-            clock.addDeltaFromReality(it.toDurationMillis());
-
-            final DateTime futureNow = clock.getUTCNow();
-            assertTrue(futureNow.isAfter(nextPhaseChange));
-
-            assertListenerStatus();
-
-            assertListenerStatus();
-        } catch (SubscriptionBaseApiException e) {
-            Assert.fail(e.getMessage());
-        }
+    public void testSimpleCreateSubscription() throws SubscriptionBaseApiException {
+        final DateTime init = clock.getUTCNow();
+
+        final String productName = "Shotgun";
+        final BillingPeriod term = BillingPeriod.MONTHLY;
+        final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        testListener.pushExpectedEvent(NextEvent.CREATE);
+
+        final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
+                                                                                                                          testUtil.getProductSpecifier(productName, planSetName, term, null),
+                                                                                                                          clock.getUTCNow(), internalCallContext);
+        assertNotNull(subscription);
+
+        assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
+        //assertEquals(subscription.getAccount(), account.getId());
+        assertEquals(subscription.getBundleId(), bundle.getId());
+        testUtil.assertDateWithin(subscription.getStartDate(), init, clock.getUTCNow());
+        testUtil.assertDateWithin(subscription.getBundleStartDate(), init, clock.getUTCNow());
+
+        final Plan currentPlan = subscription.getCurrentPlan();
+        assertNotNull(currentPlan);
+        assertEquals(currentPlan.getProduct().getName(), productName);
+        assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+        assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.MONTHLY);
+
+        final PlanPhase currentPhase = subscription.getCurrentPhase();
+        assertNotNull(currentPhase);
+        assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
+        assertListenerStatus();
+
+        final List<SubscriptionBaseEvent> events = dao.getPendingEventsForSubscription(subscription.getId(), internalCallContext);
+        assertNotNull(events);
+        testUtil.printEvents(events);
+        assertTrue(events.size() == 1);
+        assertTrue(events.get(0) instanceof PhaseEvent);
+        final DateTime nextPhaseChange = ((PhaseEvent) events.get(0)).getEffectiveDate();
+        final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), currentPhase.getDuration());
+        assertEquals(nextPhaseChange, nextExpectedPhaseChange);
+
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+        clock.addDeltaFromReality(it.toDurationMillis());
+
+        final DateTime futureNow = clock.getUTCNow();
+        assertTrue(futureNow.isAfter(nextPhaseChange));
+
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testSimpleSubscriptionThroughPhases() {
-        try {
-            final String productName = "Pistol";
-            final BillingPeriod term = BillingPeriod.ANNUAL;
-            final String planSetName = "gunclubDiscount";
-
-            testListener.pushExpectedEvent(NextEvent.CREATE);
-
-            // CREATE SUBSCRIPTION
-            DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
-                                                                                                                        testUtil.getProductSpecifier(productName, planSetName, term, null), clock.getUTCNow(), internalCallContext);
-            assertNotNull(subscription);
-
-            PlanPhase currentPhase = subscription.getCurrentPhase();
-            assertNotNull(currentPhase);
-            assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
-            assertListenerStatus();
-
-            // MOVE TO DISCOUNT PHASE
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-            currentPhase = subscription.getCurrentPhase();
-            assertNotNull(currentPhase);
-            assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
-
-            // MOVE TO EVERGREEN PHASE + RE-READ SUBSCRIPTION
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusYears(1));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-            subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
-            currentPhase = subscription.getCurrentPhase();
-            assertNotNull(currentPhase);
-            assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
-
-            assertListenerStatus();
-        } catch (SubscriptionBaseApiException e) {
-            Assert.fail(e.getMessage());
-        }
+    public void testSimpleSubscriptionThroughPhases() throws SubscriptionBaseApiException {
+        final String productName = "Pistol";
+        final BillingPeriod term = BillingPeriod.ANNUAL;
+        final String planSetName = "gunclubDiscount";
+
+        testListener.pushExpectedEvent(NextEvent.CREATE);
+
+        // CREATE SUBSCRIPTION
+        DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
+                                                                                                                    testUtil.getProductSpecifier(productName, planSetName, term, null), clock.getUTCNow(), internalCallContext);
+        assertNotNull(subscription);
+
+        PlanPhase currentPhase = subscription.getCurrentPhase();
+        assertNotNull(currentPhase);
+        assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
+        assertListenerStatus();
+
+        // MOVE TO DISCOUNT PHASE
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+        currentPhase = subscription.getCurrentPhase();
+        assertNotNull(currentPhase);
+        assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
+
+        // MOVE TO EVERGREEN PHASE + RE-READ SUBSCRIPTION
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusYears(1));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+        currentPhase = subscription.getCurrentPhase();
+        assertNotNull(currentPhase);
+        assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
+
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testSubscriptionWithAddOn() {
-        try {
-            final String productName = "Shotgun";
-            final BillingPeriod term = BillingPeriod.ANNUAL;
-            final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
+    public void testSubscriptionWithAddOn() throws SubscriptionBaseApiException {
+        final String productName = "Shotgun";
+        final BillingPeriod term = BillingPeriod.ANNUAL;
+        final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
 
-            testListener.pushExpectedEvent(NextEvent.CREATE);
+        testListener.pushExpectedEvent(NextEvent.CREATE);
 
-            final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
-                                                                                                                              testUtil.getProductSpecifier(productName, planSetName, term, null), clock.getUTCNow(), internalCallContext);
-            assertNotNull(subscription);
+        final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
+                                                                                                                          testUtil.getProductSpecifier(productName, planSetName, term, null), clock.getUTCNow(), internalCallContext);
+        assertNotNull(subscription);
 
-            assertListenerStatus();
-        } catch (SubscriptionBaseApiException e) {
-            Assert.fail(e.getMessage());
-        }
+        assertListenerStatus();
     }
 }
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiError.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiError.java
index 5bd00ee..23a1b15 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiError.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiError.java
@@ -22,7 +22,6 @@ import javax.annotation.Nullable;
 
 import org.joda.time.DateTime;
 import org.joda.time.Interval;
-import org.mockito.Mockito;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
@@ -37,17 +36,12 @@ import com.ning.billing.clock.DefaultClock;
 import com.ning.billing.subscription.SubscriptionTestSuiteNoDB;
 import com.ning.billing.subscription.api.SubscriptionBase;
 import com.ning.billing.subscription.exceptions.SubscriptionBaseError;
-import com.ning.billing.util.callcontext.TenantContext;
 
 import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
 
 public class TestUserApiError extends SubscriptionTestSuiteNoDB {
 
-    private final TenantContext tenantContext = Mockito.mock(TenantContext.class);
-
     @Test(groups = "fast")
     public void testCreateSubscriptionBadCatalog() {
         // WRONG PRODUCTS
@@ -73,76 +67,49 @@ public class TestUserApiError extends SubscriptionTestSuiteNoDB {
     }
 
     @Test(groups = "fast")
-    public void testCreateSubscriptionBPExists() {
-        try {
-            testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME);
-            tCreateSubscriptionInternal(bundle.getId(), "Shotgun", BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME, ErrorCode.SUB_CREATE_BP_EXISTS);
-        } catch (Exception e) {
-            Assert.fail(e.toString());
-        }
+    public void testCreateSubscriptionBPExists() throws SubscriptionBaseApiException {
+        testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME);
+        tCreateSubscriptionInternal(bundle.getId(), "Shotgun", BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME, ErrorCode.SUB_CREATE_BP_EXISTS);
     }
 
     @Test(groups = "fast")
-    public void testCreateSubscriptionAddOnNotAvailable() {
-        try {
-            final UUID accountId = UUID.randomUUID();
-            final SubscriptionBaseBundle aoBundle = subscriptionInternalApi.createBundleForAccount(accountId, "myAOBundle", internalCallContext);
-            testUtil.createSubscriptionWithBundle(aoBundle.getId(), "Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
-            tCreateSubscriptionInternal(aoBundle.getId(), "Telescopic-Scope", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, ErrorCode.SUB_CREATE_AO_NOT_AVAILABLE);
-        } catch (Exception e) {
-            Assert.fail(e.toString());
-        }
+    public void testCreateSubscriptionAddOnNotAvailable() throws SubscriptionBaseApiException {
+        final UUID accountId = UUID.randomUUID();
+        final SubscriptionBaseBundle aoBundle = subscriptionInternalApi.createBundleForAccount(accountId, "myAOBundle", internalCallContext);
+        testUtil.createSubscriptionWithBundle(aoBundle.getId(), "Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
+        tCreateSubscriptionInternal(aoBundle.getId(), "Telescopic-Scope", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, ErrorCode.SUB_CREATE_AO_NOT_AVAILABLE);
     }
 
     @Test(groups = "fast")
-    public void testCreateSubscriptionAddOnIncluded() {
-        log.info("Starting testCreateSubscriptionAddOnIncluded");
-        try {
-            final UUID accountId = UUID.randomUUID();
-            final SubscriptionBaseBundle aoBundle = subscriptionInternalApi.createBundleForAccount(accountId, "myAOBundle", internalCallContext);
-            testUtil.createSubscriptionWithBundle(aoBundle.getId(), "Assault-Rifle", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
-            tCreateSubscriptionInternal(aoBundle.getId(), "Telescopic-Scope", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, ErrorCode.SUB_CREATE_AO_ALREADY_INCLUDED);
-        } catch (Exception e) {
-            Assert.fail(e.toString());
-        }
+    public void testCreateSubscriptionAddOnIncluded() throws SubscriptionBaseApiException {
+        final UUID accountId = UUID.randomUUID();
+        final SubscriptionBaseBundle aoBundle = subscriptionInternalApi.createBundleForAccount(accountId, "myAOBundle", internalCallContext);
+        testUtil.createSubscriptionWithBundle(aoBundle.getId(), "Assault-Rifle", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
+        tCreateSubscriptionInternal(aoBundle.getId(), "Telescopic-Scope", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, ErrorCode.SUB_CREATE_AO_ALREADY_INCLUDED);
     }
 
     private void tCreateSubscriptionInternal(@Nullable final UUID bundleId, @Nullable final String productName,
                                              @Nullable final BillingPeriod term, final String planSet, final ErrorCode expected) {
         try {
             subscriptionInternalApi.createSubscription(bundleId,
-                                              testUtil.getProductSpecifier(productName, planSet, term, null),
-                                              clock.getUTCNow(), internalCallContext);
+                                                       testUtil.getProductSpecifier(productName, planSet, term, null),
+                                                       clock.getUTCNow(), internalCallContext);
             Assert.fail("Exception expected, error code: " + expected);
         } catch (SubscriptionBaseApiException e) {
             assertEquals(e.getCode(), expected.getCode());
-            try {
-                log.info(e.getMessage());
-            } catch (Throwable el) {
-                assertFalse(true);
-            }
         }
     }
 
     @Test(groups = "fast")
-    public void testChangeSubscriptionNonActive() {
+    public void testChangeSubscriptionNonActive() throws SubscriptionBaseApiException {
+        final SubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME);
+
+        testListener.pushExpectedEvent(NextEvent.CANCEL);
+        subscription.cancelWithDate(clock.getUTCNow(), callContext);
         try {
-            final SubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME);
-
-            testListener.pushExpectedEvent(NextEvent.CANCEL);
-            subscription.cancelWithDate(clock.getUTCNow(), callContext);
-            try {
-                subscription.changePlanWithDate("Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow(), callContext);
-            } catch (SubscriptionBaseApiException e) {
-                assertEquals(e.getCode(), ErrorCode.SUB_CHANGE_NON_ACTIVE.getCode());
-                try {
-                    log.info(e.getMessage());
-                } catch (Throwable el) {
-                    assertFalse(true);
-                }
-            }
-        } catch (Exception e) {
-            Assert.fail(e.toString());
+            subscription.changePlanWithDate("Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow(), callContext);
+        } catch (SubscriptionBaseApiException e) {
+            assertEquals(e.getCode(), ErrorCode.SUB_CHANGE_NON_ACTIVE.getCode());
         }
     }
 
@@ -165,66 +132,44 @@ public class TestUserApiError extends SubscriptionTestSuiteNoDB {
     }
 
     @Test(groups = "fast")
-    public void testChangeSubscriptionFutureCancelled() {
+    public void testChangeSubscriptionFutureCancelled() throws SubscriptionBaseApiException {
+        SubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME);
+        final PlanPhase trialPhase = subscription.getCurrentPhase();
+
+        // MOVE TO NEXT PHASE
+        final PlanPhase currentPhase = subscription.getCurrentPhase();
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+        clock.addDeltaFromReality(it.toDurationMillis());
+        assertListenerStatus();
+
+        // SET CTD TO CANCEL IN FUTURE
+        final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+        final Duration ctd = testUtil.getDurationMonth(1);
+        final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
+        subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
+
+        subscription = subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+
+        subscription.cancelWithPolicy(BillingActionPolicy.END_OF_TERM, callContext);
         try {
-            SubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME);
-            final PlanPhase trialPhase = subscription.getCurrentPhase();
-
-            // MOVE TO NEXT PHASE
-            final PlanPhase currentPhase = subscription.getCurrentPhase();
-            testListener.pushExpectedEvent(NextEvent.PHASE);
-            final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
-            clock.addDeltaFromReality(it.toDurationMillis());
-            assertListenerStatus();
-
-            // SET CTD TO CANCEL IN FUTURE
-            final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
-            final Duration ctd = testUtil.getDurationMonth(1);
-            final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
-            subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
-
-            subscription = subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
-
-            subscription.cancelWithPolicy(BillingActionPolicy.END_OF_TERM, callContext);
-            try {
-                subscription.changePlanWithDate("Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow(), callContext);
-            } catch (SubscriptionBaseApiException e) {
-                assertEquals(e.getCode(), ErrorCode.SUB_CHANGE_FUTURE_CANCELLED.getCode());
-                try {
-                    log.info(e.getMessage());
-                } catch (Throwable el) {
-                    assertFalse(true);
-                }
-            }
-
-            assertListenerStatus();
-        } catch (Exception e) {
-            Assert.fail(e.toString());
+            subscription.changePlanWithDate("Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow(), callContext);
+        } catch (SubscriptionBaseApiException e) {
+            assertEquals(e.getCode(), ErrorCode.SUB_CHANGE_FUTURE_CANCELLED.getCode());
         }
-    }
 
-    @Test(enabled = false, groups = "fast")
-    public void testCancelBadState() {
+        assertListenerStatus();
     }
 
     @Test(groups = "fast")
-    public void testUncancelBadState() {
+    public void testUncancelBadState() throws SubscriptionBaseApiException {
+        final SubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME);
+
         try {
-            final SubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME);
-
-            try {
-                subscription.uncancel(callContext);
-            } catch (SubscriptionBaseApiException e) {
-                assertEquals(e.getCode(), ErrorCode.SUB_UNCANCEL_BAD_STATE.getCode());
-                try {
-                    log.info(e.getMessage());
-                } catch (Throwable el) {
-                    assertFalse(true);
-                }
-            }
-            assertListenerStatus();
-        } catch (Exception e) {
-            Assert.fail(e.toString());
+            subscription.uncancel(callContext);
+        } catch (SubscriptionBaseApiException e) {
+            assertEquals(e.getCode(), ErrorCode.SUB_UNCANCEL_BAD_STATE.getCode());
         }
+        assertListenerStatus();
     }
 }
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiRecreate.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiRecreate.java
index e217d91..65bc6e7 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiRecreate.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiRecreate.java
@@ -17,8 +17,6 @@
 package com.ning.billing.subscription.api.user;
 
 import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
@@ -33,28 +31,16 @@ import static org.testng.Assert.assertTrue;
 
 public abstract class TestUserApiRecreate extends SubscriptionTestSuiteWithEmbeddedDB {
 
-    private static final Logger log = LoggerFactory.getLogger(TestUserApiRecreate.class);
-
     @Test(groups = "slow")
-    public void testRecreateWithBPCanceledThroughSubscription() {
-        try {
-            testCreateAndRecreate(false);
-            assertListenerStatus();
-        } catch (SubscriptionBaseApiException e) {
-            log.error("Unexpected exception", e);
-            Assert.fail(e.getMessage());
-        }
+    public void testRecreateWithBPCanceledThroughSubscription() throws SubscriptionBaseApiException {
+        testCreateAndRecreate(false);
+        assertListenerStatus();
     }
 
     @Test(groups = "slow")
-    public void testCreateWithBPCanceledFromUserApi() {
-        try {
-            testCreateAndRecreate(true);
-            assertListenerStatus();
-        } catch (SubscriptionBaseApiException e) {
-            log.error("Unexpected exception", e);
-            Assert.fail(e.getMessage());
-        }
+    public void testCreateWithBPCanceledFromUserApi() throws SubscriptionBaseApiException {
+        testCreateAndRecreate(true);
+        assertListenerStatus();
     }
 
     private DefaultSubscriptionBase testCreateAndRecreate(final boolean fromUserAPi) throws SubscriptionBaseApiException {
@@ -68,7 +54,7 @@ public abstract class TestUserApiRecreate extends SubscriptionTestSuiteWithEmbed
         testListener.pushExpectedEvent(NextEvent.PHASE);
         testListener.pushExpectedEvent(NextEvent.CREATE);
         DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
-                                                                                             testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
+                                                                                                                    testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
         assertNotNull(subscription);
         assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
         assertEquals(subscription.getBundleId(), bundle.getId());
@@ -82,10 +68,9 @@ public abstract class TestUserApiRecreate extends SubscriptionTestSuiteWithEmbed
         term = BillingPeriod.MONTHLY;
         planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
         try {
-
             if (fromUserAPi) {
                 subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
-                                                                                    testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
+                                                                                                    testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
             } else {
                 subscription.recreate(testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, callContext);
             }
@@ -110,7 +95,7 @@ public abstract class TestUserApiRecreate extends SubscriptionTestSuiteWithEmbed
 
         if (fromUserAPi) {
             subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
-                                                                                testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
+                                                                                                testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
         } else {
             subscription.recreate(testUtil.getProductSpecifier(productName, planSetName, term, null), clock.getUTCNow(), callContext);
         }
diff --git a/subscription/src/test/java/com/ning/billing/subscription/DefaultSubscriptionTestInitializer.java b/subscription/src/test/java/com/ning/billing/subscription/DefaultSubscriptionTestInitializer.java
index b56b56e..0bbc2b1 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/DefaultSubscriptionTestInitializer.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/DefaultSubscriptionTestInitializer.java
@@ -26,17 +26,17 @@ import org.slf4j.LoggerFactory;
 import com.ning.billing.account.api.AccountData;
 import com.ning.billing.api.TestApiListener;
 import com.ning.billing.api.TestListenerStatus;
+import com.ning.billing.callcontext.InternalCallContext;
 import com.ning.billing.catalog.DefaultCatalogService;
 import com.ning.billing.catalog.api.Catalog;
 import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.clock.ClockMock;
 import com.ning.billing.mock.MockAccountBuilder;
+import com.ning.billing.subscription.api.SubscriptionBaseInternalApi;
 import com.ning.billing.subscription.api.SubscriptionBaseService;
 import com.ning.billing.subscription.api.user.SubscriptionBaseBundle;
 import com.ning.billing.subscription.engine.core.DefaultSubscriptionBaseService;
-import com.ning.billing.callcontext.InternalCallContext;
-import com.ning.billing.subscription.api.SubscriptionBaseInternalApi;
 import com.ning.billing.util.svcsapi.bus.BusService;
 
 import static org.testng.Assert.assertNotNull;
@@ -79,18 +79,17 @@ public class DefaultSubscriptionTestInitializer implements SubscriptionTestIniti
 
     public SubscriptionBaseBundle initBundle(final SubscriptionBaseInternalApi subscriptionApi, final InternalCallContext callContext) throws Exception {
         final UUID accountId = UUID.randomUUID();
-        final SubscriptionBaseBundle bundle = subscriptionApi.createBundleForAccount(accountId, DEFAULT_BUNDLE_KEY,  callContext);
+        final SubscriptionBaseBundle bundle = subscriptionApi.createBundleForAccount(accountId, DEFAULT_BUNDLE_KEY, callContext);
         assertNotNull(bundle);
         return bundle;
     }
 
-
     public void startTestFamework(final TestApiListener testListener,
                                   final TestListenerStatus testListenerStatus,
                                   final ClockMock clock,
                                   final BusService busService,
                                   final SubscriptionBaseService subscriptionBaseService) throws Exception {
-        log.warn("STARTING TEST FRAMEWORK");
+        log.debug("STARTING TEST FRAMEWORK");
 
         resetTestListener(testListener, testListenerStatus);
 
@@ -100,21 +99,20 @@ public class DefaultSubscriptionTestInitializer implements SubscriptionTestIniti
 
         restartSubscriptionService(subscriptionBaseService);
 
-        log.warn("STARTED TEST FRAMEWORK");
+        log.debug("STARTED TEST FRAMEWORK");
     }
 
     public void stopTestFramework(final TestApiListener testListener,
                                   final BusService busService,
                                   final SubscriptionBaseService subscriptionBaseService) throws Exception {
-        log.warn("STOPPING TEST FRAMEWORK");
+        log.debug("STOPPING TEST FRAMEWORK");
         stopBusAndUnregisterListener(busService, testListener);
 
         stopSubscriptionService(subscriptionBaseService);
 
-        log.warn("STOPPED TEST FRAMEWORK");
+        log.debug("STOPPED TEST FRAMEWORK");
     }
 
-
     private void resetTestListener(final TestApiListener testListener, final TestListenerStatus testListenerStatus) {
         // RESET LIST OF EXPECTED EVENTS
         if (testListener != null) {
diff --git a/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoMemory.java b/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoMemory.java
index f714b32..77ce836 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoMemory.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoMemory.java
@@ -30,10 +30,17 @@ import org.joda.time.DateTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.ning.billing.callcontext.InternalCallContext;
+import com.ning.billing.callcontext.InternalTenantContext;
 import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.catalog.api.TimeUnit;
 import com.ning.billing.clock.Clock;
+import com.ning.billing.notificationq.api.NotificationEvent;
+import com.ning.billing.notificationq.api.NotificationQueue;
+import com.ning.billing.notificationq.api.NotificationQueueService;
+import com.ning.billing.notificationq.api.NotificationQueueService.NoSuchNotificationQueue;
+import com.ning.billing.subscription.api.SubscriptionBase;
 import com.ning.billing.subscription.api.migration.AccountMigrationData;
 import com.ning.billing.subscription.api.migration.AccountMigrationData.BundleMigrationData;
 import com.ning.billing.subscription.api.migration.AccountMigrationData.SubscriptionMigrationData;
@@ -49,13 +56,6 @@ import com.ning.billing.subscription.events.SubscriptionBaseEvent;
 import com.ning.billing.subscription.events.SubscriptionBaseEvent.EventType;
 import com.ning.billing.subscription.events.user.ApiEvent;
 import com.ning.billing.subscription.events.user.ApiEventType;
-import com.ning.billing.notificationq.api.NotificationEvent;
-import com.ning.billing.notificationq.api.NotificationQueue;
-import com.ning.billing.notificationq.api.NotificationQueueService;
-import com.ning.billing.notificationq.api.NotificationQueueService.NoSuchNotificationQueue;
-import com.ning.billing.subscription.api.SubscriptionBase;
-import com.ning.billing.callcontext.InternalCallContext;
-import com.ning.billing.callcontext.InternalTenantContext;
 import com.ning.billing.util.entity.dao.EntitySqlDao;
 import com.ning.billing.util.entity.dao.EntitySqlDaoWrapperFactory;
 
diff --git a/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoSql.java b/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoSql.java
index 37a4542..0bf99ec 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoSql.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoSql.java
@@ -21,8 +21,8 @@ import org.skife.jdbi.v2.IDBI;
 import com.ning.billing.bus.api.PersistentBus;
 import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.clock.Clock;
-import com.ning.billing.subscription.engine.addon.AddonUtils;
 import com.ning.billing.notificationq.api.NotificationQueueService;
+import com.ning.billing.subscription.engine.addon.AddonUtils;
 import com.ning.billing.util.cache.CacheControllerDispatcher;
 import com.ning.billing.util.dao.NonEntityDao;
 
diff --git a/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModule.java b/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModule.java
index 5af4a43..c4a1020 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModule.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModule.java
@@ -36,7 +36,6 @@ public class TestDefaultSubscriptionModule extends DefaultSubscriptionModule {
         super(configSource);
     }
 
-
     @Override
     protected void configure() {
         super.configure();
diff --git a/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModuleWithEmbeddedDB.java b/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModuleWithEmbeddedDB.java
index 30815b6..6dfde40 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModuleWithEmbeddedDB.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModuleWithEmbeddedDB.java
@@ -21,8 +21,8 @@ import org.skife.config.ConfigSource;
 import com.ning.billing.GuicyKillbillTestWithEmbeddedDBModule;
 import com.ning.billing.subscription.api.timeline.RepairSubscriptionLifecycleDao;
 import com.ning.billing.subscription.engine.dao.MockSubscriptionDaoSql;
-import com.ning.billing.subscription.engine.dao.SubscriptionDao;
 import com.ning.billing.subscription.engine.dao.RepairSubscriptionDao;
+import com.ning.billing.subscription.engine.dao.SubscriptionDao;
 import com.ning.billing.util.glue.BusModule;
 import com.ning.billing.util.glue.CustomFieldModule;
 import com.ning.billing.util.glue.MetricsModule;