killbill-memoizeit

Changes

beatrix/pom.xml 11(+4 -7)

Details

diff --git a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java
index d6b4351..00668f1 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountChangeEvent.java
@@ -59,8 +59,8 @@ public class DefaultAccountChangeEvent extends DefaultBusInternalEvent implement
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.ACCOUNT_CHANGE;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.ACCOUNT_CHANGE;
     }
 
     @Override
diff --git a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountCreationEvent.java b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountCreationEvent.java
index eae8770..ba2210f 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountCreationEvent.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountCreationEvent.java
@@ -56,8 +56,8 @@ public class DefaultAccountCreationEvent  extends DefaultBusInternalEvent implem
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.ACCOUNT_CREATE;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.ACCOUNT_CREATE;
     }
 
     @Override
diff --git a/account/src/main/java/com/ning/billing/account/dao/AuditedAccountDao.java b/account/src/main/java/com/ning/billing/account/dao/AuditedAccountDao.java
index b441c78..808a78d 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AuditedAccountDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AuditedAccountDao.java
@@ -41,8 +41,8 @@ import com.ning.billing.util.dao.TableName;
 import com.ning.billing.util.entity.EntityPersistenceException;
 import com.ning.billing.util.events.AccountChangeInternalEvent;
 import com.ning.billing.util.events.AccountCreationInternalEvent;
-import com.ning.billing.util.svcsapi.bus.Bus;
-import com.ning.billing.util.svcsapi.bus.Bus.EventBusException;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
 
 import com.google.inject.Inject;
 
@@ -51,11 +51,11 @@ public class AuditedAccountDao implements AccountDao {
     private static final Logger log = LoggerFactory.getLogger(AuditedAccountDao.class);
 
     private final AccountSqlDao accountSqlDao;
-    private final Bus eventBus;
+    private final InternalBus eventBus;
     private final InternalCallContextFactory internalCallContextFactory;
 
     @Inject
-    public AuditedAccountDao(final IDBI dbi, final Bus eventBus, final InternalCallContextFactory internalCallContextFactory) {
+    public AuditedAccountDao(final IDBI dbi, final InternalBus eventBus, final InternalCallContextFactory internalCallContextFactory) {
         this.eventBus = eventBus;
         this.accountSqlDao = dbi.onDemand(AccountSqlDao.class);
         this.internalCallContextFactory = internalCallContextFactory;
@@ -95,7 +95,7 @@ public class AuditedAccountDao implements AccountDao {
         try {
             accountSqlDao.inTransaction(new Transaction<Void, AccountSqlDao>() {
                 @Override
-                public Void inTransaction(final AccountSqlDao transactionalDao, final TransactionStatus status) throws AccountApiException, Bus.EventBusException {
+                public Void inTransaction(final AccountSqlDao transactionalDao, final TransactionStatus status) throws AccountApiException, InternalBus.EventBusException {
                     final Account currentAccount = transactionalDao.getAccountByKey(key, context);
                     if (currentAccount != null) {
                         throw new AccountApiException(ErrorCode.ACCOUNT_ALREADY_EXISTS, key);
@@ -144,7 +144,7 @@ public class AuditedAccountDao implements AccountDao {
         try {
             accountSqlDao.inTransaction(new Transaction<Void, AccountSqlDao>() {
                 @Override
-                public Void inTransaction(final AccountSqlDao transactional, final TransactionStatus status) throws EntityPersistenceException, Bus.EventBusException {
+                public Void inTransaction(final AccountSqlDao transactional, final TransactionStatus status) throws EntityPersistenceException, InternalBus.EventBusException {
                     final UUID accountId = specifiedAccount.getId();
                     final Account currentAccount = transactional.getById(accountId.toString(), context);
                     if (currentAccount == null) {
@@ -199,7 +199,7 @@ public class AuditedAccountDao implements AccountDao {
         try {
             accountSqlDao.inTransaction(new Transaction<Void, AccountSqlDao>() {
                 @Override
-                public Void inTransaction(final AccountSqlDao transactional, final TransactionStatus status) throws EntityPersistenceException, Bus.EventBusException {
+                public Void inTransaction(final AccountSqlDao transactional, final TransactionStatus status) throws EntityPersistenceException, InternalBus.EventBusException {
 
                     final Account currentAccount = transactional.getById(accountId.toString(), context);
                     if (currentAccount == null) {
diff --git a/account/src/test/java/com/ning/billing/account/api/user/TestDefaultAccountUserApi.java b/account/src/test/java/com/ning/billing/account/api/user/TestDefaultAccountUserApi.java
index ac3869c..01284ca 100644
--- a/account/src/test/java/com/ning/billing/account/api/user/TestDefaultAccountUserApi.java
+++ b/account/src/test/java/com/ning/billing/account/api/user/TestDefaultAccountUserApi.java
@@ -36,7 +36,7 @@ import com.ning.billing.account.dao.AccountEmailDao;
 import com.ning.billing.account.dao.MockAccountDao;
 import com.ning.billing.account.dao.MockAccountEmailDao;
 import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.CallContextFactory;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
@@ -55,7 +55,7 @@ public class TestDefaultAccountUserApi extends AccountTestSuite {
 
     @BeforeMethod(groups = "fast")
     public void setUp() throws Exception {
-        accountDao = new MockAccountDao(Mockito.mock(Bus.class));
+        accountDao = new MockAccountDao(Mockito.mock(InternalBus.class));
         accountEmailDao = new MockAccountEmailDao();
         accountUserApi = new DefaultAccountUserApi(factory, internalFactory, accountDao, accountEmailDao);
     }
diff --git a/account/src/test/java/com/ning/billing/account/dao/AccountDaoTestBase.java b/account/src/test/java/com/ning/billing/account/dao/AccountDaoTestBase.java
index 594faa5..ef2486c 100644
--- a/account/src/test/java/com/ning/billing/account/dao/AccountDaoTestBase.java
+++ b/account/src/test/java/com/ning/billing/account/dao/AccountDaoTestBase.java
@@ -24,10 +24,10 @@ import org.testng.annotations.BeforeClass;
 import com.ning.billing.account.AccountTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.svcsapi.bus.BusService;
 import com.ning.billing.util.bus.DefaultBusService;
-import com.ning.billing.util.bus.InMemoryBus;
+import com.ning.billing.util.bus.InMemoryInternalBus;
 import com.ning.billing.util.tag.api.user.TagEventBuilder;
 
 import static org.testng.Assert.fail;
@@ -39,14 +39,14 @@ public abstract class AccountDaoTestBase extends AccountTestSuiteWithEmbeddedDB 
     protected AccountDao accountDao;
     protected AccountEmailDao accountEmailDao;
     protected IDBI dbi;
-    protected Bus bus;
+    protected InternalBus bus;
 
     @BeforeClass(groups = "slow")
     protected void setup() throws IOException {
         try {
             dbi = helper.getDBI();
 
-            bus = new InMemoryBus();
+            bus = new InMemoryInternalBus();
             final BusService busService = new DefaultBusService(bus);
             ((DefaultBusService) busService).startBus();
 
diff --git a/account/src/test/java/com/ning/billing/account/dao/MockAccountDao.java b/account/src/test/java/com/ning/billing/account/dao/MockAccountDao.java
index 5cd9a36..53d3f2e 100644
--- a/account/src/test/java/com/ning/billing/account/dao/MockAccountDao.java
+++ b/account/src/test/java/com/ning/billing/account/dao/MockAccountDao.java
@@ -29,18 +29,18 @@ import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.entity.EntityPersistenceException;
 import com.ning.billing.util.events.AccountChangeInternalEvent;
-import com.ning.billing.util.svcsapi.bus.Bus;
-import com.ning.billing.util.svcsapi.bus.Bus.EventBusException;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
 
 import com.google.inject.Inject;
 
 public class MockAccountDao implements AccountDao {
 
-    private final Bus eventBus;
+    private final InternalBus eventBus;
     private final Map<UUID, Account> accounts = new ConcurrentHashMap<UUID, Account>();
 
     @Inject
-    public MockAccountDao(final Bus eventBus) {
+    public MockAccountDao(final InternalBus eventBus) {
         this.eventBus = eventBus;
     }
 
diff --git a/analytics/src/main/java/com/ning/billing/analytics/api/DefaultAnalyticsService.java b/analytics/src/main/java/com/ning/billing/analytics/api/DefaultAnalyticsService.java
index d85cd38..3a54f5b 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/api/DefaultAnalyticsService.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/api/DefaultAnalyticsService.java
@@ -22,7 +22,7 @@ import org.slf4j.LoggerFactory;
 import com.google.inject.Inject;
 import com.ning.billing.analytics.AnalyticsListener;
 import com.ning.billing.lifecycle.LifecycleHandlerType;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 public class DefaultAnalyticsService implements AnalyticsService {
     private static final Logger log = LoggerFactory.getLogger(DefaultAnalyticsService.class);
@@ -30,10 +30,10 @@ public class DefaultAnalyticsService implements AnalyticsService {
     private static final String ANALYTICS_SERVICE = "analytics-service";
 
     private final AnalyticsListener listener;
-    private final Bus eventBus;
+    private final InternalBus eventBus;
 
     @Inject
-    public DefaultAnalyticsService(final AnalyticsListener listener, final Bus eventBus) {
+    public DefaultAnalyticsService(final AnalyticsListener listener, final InternalBus eventBus) {
         this.listener = listener;
         this.eventBus = eventBus;
     }
@@ -47,7 +47,7 @@ public class DefaultAnalyticsService implements AnalyticsService {
     public void registerForNotifications() {
         try {
             eventBus.register(listener);
-        } catch (Bus.EventBusException e) {
+        } catch (InternalBus.EventBusException e) {
             log.error("Unable to register to the EventBus!", e);
         }
     }
diff --git a/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java b/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
index afe306c..e9bc472 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
@@ -83,7 +83,7 @@ import com.ning.billing.util.events.AccountCreationInternalEvent;
 import com.ning.billing.util.events.EffectiveSubscriptionInternalEvent;
 import com.ning.billing.util.events.InvoiceCreationInternalEvent;
 import com.ning.billing.util.events.PaymentInfoInternalEvent;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 import com.google.inject.Inject;
 
@@ -119,7 +119,7 @@ public class TestAnalyticsService extends AnalyticsTestSuiteWithEmbeddedDB {
     private DefaultAnalyticsService service;
 
     @Inject
-    private Bus bus;
+    private InternalBus bus;
 
     @Inject
     private BusinessSubscriptionTransitionSqlDao subscriptionSqlDao;
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java
index a033a2c..239e4fb 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java
@@ -53,7 +53,7 @@ import com.ning.billing.entitlement.engine.addon.AddonUtils;
 import com.ning.billing.entitlement.engine.dao.AuditedEntitlementDao;
 import com.ning.billing.entitlement.engine.dao.EntitlementDao;
 import com.ning.billing.mock.MockAccountBuilder;
-import com.ning.billing.util.bus.InMemoryBus;
+import com.ning.billing.util.bus.InMemoryInternalBus;
 import com.ning.billing.util.callcontext.DefaultCallContextFactory;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.clock.ClockMock;
@@ -67,7 +67,7 @@ public class TestBusinessTagRecorder extends AnalyticsTestSuiteWithEmbeddedDB {
 
     private BusinessAccountTagSqlDao accountTagSqlDao;
     private BusinessSubscriptionTransitionTagSqlDao subscriptionTransitionTagSqlDao;
-    private InMemoryBus eventBus;
+    private InMemoryInternalBus eventBus;
     private DefaultCallContextFactory callContextFactory;
     private AccountInternalApi accountApi;
     private AccountUserApi accountUserApi;
@@ -82,7 +82,7 @@ public class TestBusinessTagRecorder extends AnalyticsTestSuiteWithEmbeddedDB {
         final BusinessInvoiceTagSqlDao invoiceTagSqlDao = dbi.onDemand(BusinessInvoiceTagSqlDao.class);
         final BusinessInvoicePaymentTagSqlDao invoicePaymentTagSqlDao = dbi.onDemand(BusinessInvoicePaymentTagSqlDao.class);
         subscriptionTransitionTagSqlDao = dbi.onDemand(BusinessSubscriptionTransitionTagSqlDao.class);
-        eventBus = new InMemoryBus();
+        eventBus = new InMemoryInternalBus();
         final AccountDao accountDao = new AuditedAccountDao(dbi, eventBus, new InternalCallContextFactory(dbi, new ClockMock()));
         final AccountEmailDao accountEmailDao = new AuditedAccountEmailDao(dbi);
         final DefaultClock clock = new DefaultClock();
diff --git a/api/src/main/java/com/ning/billing/beatrix/bus/ExtBusEventType.java b/api/src/main/java/com/ning/billing/beatrix/bus/ExtBusEventType.java
new file mode 100644
index 0000000..fb35284
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/beatrix/bus/ExtBusEventType.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+package com.ning.billing.beatrix.bus;
+
+public enum ExtBusEventType {
+    ACCOUNT_CREATION,
+    ACCOUNT_CHANGE,
+    SUBSCRIPTION_CREATION,
+    SUBSCRIPTION_CHANGE,
+    SUBSCRIPTION_CANCEL,
+    OVERDUE_CHANGE,
+    INVOICE_CREATION,
+    PAYMENT_SUCCESS,
+    PAYMENT_FAILED
+}
diff --git a/api/src/main/java/com/ning/billing/beatrix/bus/ExternalBus.java b/api/src/main/java/com/ning/billing/beatrix/bus/ExternalBus.java
new file mode 100644
index 0000000..27e773e
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/beatrix/bus/ExternalBus.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+package com.ning.billing.beatrix.bus;
+
+
+public interface ExternalBus {
+
+    public void register(final Object handlerInstance); /* throws EventBusException */
+
+    public void unregister(final Object handlerInstance); /* throws EventBusException */
+}

beatrix/pom.xml 11(+4 -7)

diff --git a/beatrix/pom.xml b/beatrix/pom.xml
index 1ee374b..86ce08c 100644
--- a/beatrix/pom.xml
+++ b/beatrix/pom.xml
@@ -65,7 +65,10 @@
             <groupId>joda-time</groupId>
             <artifactId>joda-time</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>org.jdbi</groupId>
+            <artifactId>jdbi</artifactId>
+        </dependency>
         <!-- TEST SCOPE -->
         <dependency>
             <groupId>org.slf4j</groupId>
@@ -117,12 +120,6 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.jdbi</groupId>
-            <artifactId>jdbi</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
             <groupId>org.testng</groupId>
             <artifactId>testng</artifactId>
             <scope>test</scope>
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/DefaultBeatrixService.java b/beatrix/src/main/java/com/ning/billing/beatrix/DefaultBeatrixService.java
new file mode 100644
index 0000000..c4f6f80
--- /dev/null
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/DefaultBeatrixService.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+package com.ning.billing.beatrix;
+
+import javax.inject.Inject;
+
+import com.ning.billing.beatrix.bus.ExternalBus;
+import com.ning.billing.beatrix.extbus.BeatrixListener;
+import com.ning.billing.beatrix.extbus.PersistentExternalBus;
+import com.ning.billing.lifecycle.KillbillService;
+import com.ning.billing.lifecycle.LifecycleHandlerType;
+import com.ning.billing.lifecycle.LifecycleHandlerType.LifecycleLevel;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+
+
+public class DefaultBeatrixService implements KillbillService {
+
+    public static final String BEATRIX_SERVICE_NAME = "beatrix-service";
+
+    private final BeatrixListener beatrixListener;
+    private final InternalBus eventBus;
+    private final ExternalBus externalBus;
+
+
+    @Inject
+    public DefaultBeatrixService(final InternalBus eventBus, final ExternalBus externalBus, final BeatrixListener beatrixListener) {
+        this.eventBus = eventBus;
+        this.externalBus = externalBus;
+        this.beatrixListener = beatrixListener;
+    }
+
+    @Override
+    public String getName() {
+        return BEATRIX_SERVICE_NAME;
+    }
+
+
+    @LifecycleHandlerType(LifecycleHandlerType.LifecycleLevel.REGISTER_EVENTS)
+    public void registerForNotifications() {
+        try {
+            eventBus.register(beatrixListener);
+        } catch (InternalBus.EventBusException e) {
+            throw new RuntimeException("Unable to register to the EventBus!", e);
+        }
+    }
+
+    @LifecycleHandlerType(LifecycleHandlerType.LifecycleLevel.UNREGISTER_EVENTS)
+    public void unregisterForNotifications() {
+        try {
+            eventBus.unregister(beatrixListener);
+        } catch (InternalBus.EventBusException e) {
+            throw new RuntimeException("Unable to unregister to the EventBus!", e);
+        }
+    }
+
+    @LifecycleHandlerType(LifecycleLevel.INIT_BUS)
+    public void startBus() {
+        ((PersistentExternalBus) externalBus).start();
+    }
+
+    @LifecycleHandlerType(LifecycleLevel.STOP_BUS)
+    public void stopBus() {
+        ((PersistentExternalBus) externalBus).stop();
+    }
+
+}
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/BeatrixListener.java b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/BeatrixListener.java
new file mode 100644
index 0000000..7f8e5ab
--- /dev/null
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/BeatrixListener.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+package com.ning.billing.beatrix.extbus;
+
+import java.util.UUID;
+
+import javax.inject.Inject;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.ning.billing.beatrix.bus.ExtBusEventType;
+import com.ning.billing.beatrix.bus.ExternalBus;
+import com.ning.billing.beatrix.extbus.dao.ExtBusEventEntry;
+import com.ning.billing.entitlement.api.SubscriptionTransitionType;
+import com.ning.billing.util.Hostname;
+import com.ning.billing.util.callcontext.CallOrigin;
+import com.ning.billing.util.callcontext.InternalCallContext;
+import com.ning.billing.util.callcontext.InternalCallContextFactory;
+import com.ning.billing.util.callcontext.UserType;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.events.AccountChangeInternalEvent;
+import com.ning.billing.util.events.AccountCreationInternalEvent;
+import com.ning.billing.util.events.BusInternalEvent;
+import com.ning.billing.util.events.OverdueChangeInternalEvent;
+import com.ning.billing.util.events.SubscriptionInternalEvent;
+import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
+
+import com.google.common.eventbus.Subscribe;
+
+public class BeatrixListener {
+
+    private static final Logger log = LoggerFactory.getLogger(BeatrixListener.class);
+
+    private final ExternalBus externalBus;
+    private final InternalCallContextFactory internalCallContextFactory;
+    private final String hostname;
+
+    @Inject
+    public BeatrixListener(final ExternalBus externalBus,
+            final InternalCallContextFactory internalCallContextFactory) {
+        this.externalBus = externalBus;
+        this.internalCallContextFactory = internalCallContextFactory;
+        this.hostname = Hostname.get();
+    }
+
+    @Subscribe
+    public void handleAllInternalKillbillEvents(final BusInternalEvent event) {
+        switch(event.getBusEventType()) {
+            case ACCOUNT_CREATE:
+                break;
+            case ACCOUNT_CHANGE:
+                break;
+            case SUBSCRIPTION_TRANSITION:
+                break;
+            case INVOICE_CREATION:
+                break;
+            case PAYMENT_INFO:
+                break;
+            case PAYMENT_ERROR:
+                break;
+            case OVERDUE_CHANGE:
+                break;
+            default:
+                // Ignore for now.
+        }
+        final ExtBusEventEntry externalEvent = computeExtBusEventEntryFromBusInternalEvent(event);
+        try {
+
+            if (externalEvent != null) {
+                final InternalCallContext internalContext =  internalCallContextFactory.createInternalCallContext(event.getTenantRecordId(), event.getAccountRecordId(), "BeatrixListener", CallOrigin.INTERNAL, UserType.SYSTEM, event.getUserToken());
+                ((PersistentExternalBus) externalBus).post(externalEvent, internalContext);
+            }
+        }  catch (EventBusException e) {
+            log.warn("Failed to post external bus event {} {} ", externalEvent.getExtBusType(), externalEvent.getObjectId());
+        }
+    }
+
+    private ExtBusEventEntry computeExtBusEventEntryFromBusInternalEvent(final BusInternalEvent event) {
+
+        ObjectType objectType  = null;
+        UUID objectId = null;
+        ExtBusEventType eventBusType = null;
+
+        switch(event.getBusEventType()) {
+        case ACCOUNT_CREATE:
+            AccountCreationInternalEvent realEventACR = (AccountCreationInternalEvent) event;
+            objectType = ObjectType.ACCOUNT;
+            objectId = realEventACR.getId();
+            eventBusType = ExtBusEventType.ACCOUNT_CREATION;
+            break;
+
+        case ACCOUNT_CHANGE:
+            AccountChangeInternalEvent realEventACH = (AccountChangeInternalEvent) event;
+            objectType = ObjectType.ACCOUNT;
+            objectId = realEventACH.getAccountId();
+            eventBusType = ExtBusEventType.ACCOUNT_CHANGE;
+            break;
+
+        case SUBSCRIPTION_TRANSITION:
+            SubscriptionInternalEvent realEventST  = (SubscriptionInternalEvent) event;
+            objectType = ObjectType.SUBSCRIPTION;
+            objectId = realEventST.getSubscriptionId();
+            if (realEventST.getTransitionType() == SubscriptionTransitionType.CREATE) {
+                eventBusType = ExtBusEventType.SUBSCRIPTION_CREATION;
+            } else if (realEventST.getTransitionType() == SubscriptionTransitionType.CANCEL) {
+                eventBusType = ExtBusEventType.SUBSCRIPTION_CANCEL;
+            } else if (realEventST.getTransitionType() == SubscriptionTransitionType.CHANGE) {
+                eventBusType = ExtBusEventType.SUBSCRIPTION_CHANGE;
+            }
+
+            break;
+        case INVOICE_CREATION:
+            break;
+        case PAYMENT_INFO:
+            break;
+        case PAYMENT_ERROR:
+            break;
+        case OVERDUE_CHANGE:
+            OverdueChangeInternalEvent realEventOC = (OverdueChangeInternalEvent) event;
+            // TODO When Killbil supports more than overdue for bundle, this will break...
+            objectType = ObjectType.BUNDLE;
+            objectId = realEventOC.getOverdueObjectId();
+            eventBusType = ExtBusEventType.OVERDUE_CHANGE;
+            break;
+        default:
+        }
+        return eventBusType != null ?
+                new ExtBusEventEntry(hostname, objectType, objectId, eventBusType, event.getAccountRecordId(), event.getAccountRecordId()) : null;
+    }
+
+}
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusEventEntry.java b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusEventEntry.java
new file mode 100644
index 0000000..8ac4994
--- /dev/null
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusEventEntry.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.beatrix.extbus.dao;
+
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
+import com.ning.billing.beatrix.bus.ExtBusEventType;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.queue.PersistentQueueEntryLifecycle;
+
+public class ExtBusEventEntry implements PersistentQueueEntryLifecycle {
+
+    private final long id;
+    private final String owner;
+    private final String createdOwner;
+    private final DateTime nextAvailable;
+    private final PersistentQueueEntryLifecycleState processingState;
+    private final Long accountRecordId;
+    private final Long tenantRecordId;
+
+    private final ObjectType objectType;
+    private final UUID objectId;
+    private final ExtBusEventType extBusType;
+
+
+    public ExtBusEventEntry(final long id, final String createdOwner, final String owner, final DateTime nextAvailable,
+                         final PersistentQueueEntryLifecycleState processingState,
+                         final ObjectType objectType, final UUID objectId, final  ExtBusEventType extBusType,
+                         final Long accountRecordId, final Long tenantRecordId) {
+        this.id = id;
+        this.createdOwner = createdOwner;
+        this.owner = owner;
+        this.nextAvailable = nextAvailable;
+        this.processingState = processingState;
+        this.objectType = objectType;
+        this.objectId = objectId;
+        this.extBusType = extBusType;
+        this.accountRecordId = accountRecordId;
+        this.tenantRecordId = tenantRecordId;
+    }
+
+    public ExtBusEventEntry(final String createdOwner,
+            final ObjectType objectType, final UUID objectId, final  ExtBusEventType extBusType,
+                         final Long accountRecordId, final Long tenantRecordId) {
+        this(0, createdOwner, null, null, null, objectType, objectId, extBusType, accountRecordId, tenantRecordId);
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public ObjectType getObjectType() {
+        return objectType;
+    }
+
+    public UUID getObjectId() {
+        return objectId;
+    }
+
+    public ExtBusEventType getExtBusType() {
+        return extBusType;
+    }
+
+    @Override
+    public String getOwner() {
+        return owner;
+    }
+
+    @Override
+    public String getCreatedOwner() {
+        return createdOwner;
+    }
+
+    @Override
+    public DateTime getNextAvailableDate() {
+        return nextAvailable;
+    }
+
+    @Override
+    public PersistentQueueEntryLifecycleState getProcessingState() {
+        return processingState;
+    }
+
+    @Override
+    public boolean isAvailableForProcessing(final DateTime now) {
+        switch (processingState) {
+            case AVAILABLE:
+                break;
+            case IN_PROCESSING:
+                // Somebody already got the event, not available yet
+                if (nextAvailable.isAfter(now)) {
+                    return false;
+                }
+                break;
+            case PROCESSED:
+                return false;
+            default:
+                throw new RuntimeException(String.format("Unknown IEvent processing state %s", processingState));
+        }
+        return true;
+    }
+
+    @Override
+    public Long getAccountRecordId() {
+        return accountRecordId;
+    }
+
+    @Override
+    public Long getTenantRecordId() {
+        return tenantRecordId;
+    }
+}
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusSqlDao.java b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusSqlDao.java
new file mode 100644
index 0000000..5d4ada9
--- /dev/null
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/dao/ExtBusSqlDao.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+package com.ning.billing.beatrix.extbus.dao;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Date;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.skife.jdbi.v2.SQLStatement;
+import org.skife.jdbi.v2.StatementContext;
+import org.skife.jdbi.v2.sqlobject.Bind;
+import org.skife.jdbi.v2.sqlobject.Binder;
+import org.skife.jdbi.v2.sqlobject.SqlQuery;
+import org.skife.jdbi.v2.sqlobject.SqlUpdate;
+import org.skife.jdbi.v2.sqlobject.customizers.Mapper;
+import org.skife.jdbi.v2.sqlobject.mixins.CloseMe;
+import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
+import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
+import org.skife.jdbi.v2.tweak.ResultSetMapper;
+
+import com.ning.billing.beatrix.bus.ExtBusEventType;
+import com.ning.billing.util.callcontext.InternalCallContext;
+import com.ning.billing.util.callcontext.InternalTenantContext;
+import com.ning.billing.util.callcontext.InternalTenantContextBinder;
+import com.ning.billing.util.dao.BinderBase;
+import com.ning.billing.util.dao.MapperBase;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.queue.PersistentQueueEntryLifecycle.PersistentQueueEntryLifecycleState;
+
+
+@ExternalizedSqlViaStringTemplate3()
+public interface ExtBusSqlDao extends Transactional<ExtBusSqlDao>, CloseMe {
+
+
+    @SqlQuery
+    @Mapper(ExtBusSqlMapper.class)
+    public ExtBusEventEntry getNextBusExtEventEntry(@Bind("max") int max,
+                                              @Bind("owner") String owner,
+                                              @Bind("now") Date now,
+                                              @InternalTenantContextBinder final InternalTenantContext context);
+
+    @SqlUpdate
+    public int claimBusExtEvent(@Bind("owner") String owner,
+                             @Bind("nextAvailable") Date nextAvailable,
+                             @Bind("recordId") Long id,
+                             @Bind("now") Date now,
+                             @InternalTenantContextBinder final InternalCallContext context);
+
+    @SqlUpdate
+    public void clearBusExtEvent(@Bind("recordId") Long id,
+                              @Bind("owner") String owner,
+                              @InternalTenantContextBinder final InternalCallContext context);
+
+    @SqlUpdate
+    public void removeBusExtEventsById(@Bind("recordId") Long id,
+                                    @InternalTenantContextBinder final InternalCallContext context);
+
+    @SqlUpdate
+    public void insertBusExtEvent(@Bind(binder = ExtBusSqlBinder.class) ExtBusEventEntry evt,
+                               @InternalTenantContextBinder final InternalCallContext context);
+
+    @SqlUpdate
+    public void insertClaimedExtHistory(@Bind("ownerId") String owner,
+                                     @Bind("claimedDate") Date claimedDate,
+                                     @Bind("busEventId") long id,
+                                     @InternalTenantContextBinder final InternalCallContext context);
+
+    public static class ExtBusSqlBinder extends BinderBase implements Binder<Bind, ExtBusEventEntry> {
+
+        @Override
+        public void bind(@SuppressWarnings("rawtypes") final SQLStatement stmt, final Bind bind, final ExtBusEventEntry evt) {
+            stmt.bind("eventType", evt.getExtBusType().toString());
+            stmt.bind("objectId", evt.getObjectId().toString());
+            stmt.bind("objectType", evt.getObjectType().toString());
+            stmt.bind("createdDate", getDate(new DateTime()));
+            stmt.bind("creatingOwner", evt.getCreatedOwner());
+            stmt.bind("processingAvailableDate", getDate(evt.getNextAvailableDate()));
+            stmt.bind("processingOwner", evt.getOwner());
+            stmt.bind("processingState", PersistentQueueEntryLifecycleState.AVAILABLE.toString());
+        }
+    }
+
+    public static class ExtBusSqlMapper extends MapperBase implements ResultSetMapper<ExtBusEventEntry> {
+
+        @Override
+        public ExtBusEventEntry map(final int index, final ResultSet r, final StatementContext ctx)
+                throws SQLException {
+            final Long recordId = r.getLong("record_id");
+            final ExtBusEventType eventType = ExtBusEventType.valueOf(r.getString("event_type"));
+            final UUID objectId = getUUID(r, "object_id");
+            final ObjectType objectType = ObjectType.valueOf(r.getString("object_type"));
+            final String createdOwner = r.getString("creating_owner");
+            final DateTime nextAvailableDate = getDateTime(r, "processing_available_date");
+            final String processingOwner = r.getString("processing_owner");
+            final PersistentQueueEntryLifecycleState processingState = PersistentQueueEntryLifecycleState.valueOf(r.getString("processing_state"));
+            final Long accountRecordId = r.getLong("account_record_id");
+            final Long tenantRecordId = r.getLong("tenant_record_id");
+            return new ExtBusEventEntry(recordId, createdOwner, processingOwner, nextAvailableDate, processingState,
+                    objectType, objectId, eventType, accountRecordId, tenantRecordId);
+        }
+    }
+}
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/DefaultBusEvent.java b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/DefaultBusEvent.java
new file mode 100644
index 0000000..414549c
--- /dev/null
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/DefaultBusEvent.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+package com.ning.billing.beatrix.extbus;
+
+import java.util.UUID;
+
+import com.ning.billing.beatrix.bus.BusEvent;
+import com.ning.billing.beatrix.bus.ExtBusEventType;
+import com.ning.billing.util.dao.ObjectType;
+
+public class DefaultBusEvent implements BusEvent {
+
+    private final ExtBusEventType eventType;
+    private final ObjectType objectType;
+    private final UUID objectId;
+    private final UUID accountId;
+    private final UUID tenantId;
+
+
+    public DefaultBusEvent(final ExtBusEventType eventType,
+            final ObjectType objectType,
+            final UUID objectId,
+            final UUID accountId,
+            final UUID tenantId) {
+        this.eventType = eventType;
+        this.objectId = objectId;
+        this.objectType = objectType;
+        this.accountId = accountId;
+        this.tenantId = tenantId;
+    }
+
+    @Override
+    public ExtBusEventType getEventType() {
+        return eventType;
+    }
+
+    @Override
+    public ObjectType getObjectType() {
+        return objectType;
+    }
+
+    @Override
+    public UUID getObjectId() {
+        return objectId;
+    }
+
+    @Override
+    public UUID getAccountId() {
+        return accountId;
+    }
+
+    @Override
+    public UUID getTenantId() {
+        return tenantId;
+    }
+
+    @Override
+    public String toString() {
+        return "DefaultBusEvent [eventType=" + eventType + ", objectType="
+                + objectType + ", objectId=" + objectId + ", accountId="
+                + accountId + ", tenantId=" + tenantId + "]";
+    }
+
+
+
+}
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/extbus/PersistentExternalBus.java b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/PersistentExternalBus.java
new file mode 100644
index 0000000..9cec260
--- /dev/null
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/extbus/PersistentExternalBus.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.beatrix.extbus;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+
+import org.skife.jdbi.v2.IDBI;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.ning.billing.beatrix.bus.BusEvent;
+import com.ning.billing.beatrix.bus.ExternalBus;
+import com.ning.billing.beatrix.extbus.dao.ExtBusEventEntry;
+import com.ning.billing.beatrix.extbus.dao.ExtBusSqlDao;
+import com.ning.billing.util.Hostname;
+import com.ning.billing.util.bus.DefaultBusService;
+import com.ning.billing.util.bus.PersistentBusConfig;
+import com.ning.billing.util.callcontext.CallOrigin;
+import com.ning.billing.util.callcontext.InternalCallContext;
+import com.ning.billing.util.callcontext.InternalCallContextFactory;
+import com.ning.billing.util.callcontext.UserType;
+import com.ning.billing.util.clock.Clock;
+import com.ning.billing.util.queue.PersistentQueueBase;
+import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
+
+import com.google.common.eventbus.EventBus;
+import com.google.inject.Inject;
+
+public class PersistentExternalBus extends PersistentQueueBase implements ExternalBus {
+
+    private static final long DELTA_IN_PROCESSING_TIME_MS = 1000L * 60L * 5L; // 5 minutes
+    private static final int MAX_BUS_EVENTS = 1;
+
+    private static final Logger log = LoggerFactory.getLogger(PersistentExternalBus.class);
+
+    private final ExtBusSqlDao dao;
+
+    private final EventBusDelegate eventBusDelegate;
+    private final Clock clock;
+    private final String hostname;
+    private final InternalCallContextFactory internalCallContextFactory;
+
+    private static final class EventBusDelegate extends EventBus {
+
+        public EventBusDelegate(final String busName) {
+            super(busName);
+        }
+
+        // STEPH we can't override the method because EventHandler is package private scope
+        // Logged a bug against guava (Issue 981)
+        /*
+        @Override
+        protected void dispatch(Object event, EventHandler wrapper) {
+            try {
+              wrapper.handleEvent(event);
+            } catch (InvocationTargetException e) {
+              logger.log(Level.SEVERE,
+                  "Could not dispatch event: " + event + " to handler " + wrapper, e);
+            }
+          }
+         */
+    }
+
+    @Inject
+    public PersistentExternalBus(final IDBI dbi, final Clock clock, final PersistentBusConfig config, final InternalCallContextFactory internalCallContextFactory) {
+        super("Bus", Executors.newFixedThreadPool(config.getNbThreads(), new ThreadFactory() {
+            @Override
+            public Thread newThread(final Runnable r) {
+                return new Thread(new ThreadGroup(DefaultBusService.EVENT_BUS_GROUP_NAME),
+                        r,
+                        DefaultBusService.EVENT_BUS_TH_NAME);
+            }
+        }), config.getNbThreads(), config);
+        this.dao = dbi.onDemand(ExtBusSqlDao.class);
+        this.clock = clock;
+        this.eventBusDelegate = new EventBusDelegate("Killbill EventBus");
+        this.hostname = Hostname.get();
+        this.internalCallContextFactory = internalCallContextFactory;
+    }
+
+    public void start() {
+        startQueue();
+    }
+
+    public void stop() {
+        stopQueue();
+    }
+
+    @Override
+    public int doProcessEvents() {
+
+        // TODO API_FIX Retrieving and clearing bus events is not done per tenant so pass default INTERNAL_TENANT_RECORD_ID; not sure this is something we want to do anyway ?
+        final InternalCallContext context = internalCallContextFactory.createInternalCallContext(InternalCallContextFactory.INTERNAL_TENANT_RECORD_ID, null, "ExtPersistentBus", CallOrigin.INTERNAL, UserType.SYSTEM, null);
+        final List<ExtBusEventEntry> events = getNextBusEvent(context);
+        if (events.size() == 0) {
+            return 0;
+        }
+
+        int result = 0;
+        for (final ExtBusEventEntry cur : events) {
+
+            // API_FIX How do we get UUID from recordId ?
+            final UUID accountId  = null;
+            final UUID tenantId  = null;
+            final BusEvent event = new DefaultBusEvent(cur.getExtBusType(), cur.getObjectType(), cur.getObjectId(), accountId, tenantId);
+            result++;
+            // STEPH exception handling is done by GUAVA-- logged a bug Issue-780
+            eventBusDelegate.post(event);
+            final InternalCallContext rehydratedContext = internalCallContextFactory.createInternalCallContext(cur.getTenantRecordId(), cur.getAccountRecordId(), context);
+            dao.clearBusExtEvent(cur.getId(), hostname, rehydratedContext);
+        }
+        return result;
+    }
+
+    private List<ExtBusEventEntry> getNextBusEvent(final InternalCallContext context) {
+        final Date now = clock.getUTCNow().toDate();
+        final Date nextAvailable = clock.getUTCNow().plus(DELTA_IN_PROCESSING_TIME_MS).toDate();
+
+        final ExtBusEventEntry input = dao.getNextBusExtEventEntry(MAX_BUS_EVENTS, hostname, now, context);
+        if (input == null) {
+            return Collections.emptyList();
+        }
+
+        // We need to re-hydrate the context with the record ids from the ExtBusEventEntry
+        final InternalCallContext rehydratedContext = internalCallContextFactory.createInternalCallContext(input.getTenantRecordId(), input.getAccountRecordId(), context);
+        final boolean claimed = (dao.claimBusExtEvent(hostname, nextAvailable, input.getId(), now, rehydratedContext) == 1);
+        if (claimed) {
+            dao.insertClaimedExtHistory(hostname, now, input.getId(), rehydratedContext);
+            return Collections.singletonList(input);
+        }
+        return Collections.emptyList();
+    }
+
+    @Override
+    public void register(final Object handlerInstance) /* throws EventBusException */ {
+        eventBusDelegate.register(handlerInstance);
+    }
+
+    @Override
+    public void unregister(final Object handlerInstance) /* throws EventBusException */ {
+        eventBusDelegate.unregister(handlerInstance);
+    }
+
+    public void post(final ExtBusEventEntry event, InternalCallContext context) throws EventBusException{
+        dao.insertBusExtEvent(event, context);
+    }
+}
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/glue/BeatrixModule.java b/beatrix/src/main/java/com/ning/billing/beatrix/glue/BeatrixModule.java
index 02da6c9..3d46bb0 100644
--- a/beatrix/src/main/java/com/ning/billing/beatrix/glue/BeatrixModule.java
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/glue/BeatrixModule.java
@@ -16,15 +16,23 @@
 
 package com.ning.billing.beatrix.glue;
 
-import com.google.inject.AbstractModule;
+import com.ning.billing.beatrix.DefaultBeatrixService;
+import com.ning.billing.beatrix.bus.ExternalBus;
+import com.ning.billing.beatrix.extbus.BeatrixListener;
+import com.ning.billing.beatrix.extbus.PersistentExternalBus;
 import com.ning.billing.beatrix.lifecycle.DefaultLifecycle;
 import com.ning.billing.beatrix.lifecycle.Lifecycle;
 
+import com.google.inject.AbstractModule;
+
 public class BeatrixModule extends AbstractModule {
 
     @Override
     protected void configure() {
         bind(Lifecycle.class).to(DefaultLifecycle.class).asEagerSingleton();
+        bind(DefaultBeatrixService.class).asEagerSingleton();
+        bind(ExternalBus.class).to(PersistentExternalBus.class).asEagerSingleton();
+        bind(BeatrixListener.class).asEagerSingleton();
     }
 
 }
diff --git a/beatrix/src/main/resources/com/ning/billing/beatrix/ddl.sql b/beatrix/src/main/resources/com/ning/billing/beatrix/ddl.sql
new file mode 100644
index 0000000..13857a7
--- /dev/null
+++ b/beatrix/src/main/resources/com/ning/billing/beatrix/ddl.sql
@@ -0,0 +1,31 @@
+
+
+DROP TABLE IF EXISTS bus_ext_events;
+CREATE TABLE bus_ext_events (
+    record_id int(11) unsigned NOT NULL AUTO_INCREMENT,
+    event_type varchar(32) NOT NULL,
+    object_id varchar(64) NOT NULL,
+    object_type varchar(32) NOT NULL,
+    created_date datetime NOT NULL,
+    creating_owner char(50) NOT NULL,
+    processing_owner char(50) DEFAULT NULL,
+    processing_available_date datetime DEFAULT NULL,
+    processing_state varchar(14) DEFAULT 'AVAILABLE',
+    account_record_id int(11) unsigned default null,
+    tenant_record_id int(11) unsigned default null,
+    PRIMARY KEY(record_id)
+) ENGINE=innodb;
+CREATE INDEX  `idx_bus_ext_where` ON bus_ext_events (`processing_state`,`processing_owner`,`processing_available_date`);
+CREATE INDEX bus_ext_events_tenant_account_record_id ON bus_ext_events(tenant_record_id, account_record_id);
+
+DROP TABLE IF EXISTS claimed_bus_ext_events;
+CREATE TABLE claimed_bus_ext_events (
+    record_id int(11) unsigned NOT NULL AUTO_INCREMENT,
+    owner_id varchar(64) NOT NULL,
+    claimed_date datetime NOT NULL,
+    bus_event_id char(36) NOT NULL,
+    account_record_id int(11) unsigned default null,
+    tenant_record_id int(11) unsigned default null,
+    PRIMARY KEY(record_id)
+) ENGINE=innodb;
+CREATE INDEX claimed_bus_ext_events_tenant_account_record_id ON claimed_bus_ext_events(tenant_record_id, account_record_id);
diff --git a/beatrix/src/main/resources/com/ning/billing/beatrix/extbus/dao/ExtBusSqlDao.sql.stg b/beatrix/src/main/resources/com/ning/billing/beatrix/extbus/dao/ExtBusSqlDao.sql.stg
new file mode 100644
index 0000000..897d273
--- /dev/null
+++ b/beatrix/src/main/resources/com/ning/billing/beatrix/extbus/dao/ExtBusSqlDao.sql.stg
@@ -0,0 +1,104 @@
+group ExtBusSqlDao;
+          
+CHECK_TENANT() ::= "tenant_record_id = :tenantRecordId"
+AND_CHECK_TENANT() ::= "AND <CHECK_TENANT()>"
+
+getNextBusExtEventEntry() ::= <<
+    select
+      record_id
+      , event_type
+      , object_id
+      , object_type
+      , created_date
+      , creating_owner
+      , processing_owner
+      , processing_available_date
+      , processing_state
+      , account_record_id
+      , tenant_record_id
+    from bus_ext_events
+    where
+      processing_state != 'PROCESSED'
+      and processing_state != 'REMOVED'
+      and (processing_owner IS NULL OR processing_available_date \<= :now)
+    order by
+      record_id asc
+    limit :max
+    ;
+>>
+
+
+claimBusExtEvent() ::= <<
+    update bus_ext_events
+    set
+      processing_owner = :owner
+      , processing_available_date = :nextAvailable
+      , processing_state = 'IN_PROCESSING'
+    where
+      record_id = :recordId
+      and processing_state != 'PROCESSED'
+      and processing_state != 'REMOVED'
+      and (processing_owner IS NULL OR processing_available_date \<= :now)
+    ;
+>>
+
+clearBusExtEvent() ::= <<
+    update bus_ext_events
+    set
+      processing_state = 'PROCESSED'
+    where
+      record_id = :recordId
+    ;
+>>
+
+removeBusExtEventsById() ::= <<
+    update bus_ext_events
+    set
+      processing_state = 'REMOVED'
+    where
+      record_id = :recordId
+    ;
+>>
+
+
+insertBusExtEvent() ::= <<
+    insert into bus_ext_events (
+     event_type
+    , object_id
+    , object_type
+    , created_date
+    , creating_owner
+    , processing_owner
+    , processing_available_date
+    , processing_state
+    , account_record_id
+    , tenant_record_id
+    ) values (
+      :eventType
+    , :objectId
+    , :objectType    
+    , :createdDate
+    , :creatingOwner
+    , :processingOwner
+    , :processingAvailableDate
+    , :processingState
+    , :accountRecordId
+    , :tenantRecordId
+    );
+>>
+
+insertClaimedExtHistory() ::= <<
+    insert into claimed_bus_ext_events (
+          owner_id
+        , claimed_date
+        , bus_event_id
+        , account_record_id
+        , tenant_record_id
+      ) values (
+          :ownerId
+        , :claimedDate
+        , :busEventId
+        , :accountRecordId
+        , :tenantRecordId
+      );
+>>
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixModule.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixModule.java
index e8ac36a..09c1f17 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixModule.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixModule.java
@@ -16,6 +16,8 @@
 
 package com.ning.billing.beatrix.integration;
 
+import static org.testng.Assert.assertNotNull;
+
 import java.io.IOException;
 import java.net.URL;
 import java.util.Set;
@@ -23,14 +25,14 @@ import java.util.Set;
 import org.skife.config.ConfigurationObjectFactory;
 import org.skife.jdbi.v2.IDBI;
 
-import com.google.common.collect.ImmutableSet;
-import com.google.inject.AbstractModule;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
 import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
 import com.ning.billing.account.api.AccountService;
 import com.ning.billing.account.glue.DefaultAccountModule;
 import com.ning.billing.analytics.setup.AnalyticsModule;
+import com.ning.billing.beatrix.DefaultBeatrixService;
+import com.ning.billing.beatrix.bus.ExternalBus;
+import com.ning.billing.beatrix.extbus.BeatrixListener;
+import com.ning.billing.beatrix.extbus.PersistentExternalBus;
 import com.ning.billing.beatrix.integration.overdue.IntegrationTestOverdueModule;
 import com.ning.billing.beatrix.lifecycle.DefaultLifecycle;
 import com.ning.billing.beatrix.lifecycle.Lifecycle;
@@ -52,7 +54,6 @@ import com.ning.billing.overdue.OverdueService;
 import com.ning.billing.payment.api.PaymentService;
 import com.ning.billing.payment.glue.PaymentModule;
 import com.ning.billing.payment.provider.MockPaymentProviderPluginModule;
-import com.ning.billing.util.svcsapi.bus.BusService;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.clock.ClockMock;
 import com.ning.billing.util.email.EmailModule;
@@ -63,8 +64,12 @@ import com.ning.billing.util.glue.CustomFieldModule;
 import com.ning.billing.util.glue.GlobalLockerModule;
 import com.ning.billing.util.glue.NotificationQueueModule;
 import com.ning.billing.util.glue.TagStoreModule;
+import com.ning.billing.util.svcsapi.bus.BusService;
 
-import static org.testng.Assert.assertNotNull;
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.AbstractModule;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
 
 
 public class BeatrixModule extends AbstractModule {
@@ -110,6 +115,14 @@ public class BeatrixModule extends AbstractModule {
 
         bind(InvoiceChecker.class).asEagerSingleton();
         bind(PaymentChecker.class).asEagerSingleton();
+
+        installPublicBus();
+    }
+
+    private void installPublicBus() {
+        bind(ExternalBus.class).to(PersistentExternalBus.class).asEagerSingleton();
+        bind(BeatrixListener.class).asEagerSingleton();
+        bind(DefaultBeatrixService.class).asEagerSingleton();
     }
 
     private static final class PaymentPluginMockModule extends PaymentModule {
@@ -146,6 +159,7 @@ public class BeatrixModule extends AbstractModule {
                     .add(injector.getInstance(InvoiceService.class))
                     .add(injector.getInstance(PaymentService.class))
                     .add(injector.getInstance(OverdueService.class))
+                    .add(injector.getInstance(DefaultBeatrixService.class))
                     .build();
             return services;
         }
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
index 0d3e8f8..df37da6 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
@@ -16,6 +16,10 @@
 
 package com.ning.billing.beatrix.integration;
 
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.UUID;
@@ -43,6 +47,7 @@ import com.ning.billing.api.TestApiListener;
 import com.ning.billing.api.TestApiListener.NextEvent;
 import com.ning.billing.api.TestListenerStatus;
 import com.ning.billing.beatrix.BeatrixTestSuiteWithEmbeddedDB;
+import com.ning.billing.beatrix.bus.ExternalBus;
 import com.ning.billing.beatrix.lifecycle.Lifecycle;
 import com.ning.billing.beatrix.util.InvoiceChecker;
 import com.ning.billing.beatrix.util.PaymentChecker;
@@ -76,18 +81,14 @@ import com.ning.billing.payment.api.PaymentApiException;
 import com.ning.billing.payment.api.PaymentMethodPlugin;
 import com.ning.billing.payment.provider.MockPaymentProviderPlugin;
 import com.ning.billing.util.api.TagUserApi;
-import com.ning.billing.util.svcsapi.bus.BusService;
 import com.ning.billing.util.clock.ClockMock;
+import com.ning.billing.util.svcsapi.bus.BusService;
 
 import com.google.common.base.Function;
 import com.google.common.base.Joiner;
 import com.google.inject.Inject;
 import com.google.inject.name.Named;
 
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-
 public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implements TestListenerStatus {
 
     protected static final DateTimeZone testTimeZone = DateTimeZone.UTC;
@@ -172,6 +173,10 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
     @Inject
     protected PaymentChecker paymentChecker;
 
+
+    @Inject
+    protected ExternalBus externalBus;
+
     protected TestApiListener busHandler;
 
     private boolean isListenerFailed;
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestPublicBus.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestPublicBus.java
new file mode 100644
index 0000000..80ebcf5
--- /dev/null
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestPublicBus.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+package com.ning.billing.beatrix.integration;
+
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Guice;
+import org.testng.annotations.Test;
+
+import com.ning.billing.account.api.Account;
+import com.ning.billing.api.TestApiListener.NextEvent;
+import com.ning.billing.beatrix.bus.BusEvent;
+import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.api.PlanPhaseSpecifier;
+import com.ning.billing.catalog.api.PriceListSet;
+import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.user.SubscriptionBundle;
+import com.ning.billing.entitlement.api.user.SubscriptionData;
+
+import com.google.common.eventbus.Subscribe;
+
+@Guice(modules = {BeatrixModule.class})
+public class TestPublicBus extends TestIntegrationBase {
+
+    private PublicListener publicListener;
+
+
+    public class PublicListener {
+        @Subscribe
+        public void handleExternalEvents(final BusEvent event) {
+            log.info("GOT EXT EVENT " + event.toString());
+        }
+    }
+
+    @Override
+    @BeforeMethod(groups = "slow")
+    public void setupTest() throws Exception {
+
+        publicListener = new PublicListener();
+
+        log.warn("\n");
+        log.warn("RESET TEST FRAMEWORK\n\n");
+
+        clock.resetDeltaFromReality();
+        resetTestListenerStatus();
+        busHandler.reset();
+
+        // Start services
+        lifecycle.fireStartupSequencePriorEventRegistration();
+        busService.getBus().register(busHandler);
+        externalBus.register(publicListener);
+        lifecycle.fireStartupSequencePostEventRegistration();
+    }
+
+
+    @Test(groups= "{slow}")
+    public void testSimple() throws Exception {
+
+        final DateTime initialDate = new DateTime(2012, 2, 1, 0, 3, 42, 0, testTimeZone);
+        final int billingDay = 2;
+
+        log.info("Beginning test with BCD of " + billingDay);
+        final Account account = createAccountWithPaymentMethod(getAccountData(billingDay));
+        final UUID accountId = account.getId();
+        assertNotNull(account);
+
+        // set clock to the initial start date
+        clock.setDeltaFromReality(initialDate.getMillis() - clock.getUTCNow().getMillis());
+        final SubscriptionBundle bundle = entitlementUserApi.createBundleForAccount(account.getId(), "whatever2", callContext);
+
+        String productName = "Shotgun";
+        BillingPeriod term = BillingPeriod.MONTHLY;
+        String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+        //
+        // CREATE SUBSCRIPTION AND EXPECT BOTH EVENTS: NextEvent.CREATE NextEvent.INVOICE
+        //
+        busHandler.pushExpectedEvent(NextEvent.CREATE);
+        busHandler.pushExpectedEvent(NextEvent.INVOICE);
+
+        SubscriptionData subscription = subscriptionDataFromSubscription(entitlementUserApi.createSubscription(bundle.getId(),
+                                                                                                               new PlanPhaseSpecifier(productName, ProductCategory.BASE, term, planSetName, null), null, callContext));
+
+        assertNotNull(subscription);
+        assertTrue(busHandler.isCompleted(DELAY));
+    }
+
+
+
+
+}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultRepairEntitlementEvent.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultRepairEntitlementEvent.java
index 77199dc..cfe4a1c 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultRepairEntitlementEvent.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultRepairEntitlementEvent.java
@@ -48,8 +48,8 @@ public class DefaultRepairEntitlementEvent extends DefaultBusInternalEvent imple
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.BUNDLE_REPAIR;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.BUNDLE_REPAIR;
     }
 
     @Override
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionEvent.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionEvent.java
index 68507fd..0092b7c 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionEvent.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionEvent.java
@@ -113,8 +113,8 @@ public abstract class DefaultSubscriptionEvent extends DefaultBusInternalEvent i
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.SUBSCRIPTION_TRANSITION;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.SUBSCRIPTION_TRANSITION;
     }
 
     @JsonProperty("eventId")
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
index 937ee8e..a94ffc5 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
@@ -63,8 +63,8 @@ import com.ning.billing.util.notificationq.NotificationQueueService;
 import com.ning.billing.util.notificationq.NotificationQueueService.NoSuchNotificationQueue;
 import com.ning.billing.util.notificationq.NotificationQueueService.NotificationQueueAlreadyExists;
 import com.ning.billing.util.notificationq.NotificationQueueService.NotificationQueueHandler;
-import com.ning.billing.util.svcsapi.bus.Bus;
-import com.ning.billing.util.svcsapi.bus.Bus.EventBusException;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
 
 import com.google.inject.Inject;
 
@@ -79,7 +79,7 @@ public class Engine implements EventListener, EntitlementService {
     private final EntitlementDao dao;
     private final PlanAligner planAligner;
     private final AddonUtils addonUtils;
-    private final Bus eventBus;
+    private final InternalBus eventBus;
     private final EntitlementConfig config;
     private final NotificationQueueService notificationQueueService;
     private final SubscriptionFactory subscriptionFactory;
@@ -90,7 +90,7 @@ public class Engine implements EventListener, EntitlementService {
     @Inject
     public Engine(final Clock clock, final EntitlementDao dao, final PlanAligner planAligner,
                   final EntitlementConfig config,
-                  final AddonUtils addonUtils, final Bus eventBus,
+                  final AddonUtils addonUtils, final InternalBus eventBus,
                   final NotificationQueueService notificationQueueService,
                   final SubscriptionFactory subscriptionFactory,
                   final InternalCallContextFactory internalCallContextFactory) {
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java
index 755fa23..e7ce114 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java
@@ -76,8 +76,8 @@ import com.ning.billing.util.notificationq.NotificationKey;
 import com.ning.billing.util.notificationq.NotificationQueue;
 import com.ning.billing.util.notificationq.NotificationQueueService;
 import com.ning.billing.util.notificationq.NotificationQueueService.NoSuchNotificationQueue;
-import com.ning.billing.util.svcsapi.bus.Bus;
-import com.ning.billing.util.svcsapi.bus.Bus.EventBusException;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Collections2;
@@ -93,11 +93,11 @@ public class AuditedEntitlementDao implements EntitlementDao {
     private final EntitlementEventSqlDao eventsDao;
     private final NotificationQueueService notificationQueueService;
     private final AddonUtils addonUtils;
-    private final Bus eventBus;
+    private final InternalBus eventBus;
 
     @Inject
     public AuditedEntitlementDao(final IDBI dbi, final Clock clock, final AddonUtils addonUtils,
-                                 final NotificationQueueService notificationQueueService, final Bus eventBus, final CatalogService catalogService) {
+                                 final NotificationQueueService notificationQueueService, final InternalBus eventBus, final CatalogService catalogService) {
         this.clock = clock;
         this.subscriptionsDao = dbi.onDemand(SubscriptionSqlDao.class);
         this.eventsDao = dbi.onDemand(EntitlementEventSqlDao.class);
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoSql.java b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoSql.java
index e525e46..048ab21 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoSql.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoSql.java
@@ -20,7 +20,7 @@ import org.skife.jdbi.v2.IDBI;
 
 import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.entitlement.engine.addon.AddonUtils;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.notificationq.NotificationQueueService;
 
@@ -29,7 +29,7 @@ import com.google.inject.Inject;
 public class MockEntitlementDaoSql extends AuditedEntitlementDao {
     @Inject
     public MockEntitlementDaoSql(final IDBI dbi, final Clock clock, final AddonUtils addonUtils, final NotificationQueueService notificationQueueService,
-                                 final Bus eventBus, final CatalogService catalogService) {
+                                 final InternalBus eventBus, final CatalogService catalogService) {
         super(dbi, clock, addonUtils, notificationQueueService, eventBus, catalogService);
     }
 }
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/DefaultInvoiceService.java b/invoice/src/main/java/com/ning/billing/invoice/api/DefaultInvoiceService.java
index aa28c01..5d31d58 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/DefaultInvoiceService.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/DefaultInvoiceService.java
@@ -21,7 +21,7 @@ import com.ning.billing.invoice.TagHandler;
 import com.ning.billing.invoice.notification.NextBillingDateNotifier;
 import com.ning.billing.lifecycle.LifecycleHandlerType;
 import com.ning.billing.lifecycle.LifecycleHandlerType.LifecycleLevel;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.notificationq.NotificationQueueService.NoSuchNotificationQueue;
 import com.ning.billing.util.notificationq.NotificationQueueService.NotificationQueueAlreadyExists;
 
@@ -33,10 +33,10 @@ public class DefaultInvoiceService implements InvoiceService {
     private final NextBillingDateNotifier dateNotifier;
     private final InvoiceListener invoiceListener;
     private final TagHandler tagHandler;
-    private final Bus eventBus;
+    private final InternalBus eventBus;
 
     @Inject
-    public DefaultInvoiceService(final InvoiceListener invoiceListener, final TagHandler tagHandler, final Bus eventBus, final NextBillingDateNotifier dateNotifier) {
+    public DefaultInvoiceService(final InvoiceListener invoiceListener, final TagHandler tagHandler, final InternalBus eventBus, final NextBillingDateNotifier dateNotifier) {
         this.invoiceListener = invoiceListener;
         this.tagHandler = tagHandler;
         this.eventBus = eventBus;
@@ -63,7 +63,7 @@ public class DefaultInvoiceService implements InvoiceService {
         try {
             eventBus.register(invoiceListener);
             eventBus.register(tagHandler);
-        } catch (Bus.EventBusException e) {
+        } catch (InternalBus.EventBusException e) {
             throw new RuntimeException("Unable to register to the EventBus!", e);
         }
     }
@@ -73,7 +73,7 @@ public class DefaultInvoiceService implements InvoiceService {
         try {
             eventBus.unregister(invoiceListener);
             eventBus.unregister(tagHandler);
-        } catch (Bus.EventBusException e) {
+        } catch (InternalBus.EventBusException e) {
             throw new RuntimeException("Unable to unregister to the EventBus!", e);
         }
     }
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceAdjustmentEvent.java b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceAdjustmentEvent.java
index 64913da..614431e 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceAdjustmentEvent.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceAdjustmentEvent.java
@@ -53,8 +53,8 @@ public class DefaultInvoiceAdjustmentEvent extends DefaultBusInternalEvent imple
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.INVOICE_ADJUSTMENT;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.INVOICE_ADJUSTMENT;
     }
 
 
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceCreationEvent.java b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceCreationEvent.java
index 0e5c678..6c4d2c8 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceCreationEvent.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceCreationEvent.java
@@ -51,8 +51,8 @@ public class DefaultInvoiceCreationEvent extends DefaultBusInternalEvent impleme
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.INVOICE_CREATION;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.INVOICE_CREATION;
     }
 
 
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
index b1fe43b..5de9673 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
@@ -52,8 +52,8 @@ import com.ning.billing.util.callcontext.TenantContext;
 import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.tag.TagInternalApi;
-import com.ning.billing.util.svcsapi.bus.Bus;
-import com.ning.billing.util.svcsapi.bus.Bus.EventBusException;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
 import com.ning.billing.util.tag.ControlTagType;
 import com.ning.billing.util.tag.Tag;
 
@@ -69,10 +69,10 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
     private final TagInternalApi tagApi;
     private final HtmlInvoiceGenerator generator;
     private final InternalCallContextFactory internalCallContextFactory;
-    private final Bus eventBus;
+    private final InternalBus eventBus;
 
     @Inject
-    public DefaultInvoiceUserApi(final InvoiceDao dao, final InvoiceDispatcher dispatcher, final AccountInternalApi accountUserApi, final Bus eventBus,
+    public DefaultInvoiceUserApi(final InvoiceDao dao, final InvoiceDispatcher dispatcher, final AccountInternalApi accountUserApi, final InternalBus eventBus,
                                  final TagInternalApi tagApi, final HtmlInvoiceGenerator generator, final InternalCallContextFactory internalCallContextFactory) {
         this.dao = dao;
         this.dispatcher = dispatcher;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultNullInvoiceEvent.java b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultNullInvoiceEvent.java
index 7cf9b09..059dde1 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultNullInvoiceEvent.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultNullInvoiceEvent.java
@@ -45,8 +45,8 @@ public class DefaultNullInvoiceEvent extends DefaultBusInternalEvent implements 
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.INVOICE_EMPTY;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.INVOICE_EMPTY;
     }
 
 
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java
index b1789e0..ab3cc17 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/AuditedInvoiceDao.java
@@ -58,8 +58,8 @@ import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.dao.EntityAudit;
 import com.ning.billing.util.dao.TableName;
-import com.ning.billing.util.svcsapi.bus.Bus;
-import com.ning.billing.util.svcsapi.bus.Bus.EventBusException;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Objects;
@@ -77,13 +77,13 @@ public class AuditedInvoiceDao implements InvoiceDao {
     private final NextBillingDatePoster nextBillingDatePoster;
     private final InvoiceItemSqlDao invoiceItemSqlDao;
     private final Clock clock;
-    private final Bus eventBus;
+    private final InternalBus eventBus;
 
     @Inject
     public AuditedInvoiceDao(final IDBI dbi,
             final NextBillingDatePoster nextBillingDatePoster,
             final Clock clock,
-            final Bus eventBus) {
+            final InternalBus eventBus) {
         this.invoiceSqlDao = dbi.onDemand(InvoiceSqlDao.class);
         this.invoicePaymentSqlDao = dbi.onDemand(InvoicePaymentSqlDao.class);
         this.invoiceItemSqlDao = dbi.onDemand(InvoiceItemSqlDao.class);
diff --git a/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java b/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
index 4c8ba26..bd9fa92 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
@@ -61,8 +61,8 @@ import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
 import com.ning.billing.util.svcapi.junction.BillingEventSet;
 import com.ning.billing.util.svcapi.junction.BillingInternalApi;
-import com.ning.billing.util.svcsapi.bus.Bus;
-import com.ning.billing.util.svcsapi.bus.Bus.EventBusException;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Collections2;
@@ -80,7 +80,7 @@ public class InvoiceDispatcher {
     private final InvoiceDao invoiceDao;
     private final InvoiceNotifier invoiceNotifier;
     private final GlobalLocker locker;
-    private final Bus eventBus;
+    private final InternalBus eventBus;
     private final Clock clock;
     private final InternalCallContextFactory internalCallContextFactory;
 
@@ -91,7 +91,7 @@ public class InvoiceDispatcher {
                              final InvoiceDao invoiceDao,
                              final InvoiceNotifier invoiceNotifier,
                              final GlobalLocker locker,
-                             final Bus eventBus,
+                             final InternalBus eventBus,
                              final Clock clock,
                              final InternalCallContextFactory internalCallContextFactory) {
         this.generator = generator;
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java
index cbe61de..3f14f86 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/invoice/TestDefaultInvoicePaymentApi.java
@@ -50,7 +50,7 @@ import com.ning.billing.invoice.notification.NextBillingDatePoster;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -80,7 +80,7 @@ public class TestDefaultInvoicePaymentApi extends InvoiceTestSuiteWithEmbeddedDB
 
         final NextBillingDatePoster nextBillingDatePoster = new MockNextBillingDatePoster();
         internalCallContextFactory = new InternalCallContextFactory(dbi, clock);
-        final InvoiceDao invoiceDao = new AuditedInvoiceDao(dbi, nextBillingDatePoster, clock, Mockito.mock(Bus.class));
+        final InvoiceDao invoiceDao = new AuditedInvoiceDao(dbi, nextBillingDatePoster, clock, Mockito.mock(InternalBus.class));
         invoicePaymentApi = new DefaultInvoicePaymentApi(invoiceDao, internalCallContextFactory);
     }
 
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java
index 01a6bff..7af8b5e 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/InvoiceDaoTestBase.java
@@ -35,10 +35,10 @@ import com.ning.billing.invoice.glue.InvoiceModuleWithEmbeddedDb;
 import com.ning.billing.invoice.notification.MockNextBillingDatePoster;
 import com.ning.billing.invoice.notification.NextBillingDatePoster;
 import com.ning.billing.invoice.tests.InvoicingTestBase;
-import com.ning.billing.util.bus.InMemoryBus;
+import com.ning.billing.util.bus.InMemoryInternalBus;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.tag.api.user.TagEventBuilder;
 
 public class InvoiceDaoTestBase extends InvoicingTestBase {
@@ -50,7 +50,7 @@ public class InvoiceDaoTestBase extends InvoicingTestBase {
     protected InvoicePaymentSqlDao invoicePaymentDao;
     protected Clock clock;
     protected InvoiceGenerator generator;
-    protected Bus bus;
+    protected InternalBus bus;
 
     private final InvoiceConfig invoiceConfig = new InvoiceConfig() {
         @Override
@@ -94,7 +94,7 @@ public class InvoiceDaoTestBase extends InvoicingTestBase {
 
         clock = new ClockMock();
 
-        bus = new InMemoryBus();
+        bus = new InMemoryInternalBus();
         bus.start();
 
         final NextBillingDatePoster nextBillingDatePoster = new MockNextBillingDatePoster();
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java b/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
index 6c47c67..3f67067 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
@@ -36,18 +36,18 @@ import com.ning.billing.invoice.api.InvoicePayment;
 import com.ning.billing.invoice.api.user.DefaultInvoiceCreationEvent;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 import com.google.inject.Inject;
 
 public class MockInvoiceDao implements InvoiceDao {
 
-    private final Bus eventBus;
+    private final InternalBus eventBus;
     private final Object monitor = new Object();
     private final Map<UUID, Invoice> invoices = new LinkedHashMap<UUID, Invoice>();
 
     @Inject
-    public MockInvoiceDao(final Bus eventBus) {
+    public MockInvoiceDao(final InternalBus eventBus) {
         this.eventBus = eventBus;
     }
 
@@ -60,7 +60,7 @@ public class MockInvoiceDao implements InvoiceDao {
             eventBus.post(new DefaultInvoiceCreationEvent(invoice.getId(), invoice.getAccountId(),
                                                           invoice.getBalance(), invoice.getCurrency(),
                                                           null, 1L, 1L), context);
-        } catch (Bus.EventBusException ex) {
+        } catch (InternalBus.EventBusException ex) {
             throw new RuntimeException(ex);
         }
     }
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java b/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java
index 7a114a1..b1c6ddc 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java
@@ -37,7 +37,7 @@ import com.ning.billing.invoice.api.InvoicePayment;
 import com.ning.billing.invoice.notification.NextBillingDatePoster;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.tag.dao.MockTagDao;
 import com.ning.billing.util.tag.dao.MockTagDefinitionDao;
 import com.ning.billing.util.tag.dao.TagDao;
@@ -72,7 +72,7 @@ public class TestDefaultInvoiceDao extends InvoiceTestSuite {
         final NextBillingDatePoster poster = Mockito.mock(NextBillingDatePoster.class);
         final TagDefinitionDao tagDefinitionDao = new MockTagDefinitionDao();
         final TagDao tagDao = new MockTagDao();
-        dao = new AuditedInvoiceDao(idbi, poster, Mockito.mock(Clock.class), Mockito.mock(Bus.class));
+        dao = new AuditedInvoiceDao(idbi, poster, Mockito.mock(Clock.class), Mockito.mock(InternalBus.class));
     }
 
     @Test(groups = "fast")
diff --git a/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java b/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
index 1dec97e..fd17983 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
@@ -66,7 +66,7 @@ import com.ning.billing.util.notificationq.DummySqlTest;
 import com.ning.billing.util.notificationq.NotificationQueueService;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
@@ -79,7 +79,7 @@ public class TestNextBillingDateNotifier extends InvoiceTestSuiteWithEmbeddedDB 
     private Clock clock;
     private DefaultNextBillingDateNotifier notifier;
     private DummySqlTest dao;
-    private Bus eventBus;
+    private InternalBus eventBus;
     private InvoiceListenerMock listener;
     private NotificationQueueService notificationQueueService;
     private InternalCallContextFactory internalCallContextFactory;
@@ -152,7 +152,7 @@ public class TestNextBillingDateNotifier extends InvoiceTestSuiteWithEmbeddedDB 
         clock = g.getInstance(Clock.class);
         final IDBI dbi = g.getInstance(IDBI.class);
         dao = dbi.onDemand(DummySqlTest.class);
-        eventBus = g.getInstance(Bus.class);
+        eventBus = g.getInstance(InternalBus.class);
         notificationQueueService = g.getInstance(NotificationQueueService.class);
         final InvoiceDispatcher dispatcher = g.getInstance(InvoiceDispatcher.class);
 
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java b/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
index 28f1bc9..5280304 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/TestChargeBacks.java
@@ -54,7 +54,7 @@ import com.ning.billing.invoice.notification.NextBillingDatePoster;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
 
@@ -83,7 +83,7 @@ public class TestChargeBacks extends InvoiceTestSuiteWithEmbeddedDB {
         invoiceItemSqlDao.test(internalCallContext);
         final NextBillingDatePoster nextBillingDatePoster = new MockNextBillingDatePoster();
         internalCallContextFactory = new InternalCallContextFactory(dbi, clock);
-        final InvoiceDao invoiceDao = new AuditedInvoiceDao(dbi, nextBillingDatePoster, clock, Mockito.mock(Bus.class));
+        final InvoiceDao invoiceDao = new AuditedInvoiceDao(dbi, nextBillingDatePoster, clock, Mockito.mock(InternalBus.class));
         invoicePaymentApi = new DefaultInvoicePaymentApi(invoiceDao, internalCallContextFactory);
     }
 
diff --git a/overdue/src/main/java/com/ning/billing/overdue/applicator/DefaultOverdueChangeEvent.java b/overdue/src/main/java/com/ning/billing/overdue/applicator/DefaultOverdueChangeEvent.java
index fac42a4..a7494e6 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/applicator/DefaultOverdueChangeEvent.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/applicator/DefaultOverdueChangeEvent.java
@@ -51,8 +51,8 @@ public class DefaultOverdueChangeEvent extends DefaultBusInternalEvent implement
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.OVERDUE_CHANGE;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.OVERDUE_CHANGE;
     }
 
     @Override
diff --git a/overdue/src/main/java/com/ning/billing/overdue/applicator/OverdueStateApplicator.java b/overdue/src/main/java/com/ning/billing/overdue/applicator/OverdueStateApplicator.java
index e10fb5e..6873c2e 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/applicator/OverdueStateApplicator.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/applicator/OverdueStateApplicator.java
@@ -56,7 +56,7 @@ import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
 import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
 import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 import com.google.common.collect.ImmutableList;
 import com.google.inject.Inject;
@@ -69,7 +69,7 @@ public class OverdueStateApplicator<T extends Blockable> {
     private final BlockingInternalApi blockingApi;
     private final Clock clock;
     private final OverdueCheckPoster poster;
-    private final Bus bus;
+    private final InternalBus bus;
     private final AccountInternalApi accountApi;
     private final EntitlementInternalApi entitlementUserApi;
     private final OverdueEmailGenerator overdueEmailGenerator;
@@ -78,7 +78,7 @@ public class OverdueStateApplicator<T extends Blockable> {
     @Inject
     public OverdueStateApplicator(final BlockingInternalApi accessApi, final AccountInternalApi accountApi, final EntitlementInternalApi entitlementUserApi,
                                   final Clock clock, final OverdueCheckPoster poster, final OverdueEmailGenerator overdueEmailGenerator,
-                                  final EmailConfig config, final Bus bus) {
+                                  final EmailConfig config, final InternalBus bus) {
         this.blockingApi = accessApi;
         this.accountApi = accountApi;
         this.entitlementUserApi = entitlementUserApi;
diff --git a/overdue/src/main/java/com/ning/billing/overdue/service/DefaultOverdueService.java b/overdue/src/main/java/com/ning/billing/overdue/service/DefaultOverdueService.java
index a128a26..c0879ad 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/service/DefaultOverdueService.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/service/DefaultOverdueService.java
@@ -32,7 +32,7 @@ import com.ning.billing.overdue.api.DefaultOverdueUserApi;
 import com.ning.billing.overdue.config.OverdueConfig;
 import com.ning.billing.overdue.listener.OverdueListener;
 import com.ning.billing.overdue.wrapper.OverdueWrapperFactory;
-import com.ning.billing.util.svcsapi.bus.Bus.EventBusException;
+import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
 import com.ning.billing.util.svcsapi.bus.BusService;
 import com.ning.billing.util.config.XMLLoader;
 
diff --git a/overdue/src/test/java/com/ning/billing/overdue/applicator/TestOverdueStateApplicator.java b/overdue/src/test/java/com/ning/billing/overdue/applicator/TestOverdueStateApplicator.java
index c6adba9..c57c398 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/applicator/TestOverdueStateApplicator.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/applicator/TestOverdueStateApplicator.java
@@ -33,7 +33,7 @@ import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.overdue.OverdueState;
 import com.ning.billing.overdue.OverdueTestBase;
 import com.ning.billing.overdue.config.OverdueConfig;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.config.XMLLoader;
 import com.ning.billing.util.events.OverdueChangeInternalEvent;
 import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
@@ -49,7 +49,7 @@ public class TestOverdueStateApplicator extends OverdueTestBase {
     OverdueBusListenerTester listener;
 
     @Inject
-    Bus bus;
+    InternalBus bus;
 
     @Test(groups = "slow")
     public void testApplicator() throws Exception {
diff --git a/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java b/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java
index 31a5d35..6764274 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java
@@ -73,7 +73,7 @@ import com.ning.billing.util.notificationq.DefaultNotificationQueueService;
 import com.ning.billing.util.notificationq.NotificationQueueService;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.tag.dao.AuditedTagDao;
 import com.ning.billing.util.tag.dao.TagDao;
 
@@ -85,7 +85,7 @@ public class TestOverdueCheckNotifier extends OverdueTestSuiteWithEmbeddedDB {
     private Clock clock;
     private DefaultOverdueCheckNotifier notifier;
 
-    private Bus eventBus;
+    private InternalBus eventBus;
     private OverdueListenerMock listener;
     private NotificationQueueService notificationQueueService;
 
@@ -147,7 +147,7 @@ public class TestOverdueCheckNotifier extends OverdueTestSuiteWithEmbeddedDB {
 
         clock = g.getInstance(Clock.class);
 
-        eventBus = g.getInstance(Bus.class);
+        eventBus = g.getInstance(InternalBus.class);
         notificationQueueService = g.getInstance(NotificationQueueService.class);
 
         final OverdueProperties properties = g.getInstance(OverdueProperties.class);
diff --git a/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentErrorEvent.java b/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentErrorEvent.java
index 9c88a36..836b7db 100644
--- a/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentErrorEvent.java
+++ b/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentErrorEvent.java
@@ -62,8 +62,8 @@ public class DefaultPaymentErrorEvent extends DefaultBusInternalEvent implements
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.PAYMENT_ERROR;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.PAYMENT_ERROR;
     }
 
 
diff --git a/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentInfoEvent.java b/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentInfoEvent.java
index eb8ea64..055ec46 100644
--- a/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentInfoEvent.java
+++ b/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentInfoEvent.java
@@ -96,8 +96,8 @@ public class DefaultPaymentInfoEvent extends DefaultBusInternalEvent implements 
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.PAYMENT_INFO;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.PAYMENT_INFO;
     }
 
     @Override
diff --git a/payment/src/main/java/com/ning/billing/payment/bus/InvoiceHandler.java b/payment/src/main/java/com/ning/billing/payment/bus/InvoiceHandler.java
index e2a67e2..749baa3 100644
--- a/payment/src/main/java/com/ning/billing/payment/bus/InvoiceHandler.java
+++ b/payment/src/main/java/com/ning/billing/payment/bus/InvoiceHandler.java
@@ -30,7 +30,6 @@ import com.ning.billing.util.callcontext.DefaultCallContext;
 import com.ning.billing.util.callcontext.InternalCallContextFactory;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.callcontext.UserType;
-import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.events.InvoiceCreationInternalEvent;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 
@@ -41,17 +40,14 @@ public class InvoiceHandler {
 
     private final PaymentProcessor paymentProcessor;
     private final AccountInternalApi accountApi;
-    private final Clock clock;
     private final InternalCallContextFactory internalCallContextFactory;
 
     private static final Logger log = LoggerFactory.getLogger(InvoiceHandler.class);
 
     @Inject
-    public InvoiceHandler(final Clock clock,
-                          final AccountInternalApi accountApi,
+    public InvoiceHandler(final AccountInternalApi accountApi,
                           final PaymentProcessor paymentProcessor,
                           final InternalCallContextFactory internalCallContextFactory) {
-        this.clock = clock;
         this.accountApi = accountApi;
         this.paymentProcessor = paymentProcessor;
         this.internalCallContextFactory = internalCallContextFactory;
diff --git a/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java b/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
index 78a8742..ecf7318 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
@@ -47,7 +47,7 @@ import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.globallocker.GlobalLocker;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.tag.TagInternalApi;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Collections2;
@@ -64,7 +64,7 @@ public class PaymentMethodProcessor extends ProcessorBase {
     @Inject
     public PaymentMethodProcessor(final PaymentProviderPluginRegistry pluginRegistry,
                                   final AccountInternalApi accountInternalApi,
-                                  final Bus eventBus,
+                                  final InternalBus eventBus,
                                   final PaymentDao paymentDao,
                                   final TagInternalApi tagUserApi,
                                   final GlobalLocker locker,
diff --git a/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java b/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java
index 5c59ffd..a3b0a3f 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java
@@ -66,7 +66,7 @@ import com.ning.billing.util.events.PaymentErrorInternalEvent;
 import com.ning.billing.util.globallocker.GlobalLocker;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.tag.TagInternalApi;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Collections2;
@@ -99,7 +99,7 @@ public class PaymentProcessor extends ProcessorBase {
                             final PluginFailureRetryServiceScheduler pluginFailureRetryService,
                             final AutoPayRetryServiceScheduler autoPayoffRetryService,
                             final PaymentDao paymentDao,
-                            final Bus eventBus,
+                            final InternalBus eventBus,
                             final Clock clock,
                             final GlobalLocker locker,
                             final PaymentConfig paymentConfig,
diff --git a/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java b/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java
index 22a48fe..e2d489e 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java
@@ -43,8 +43,8 @@ import com.ning.billing.util.globallocker.GlobalLocker.LockerType;
 import com.ning.billing.util.globallocker.LockFailedException;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.tag.TagInternalApi;
-import com.ning.billing.util.svcsapi.bus.Bus;
-import com.ning.billing.util.svcsapi.bus.Bus.EventBusException;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
 import com.ning.billing.util.tag.ControlTagType;
 import com.ning.billing.util.tag.Tag;
 
@@ -54,7 +54,7 @@ public abstract class ProcessorBase {
 
     protected final PaymentProviderPluginRegistry pluginRegistry;
     protected final AccountInternalApi accountInternalApi;
-    protected final Bus eventBus;
+    protected final InternalBus eventBus;
     protected final GlobalLocker locker;
     protected final ExecutorService executor;
     protected final PaymentDao paymentDao;
@@ -64,7 +64,7 @@ public abstract class ProcessorBase {
 
     public ProcessorBase(final PaymentProviderPluginRegistry pluginRegistry,
                          final AccountInternalApi accountInternalApi,
-                         final Bus eventBus,
+                         final InternalBus eventBus,
                          final PaymentDao paymentDao,
                          final TagInternalApi tagInternalApi,
                          final GlobalLocker locker,
diff --git a/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java b/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java
index c37b6ed..dbc2459 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java
@@ -57,7 +57,7 @@ import com.ning.billing.util.callcontext.UserType;
 import com.ning.billing.util.globallocker.GlobalLocker;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.tag.TagInternalApi;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 import com.google.common.base.Function;
 import com.google.common.base.Objects;
@@ -77,7 +77,7 @@ public class RefundProcessor extends ProcessorBase {
     public RefundProcessor(final PaymentProviderPluginRegistry pluginRegistry,
                            final AccountInternalApi accountApi,
                            final InvoicePaymentApi invoicePaymentApi,
-                           final Bus eventBus,
+                           final InternalBus eventBus,
                            final InternalCallContextFactory internalCallContextFactory,
                            final TagInternalApi tagUserApi,
                            final PaymentDao paymentDao,
diff --git a/payment/src/main/java/com/ning/billing/payment/glue/DefaultPaymentService.java b/payment/src/main/java/com/ning/billing/payment/glue/DefaultPaymentService.java
index 1991433..81f0ef5 100644
--- a/payment/src/main/java/com/ning/billing/payment/glue/DefaultPaymentService.java
+++ b/payment/src/main/java/com/ning/billing/payment/glue/DefaultPaymentService.java
@@ -29,7 +29,7 @@ import com.ning.billing.payment.bus.TagHandler;
 import com.ning.billing.payment.retry.AutoPayRetryService;
 import com.ning.billing.payment.retry.FailedPaymentRetryService;
 import com.ning.billing.payment.retry.PluginFailureRetryService;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.notificationq.NotificationQueueService.NoSuchNotificationQueue;
 import com.ning.billing.util.notificationq.NotificationQueueService.NotificationQueueAlreadyExists;
 
@@ -41,7 +41,7 @@ public class DefaultPaymentService implements PaymentService {
 
     private final InvoiceHandler invoiceHandler;
     private final TagHandler tagHandler;
-    private final Bus eventBus;
+    private final InternalBus eventBus;
     private final PaymentApi api;
     private final FailedPaymentRetryService failedRetryService;
     private final PluginFailureRetryService timedoutRetryService;
@@ -50,7 +50,7 @@ public class DefaultPaymentService implements PaymentService {
     @Inject
     public DefaultPaymentService(final InvoiceHandler invoiceHandler,
             final TagHandler tagHandler,
-            final PaymentApi api, final Bus eventBus,
+            final PaymentApi api, final InternalBus eventBus,
             final FailedPaymentRetryService failedRetryService,
             final PluginFailureRetryService timedoutRetryService,
             final AutoPayRetryService autoPayoffRetryService) {
@@ -80,7 +80,7 @@ public class DefaultPaymentService implements PaymentService {
         try {
             eventBus.register(invoiceHandler);
             eventBus.register(tagHandler);
-        } catch (Bus.EventBusException e) {
+        } catch (InternalBus.EventBusException e) {
             log.error("Unable to register with the EventBus!", e);
         }
     }
diff --git a/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java b/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
index ade5fd8..a4ad080 100644
--- a/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
+++ b/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
@@ -52,8 +52,8 @@ import com.ning.billing.payment.provider.DefaultNoOpPaymentMethodPlugin;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.glue.CallContextModule;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
-import com.ning.billing.util.svcsapi.bus.Bus;
-import com.ning.billing.util.svcsapi.bus.Bus.EventBusException;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
 
 import com.google.inject.Inject;
 
@@ -62,7 +62,7 @@ public class TestPaymentApi extends PaymentTestSuite {
     private static final Logger log = LoggerFactory.getLogger(TestPaymentApi.class);
 
     @Inject
-    private Bus eventBus;
+    private InternalBus eventBus;
     @Inject
     protected PaymentApi paymentApi;
     @Inject
diff --git a/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessor.java b/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessor.java
index 1b73ace..cc75b7c 100644
--- a/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessor.java
+++ b/payment/src/test/java/com/ning/billing/payment/core/TestPaymentMethodProcessor.java
@@ -36,7 +36,7 @@ import com.ning.billing.util.clock.ClockMock;
 import com.ning.billing.util.globallocker.GlobalLocker;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.tag.TagInternalApi;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 public class TestPaymentMethodProcessor extends PaymentTestSuite {
 
@@ -48,7 +48,7 @@ public class TestPaymentMethodProcessor extends PaymentTestSuite {
         pluginRegistry.register(new ExternalPaymentProviderPlugin(new ClockMock()), ExternalPaymentProviderPlugin.PLUGIN_NAME);
 
         final AccountInternalApi accountUserApi = Mockito.mock(AccountInternalApi.class);
-        final Bus bus = Mockito.mock(Bus.class);
+        final InternalBus bus = Mockito.mock(InternalBus.class);
         final MockPaymentDao paymentDao = new MockPaymentDao();
         final GlobalLocker globalLocker = Mockito.mock(GlobalLocker.class);
         final ExecutorService executorService = Mockito.mock(ExecutorService.class);
diff --git a/payment/src/test/java/com/ning/billing/payment/MockInvoiceCreationEvent.java b/payment/src/test/java/com/ning/billing/payment/MockInvoiceCreationEvent.java
index 4590ed2..47359cc 100644
--- a/payment/src/test/java/com/ning/billing/payment/MockInvoiceCreationEvent.java
+++ b/payment/src/test/java/com/ning/billing/payment/MockInvoiceCreationEvent.java
@@ -54,8 +54,8 @@ public class MockInvoiceCreationEvent implements InvoiceCreationInternalEvent {
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.INVOICE_CREATION;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.INVOICE_CREATION;
     }
 
     @Override
diff --git a/payment/src/test/java/com/ning/billing/payment/TestHelper.java b/payment/src/test/java/com/ning/billing/payment/TestHelper.java
index bcdc7ac..001a8ae 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestHelper.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestHelper.java
@@ -42,8 +42,8 @@ import com.ning.billing.util.callcontext.UserType;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.events.InvoiceCreationInternalEvent;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
-import com.ning.billing.util.svcsapi.bus.Bus;
-import com.ning.billing.util.svcsapi.bus.Bus.EventBusException;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
 
 import com.google.inject.Inject;
 
@@ -52,13 +52,13 @@ public class TestHelper {
     protected final InvoicePaymentApi invoicePaymentApi;
     protected PaymentApi paymentApi;
     private final CallContext context;
-    private final Bus eventBus;
+    private final InternalBus eventBus;
     private final Clock clock;
     private final InternalCallContextFactory internalCallContextFactory;
 
     @Inject
     public TestHelper(final CallContextFactory factory, final AccountInternalApi AccountApi, final InvoicePaymentApi invoicePaymentApi,
-                      final PaymentApi paymentApi, final Bus eventBus, final Clock clock, final InternalCallContextFactory internalCallContextFactory) {
+                      final PaymentApi paymentApi, final InternalBus eventBus, final Clock clock, final InternalCallContextFactory internalCallContextFactory) {
         this.eventBus = eventBus;
         this.AccountApi = AccountApi;
         this.invoicePaymentApi = invoicePaymentApi;
diff --git a/payment/src/test/java/com/ning/billing/payment/TestRetryService.java b/payment/src/test/java/com/ning/billing/payment/TestRetryService.java
index 20a4996..28cefd5 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestRetryService.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestRetryService.java
@@ -48,7 +48,7 @@ import com.ning.billing.payment.provider.MockPaymentProviderPlugin;
 import com.ning.billing.payment.provider.PaymentProviderPluginRegistry;
 import com.ning.billing.payment.retry.FailedPaymentRetryService;
 import com.ning.billing.payment.retry.PluginFailureRetryService;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.clock.ClockMock;
 import com.ning.billing.util.glue.CallContextModule;
 
@@ -65,7 +65,7 @@ public class TestRetryService extends PaymentTestSuite {
     @Inject
     private PaymentConfig paymentConfig;
     @Inject
-    private Bus eventBus;
+    private InternalBus eventBus;
     @Inject
     private PaymentProcessor paymentProcessor;
     @Inject
diff --git a/server/src/main/java/com/ning/billing/server/listeners/KillbillGuiceListener.java b/server/src/main/java/com/ning/billing/server/listeners/KillbillGuiceListener.java
index 8ae4937..862e9d0 100644
--- a/server/src/main/java/com/ning/billing/server/listeners/KillbillGuiceListener.java
+++ b/server/src/main/java/com/ning/billing/server/listeners/KillbillGuiceListener.java
@@ -27,7 +27,7 @@ import com.ning.billing.server.config.KillbillServerConfig;
 import com.ning.billing.server.healthchecks.KillbillHealthcheck;
 import com.ning.billing.server.modules.KillbillServerModule;
 import com.ning.billing.server.security.TenantFilter;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.svcsapi.bus.BusService;
 import com.ning.jetty.base.modules.ServerModuleBuilder;
 import com.ning.jetty.core.listeners.SetupServer;
@@ -88,7 +88,7 @@ public class KillbillGuiceListener extends SetupServer {
         //
         try {
             killbillBusService.getBus().register(killbilleventHandler);
-        } catch (Bus.EventBusException e) {
+        } catch (InternalBus.EventBusException e) {
             logger.error("Failed to register for event notifications, this is bad exiting!", e);
             System.exit(1);
         }
@@ -111,7 +111,7 @@ public class KillbillGuiceListener extends SetupServer {
 
         try {
             killbillBusService.getBus().unregister(killbilleventHandler);
-        } catch (Bus.EventBusException e) {
+        } catch (InternalBus.EventBusException e) {
             logger.warn("Failed to unregister for event notifications", e);
         }
 
diff --git a/server/src/test/java/com/ning/billing/server/security/TestKillbillJdbcRealm.java b/server/src/test/java/com/ning/billing/server/security/TestKillbillJdbcRealm.java
index f2874fe..b3ac99d 100644
--- a/server/src/test/java/com/ning/billing/server/security/TestKillbillJdbcRealm.java
+++ b/server/src/test/java/com/ning/billing/server/security/TestKillbillJdbcRealm.java
@@ -33,7 +33,7 @@ import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.server.ServerTestSuiteWithEmbeddedDB;
 import com.ning.billing.tenant.api.DefaultTenant;
 import com.ning.billing.tenant.dao.DefaultTenantDao;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 import com.jolbox.bonecp.BoneCPConfig;
 import com.jolbox.bonecp.BoneCPDataSource;
@@ -46,7 +46,7 @@ public class TestKillbillJdbcRealm extends ServerTestSuiteWithEmbeddedDB {
     @BeforeMethod(groups = "slow")
     public void setUp() throws Exception {
         // Create the tenant
-        final DefaultTenantDao tenantDao = new DefaultTenantDao(getMysqlTestingHelper().getDBI(), Mockito.mock(Bus.class));
+        final DefaultTenantDao tenantDao = new DefaultTenantDao(getMysqlTestingHelper().getDBI(), Mockito.mock(InternalBus.class));
         tenant = new DefaultTenant(UUID.randomUUID(), null, null, UUID.randomUUID().toString(),
                                    UUID.randomUUID().toString(), UUID.randomUUID().toString());
         tenantDao.create(tenant, internalCallContext);
diff --git a/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java b/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java
index e50406a..4fe0f4e 100644
--- a/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java
+++ b/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java
@@ -29,7 +29,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.ning.billing.tenant.api.Tenant;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.entity.EntityPersistenceException;
@@ -44,10 +44,10 @@ public class DefaultTenantDao implements TenantDao {
     private final RandomNumberGenerator rng = new SecureRandomNumberGenerator();
 
     private final TenantSqlDao tenantSqlDao;
-    private final Bus eventBus;
+    private final InternalBus eventBus;
 
     @Inject
-    public DefaultTenantDao(final IDBI dbi, final Bus eventBus) {
+    public DefaultTenantDao(final IDBI dbi, final InternalBus eventBus) {
         this.eventBus = eventBus;
         this.tenantSqlDao = dbi.onDemand(TenantSqlDao.class);
     }
diff --git a/tenant/src/test/java/com/ning/billing/tenant/dao/TestDefaultTenantDao.java b/tenant/src/test/java/com/ning/billing/tenant/dao/TestDefaultTenantDao.java
index c29aa21..990f5fb 100644
--- a/tenant/src/test/java/com/ning/billing/tenant/dao/TestDefaultTenantDao.java
+++ b/tenant/src/test/java/com/ning/billing/tenant/dao/TestDefaultTenantDao.java
@@ -28,13 +28,13 @@ import org.testng.annotations.Test;
 import com.ning.billing.tenant.TenantTestSuiteWithEmbeddedDb;
 import com.ning.billing.tenant.api.DefaultTenant;
 import com.ning.billing.tenant.security.KillbillCredentialsMatcher;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 public class TestDefaultTenantDao extends TenantTestSuiteWithEmbeddedDb {
 
     @Test(groups = "slow")
     public void testWeCanStoreAndMatchCredentials() throws Exception {
-        final DefaultTenantDao tenantDao = new DefaultTenantDao(getMysqlTestingHelper().getDBI(), Mockito.mock(Bus.class));
+        final DefaultTenantDao tenantDao = new DefaultTenantDao(getMysqlTestingHelper().getDBI(), Mockito.mock(InternalBus.class));
 
         final DefaultTenant tenant = new DefaultTenant(UUID.randomUUID(), null, null, UUID.randomUUID().toString(),
                                                        UUID.randomUUID().toString(), UUID.randomUUID().toString());
diff --git a/util/src/main/java/com/ning/billing/util/bus/DefaultBusService.java b/util/src/main/java/com/ning/billing/util/bus/DefaultBusService.java
index 79e0f87..b3d93bd 100644
--- a/util/src/main/java/com/ning/billing/util/bus/DefaultBusService.java
+++ b/util/src/main/java/com/ning/billing/util/bus/DefaultBusService.java
@@ -18,8 +18,8 @@ package com.ning.billing.util.bus;
 
 import com.ning.billing.lifecycle.LifecycleHandlerType;
 import com.ning.billing.lifecycle.LifecycleHandlerType.LifecycleLevel;
-import com.ning.billing.util.svcsapi.bus.Bus;
 import com.ning.billing.util.svcsapi.bus.BusService;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 import com.google.inject.Inject;
 
@@ -32,10 +32,10 @@ public class DefaultBusService implements BusService {
     public static final String EVENT_BUS_SERVICE = "bus-service";
     public static final String EVENT_BUS_IDENTIFIER = EVENT_BUS_SERVICE;
 
-    private final Bus eventBus;
+    private final InternalBus eventBus;
 
     @Inject
-    public DefaultBusService(final Bus eventBus) {
+    public DefaultBusService(final InternalBus eventBus) {
         this.eventBus = eventBus;
     }
 
@@ -55,8 +55,7 @@ public class DefaultBusService implements BusService {
     }
 
     @Override
-    public Bus getBus() {
+    public InternalBus getBus() {
         return eventBus;
     }
-
 }
diff --git a/util/src/main/java/com/ning/billing/util/events/BusInternalEvent.java b/util/src/main/java/com/ning/billing/util/events/BusInternalEvent.java
index f4eb2c5..c4b2d4a 100644
--- a/util/src/main/java/com/ning/billing/util/events/BusInternalEvent.java
+++ b/util/src/main/java/com/ning/billing/util/events/BusInternalEvent.java
@@ -20,7 +20,7 @@ import java.util.UUID;
 
 public interface BusInternalEvent {
 
-    public enum BusEventType {
+    public enum BusInternalEventType {
         ACCOUNT_CREATE,
         ACCOUNT_CHANGE,
         SUBSCRIPTION_TRANSITION,
@@ -41,7 +41,7 @@ public interface BusInternalEvent {
         OVERDUE_CHANGE
     }
 
-    public BusEventType getBusEventType();
+    public BusInternalEventType getBusEventType();
 
     public UUID getUserToken();
 
diff --git a/util/src/main/java/com/ning/billing/util/glue/BusModule.java b/util/src/main/java/com/ning/billing/util/glue/BusModule.java
index 814a2a0..2b8ea6f 100644
--- a/util/src/main/java/com/ning/billing/util/glue/BusModule.java
+++ b/util/src/main/java/com/ning/billing/util/glue/BusModule.java
@@ -18,11 +18,11 @@ package com.ning.billing.util.glue;
 
 import org.skife.config.ConfigurationObjectFactory;
 
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.svcsapi.bus.BusService;
 import com.ning.billing.util.bus.DefaultBusService;
-import com.ning.billing.util.bus.InMemoryBus;
-import com.ning.billing.util.bus.PersistentBus;
+import com.ning.billing.util.bus.InMemoryInternalBus;
+import com.ning.billing.util.bus.PersistentInternalBus;
 import com.ning.billing.util.bus.PersistentBusConfig;
 
 import com.google.inject.AbstractModule;
@@ -69,10 +69,10 @@ public class BusModule extends AbstractModule {
 
     private void configurePersistentEventBus() {
         configurePersistentBusConfig();
-        bind(Bus.class).to(PersistentBus.class).asEagerSingleton();
+        bind(InternalBus.class).to(PersistentInternalBus.class).asEagerSingleton();
     }
 
     private void configureInMemoryEventBus() {
-        bind(Bus.class).to(InMemoryBus.class).asEagerSingleton();
+        bind(InternalBus.class).to(InMemoryInternalBus.class).asEagerSingleton();
     }
 }
diff --git a/util/src/main/java/com/ning/billing/util/svcsapi/bus/BusService.java b/util/src/main/java/com/ning/billing/util/svcsapi/bus/BusService.java
index c428278..b8670c8 100644
--- a/util/src/main/java/com/ning/billing/util/svcsapi/bus/BusService.java
+++ b/util/src/main/java/com/ning/billing/util/svcsapi/bus/BusService.java
@@ -20,5 +20,6 @@ import com.ning.billing.lifecycle.KillbillService;
 
 public interface BusService extends KillbillService {
 
-    public Bus getBus();
+   // API_FIX should be removed and server should only use public bus
+   public InternalBus getBus();
 }
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagCreationEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagCreationEvent.java
index 5ff92b6..18deb26 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagCreationEvent.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagCreationEvent.java
@@ -71,8 +71,8 @@ public class DefaultControlTagCreationEvent extends DefaultBusInternalEvent impl
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.CONTROL_TAG_CREATION;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.CONTROL_TAG_CREATION;
     }
 
 
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionCreationEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionCreationEvent.java
index 6dbe642..3a83d5e 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionCreationEvent.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionCreationEvent.java
@@ -54,8 +54,8 @@ public class DefaultControlTagDefinitionCreationEvent extends DefaultBusInternal
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.CONTROL_TAGDEFINITION_CREATION;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.CONTROL_TAGDEFINITION_CREATION;
     }
 
 
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionDeletionEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionDeletionEvent.java
index c54e479..fa93c78 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionDeletionEvent.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDefinitionDeletionEvent.java
@@ -54,8 +54,8 @@ public class DefaultControlTagDefinitionDeletionEvent extends DefaultBusInternal
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.CONTROL_TAGDEFINITION_DELETION;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.CONTROL_TAGDEFINITION_DELETION;
     }
 
     @Override
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDeletionEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDeletionEvent.java
index 1aa6260..0e45abc 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDeletionEvent.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultControlTagDeletionEvent.java
@@ -70,8 +70,8 @@ public class DefaultControlTagDeletionEvent extends DefaultBusInternalEvent impl
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.CONTROL_TAG_DELETION;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.CONTROL_TAG_DELETION;
     }
 
 
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagCreationEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagCreationEvent.java
index 5a65809..dd9f86f 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagCreationEvent.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagCreationEvent.java
@@ -70,8 +70,8 @@ public class DefaultUserTagCreationEvent extends DefaultBusInternalEvent impleme
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.USER_TAG_CREATION;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.USER_TAG_CREATION;
     }
 
 
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionCreationEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionCreationEvent.java
index 1cf9452..7287e56 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionCreationEvent.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionCreationEvent.java
@@ -54,8 +54,8 @@ public class DefaultUserTagDefinitionCreationEvent extends DefaultBusInternalEve
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.USER_TAGDEFINITION_CREATION;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.USER_TAGDEFINITION_CREATION;
     }
 
 
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionDeletionEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionDeletionEvent.java
index 692ac11..ad6b60e 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionDeletionEvent.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDefinitionDeletionEvent.java
@@ -54,8 +54,8 @@ public class DefaultUserTagDefinitionDeletionEvent extends DefaultBusInternalEve
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.USER_TAGDEFINITION_DELETION;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.USER_TAGDEFINITION_DELETION;
     }
 
 
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDeletionEvent.java b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDeletionEvent.java
index 72f6b44..1d68d14 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDeletionEvent.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/DefaultUserTagDeletionEvent.java
@@ -70,8 +70,8 @@ public class DefaultUserTagDeletionEvent extends DefaultBusInternalEvent impleme
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.USER_TAG_DELETION;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.USER_TAG_DELETION;
     }
 
 
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
index f48d6fe..92b48c9 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
@@ -43,7 +43,7 @@ import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.dao.TableName;
 import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
 import com.ning.billing.util.events.TagInternalEvent;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.tag.ControlTagType;
 import com.ning.billing.util.tag.DefaultTagDefinition;
 import com.ning.billing.util.tag.Tag;
@@ -58,10 +58,10 @@ public class AuditedTagDao extends AuditedCollectionDaoBase<Tag, Tag> implements
 
     private final TagSqlDao tagSqlDao;
     private final TagEventBuilder tagEventBuilder;
-    private final Bus bus;
+    private final InternalBus bus;
 
     @Inject
-    public AuditedTagDao(final IDBI dbi, final TagEventBuilder tagEventBuilder, final Bus bus) {
+    public AuditedTagDao(final IDBI dbi, final TagEventBuilder tagEventBuilder, final InternalBus bus) {
         this.tagEventBuilder = tagEventBuilder;
         this.bus = bus;
         this.tagSqlDao = dbi.onDemand(TagSqlDao.class);
@@ -131,7 +131,7 @@ public class AuditedTagDao extends AuditedCollectionDaoBase<Tag, Tag> implements
                 }
                 try {
                     bus.postFromTransaction(tagEvent, tagSqlDao, context);
-                } catch (Bus.EventBusException e) {
+                } catch (InternalBus.EventBusException e) {
                     log.warn("Failed to post tag creation event for tag " + tag.getId().toString(), e);
                 }
                 return null;
@@ -181,7 +181,7 @@ public class AuditedTagDao extends AuditedCollectionDaoBase<Tag, Tag> implements
                     }
                     try {
                         bus.postFromTransaction(tagEvent, tagSqlDao, context);
-                    } catch (Bus.EventBusException e) {
+                    } catch (InternalBus.EventBusException e) {
                         log.warn("Failed to post tag deletion event for tag " + tag.getId().toString(), e);
                     }
                     return null;
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDefinitionDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDefinitionDao.java
index f2c73df..ad50c0e 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDefinitionDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDefinitionDao.java
@@ -33,7 +33,7 @@ import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.events.TagDefinitionInternalEvent;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.tag.ControlTagType;
 import com.ning.billing.util.tag.DefaultTagDefinition;
 import com.ning.billing.util.tag.TagDefinition;
@@ -49,10 +49,10 @@ public class DefaultTagDefinitionDao implements TagDefinitionDao {
 
     private final TagDefinitionSqlDao tagDefinitionSqlDao;
     private final TagEventBuilder tagEventBuilder;
-    private final Bus bus;
+    private final InternalBus bus;
 
     @Inject
-    public DefaultTagDefinitionDao(final IDBI dbi, final TagEventBuilder tagEventBuilder, final Bus bus) {
+    public DefaultTagDefinitionDao(final IDBI dbi, final TagEventBuilder tagEventBuilder, final InternalBus bus) {
         this.tagEventBuilder = tagEventBuilder;
         this.bus = bus;
         this.tagDefinitionSqlDao = dbi.onDemand(TagDefinitionSqlDao.class);
@@ -145,7 +145,7 @@ public class DefaultTagDefinitionDao implements TagDefinitionDao {
                     }
                     try {
                         bus.postFromTransaction(tagDefinitionEvent, tagDefinitionSqlDao, context);
-                    } catch (Bus.EventBusException e) {
+                    } catch (InternalBus.EventBusException e) {
                         log.warn("Failed to post tag definition creation event for tag " + tagDefinition.getId(), e);
                     }
 
@@ -200,7 +200,7 @@ public class DefaultTagDefinitionDao implements TagDefinitionDao {
                     }
                     try {
                         bus.postFromTransaction(tagDefinitionEvent, tagDefinitionSqlDao, context);
-                    } catch (Bus.EventBusException e) {
+                    } catch (InternalBus.EventBusException e) {
                         log.warn("Failed to post tag definition deletion event for tag " + tagDefinition.getId(), e);
                     }
 
diff --git a/util/src/test/java/com/ning/billing/dbi/MysqlTestingHelper.java b/util/src/test/java/com/ning/billing/dbi/MysqlTestingHelper.java
index a2c6f65..6432a26 100644
--- a/util/src/test/java/com/ning/billing/dbi/MysqlTestingHelper.java
+++ b/util/src/test/java/com/ning/billing/dbi/MysqlTestingHelper.java
@@ -227,7 +227,7 @@ public class MysqlTestingHelper {
         initDb("drop table if exists subscriptions; create table subscriptions(record_id int(11) unsigned not null auto_increment, id char(36) not null, " +
                "account_record_id int(11) unsigned not null, tenant_record_id int(11) unsigned default 0, primary key(record_id)) engine=innodb;");
 
-        for (final String pack : new String[]{"account", "analytics", "entitlement", "util", "payment", "invoice", "junction", "tenant"}) {
+        for (final String pack : new String[]{"account", "analytics", "beatrix", "entitlement", "util", "payment", "invoice", "junction", "tenant"}) {
             final String ddl;
             try {
                 ddl = IOUtils.toString(Resources.getResource("com/ning/billing/" + pack + "/ddl.sql").openStream());
diff --git a/util/src/test/java/com/ning/billing/mock/MockEffectiveSubscriptionEvent.java b/util/src/test/java/com/ning/billing/mock/MockEffectiveSubscriptionEvent.java
index a31d89c..ddbfb64 100644
--- a/util/src/test/java/com/ning/billing/mock/MockEffectiveSubscriptionEvent.java
+++ b/util/src/test/java/com/ning/billing/mock/MockEffectiveSubscriptionEvent.java
@@ -92,8 +92,8 @@ public class MockEffectiveSubscriptionEvent implements EffectiveSubscriptionInte
 
     @JsonIgnore
     @Override
-    public BusEventType getBusEventType() {
-        return BusEventType.SUBSCRIPTION_TRANSITION;
+    public BusInternalEventType getBusEventType() {
+        return BusInternalEventType.SUBSCRIPTION_TRANSITION;
     }
 
     @JsonProperty("eventId")
diff --git a/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java b/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java
index 84386f2..820a209 100644
--- a/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java
+++ b/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java
@@ -35,7 +35,7 @@ import com.ning.billing.util.api.AuditLevel;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.audit.AuditLog;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.dao.TableName;
@@ -64,7 +64,7 @@ public class TestDefaultAuditDao extends UtilTestSuiteWithEmbeddedDB {
     private Clock clock;
 
     @Inject
-    private Bus bus;
+    private InternalBus bus;
 
     @Inject
     private IDBI dbi;
diff --git a/util/src/test/java/com/ning/billing/util/bus/TestEventBus.java b/util/src/test/java/com/ning/billing/util/bus/TestEventBus.java
index 0c92e6d..b93b0b8 100644
--- a/util/src/test/java/com/ning/billing/util/bus/TestEventBus.java
+++ b/util/src/test/java/com/ning/billing/util/bus/TestEventBus.java
@@ -22,7 +22,7 @@ import org.testng.annotations.Test;
 public class TestEventBus extends TestEventBusBase {
     @BeforeClass(groups = "slow")
     public void setup() throws Exception {
-        eventBus = new InMemoryBus();
+        eventBus = new InMemoryInternalBus();
         super.setup();
     }
 
diff --git a/util/src/test/java/com/ning/billing/util/bus/TestEventBusBase.java b/util/src/test/java/com/ning/billing/util/bus/TestEventBusBase.java
index 18bf7cb..a6188de 100644
--- a/util/src/test/java/com/ning/billing/util/bus/TestEventBusBase.java
+++ b/util/src/test/java/com/ning/billing/util/bus/TestEventBusBase.java
@@ -26,9 +26,9 @@ import org.testng.annotations.BeforeClass;
 
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.events.BusInternalEvent;
-import com.ning.billing.util.events.BusInternalEvent.BusEventType;
+import com.ning.billing.util.events.BusInternalEvent.BusInternalEventType;
 import com.ning.billing.util.events.DefaultBusInternalEvent;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
@@ -40,7 +40,7 @@ public abstract class TestEventBusBase extends UtilTestSuiteWithEmbeddedDB {
     protected static final Logger log = LoggerFactory.getLogger(TestEventBusBase.class);
 
     @Inject
-    protected Bus eventBus;
+    protected InternalBus eventBus;
 
     @BeforeClass(groups = "slow")
     public void setup() throws Exception {
@@ -72,8 +72,8 @@ public abstract class TestEventBusBase extends UtilTestSuiteWithEmbeddedDB {
 
         @JsonIgnore
         @Override
-        public BusEventType getBusEventType() {
-            return BusEventType.valueOf(type);
+        public BusInternalEventType getBusEventType() {
+            return BusInternalEventType.valueOf(type);
         }
 
         public String getName() {
@@ -123,8 +123,8 @@ public abstract class TestEventBusBase extends UtilTestSuiteWithEmbeddedDB {
 
         @JsonIgnore
         @Override
-        public BusEventType getBusEventType() {
-            return BusEventType.valueOf(type);
+        public BusInternalEventType getBusEventType() {
+            return BusInternalEventType.valueOf(type);
         }
 
 
@@ -199,7 +199,7 @@ public abstract class TestEventBusBase extends UtilTestSuiteWithEmbeddedDB {
             final MyEventHandler handler = new MyEventHandler(1);
             eventBus.register(handler);
 
-            eventBus.post(new MyEventWithException("my-event", 1L, UUID.randomUUID(), BusEventType.ACCOUNT_CHANGE.toString(), 1L, 1L), internalCallContext);
+            eventBus.post(new MyEventWithException("my-event", 1L, UUID.randomUUID(), BusInternalEventType.ACCOUNT_CHANGE.toString(), 1L, 1L), internalCallContext);
 
             Thread.sleep(50000);
         } catch (Exception ignored) {
@@ -213,7 +213,7 @@ public abstract class TestEventBusBase extends UtilTestSuiteWithEmbeddedDB {
             eventBus.register(handler);
 
             for (int i = 0; i < nbEvents; i++) {
-                eventBus.post(new MyEvent("my-event", (long) i, UUID.randomUUID(), BusEventType.ACCOUNT_CHANGE.toString(), 1L, 1L), internalCallContext);
+                eventBus.post(new MyEvent("my-event", (long) i, UUID.randomUUID(), BusInternalEventType.ACCOUNT_CHANGE.toString(), 1L, 1L), internalCallContext);
             }
 
             final boolean completed = handler.waitForCompletion(10000);
@@ -229,9 +229,9 @@ public abstract class TestEventBusBase extends UtilTestSuiteWithEmbeddedDB {
             eventBus.register(handler);
 
             for (int i = 0; i < 5; i++) {
-                eventBus.post(new MyOtherEvent("my-other-event", (double) i, UUID.randomUUID(), BusEventType.BUNDLE_REPAIR.toString(), 1L, 1L), internalCallContext);
+                eventBus.post(new MyOtherEvent("my-other-event", (double) i, UUID.randomUUID(), BusInternalEventType.BUNDLE_REPAIR.toString(), 1L, 1L), internalCallContext);
             }
-            eventBus.post(new MyEvent("my-event", 11l, UUID.randomUUID(), BusEventType.ACCOUNT_CHANGE.toString(), 1L, 1L), internalCallContext);
+            eventBus.post(new MyEvent("my-event", 11l, UUID.randomUUID(), BusInternalEventType.ACCOUNT_CHANGE.toString(), 1L, 1L), internalCallContext);
 
             final boolean completed = handler.waitForCompletion(10000);
             Assert.assertEquals(completed, true);
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java
index cdc8d5d..4fb264a 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java
@@ -42,7 +42,7 @@ public class TestDefaultControlTagCreationEvent extends UtilTestSuite {
         final UUID userToken = UUID.randomUUID();
 
         final DefaultControlTagCreationEvent event = new DefaultControlTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken, 1L, 1L);
-        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusEventType.CONTROL_TAG_CREATION);
+        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusInternalEventType.CONTROL_TAG_CREATION);
 
         Assert.assertEquals(event.getTagId(), tagId);
         Assert.assertEquals(event.getObjectId(), objectId);
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionCreationEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionCreationEvent.java
index 4712be1..46bcd6a 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionCreationEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionCreationEvent.java
@@ -38,7 +38,7 @@ public class TestDefaultControlTagDefinitionCreationEvent extends UtilTestSuite 
         final UUID userToken = UUID.randomUUID();
 
         final DefaultControlTagDefinitionCreationEvent event = new DefaultControlTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken, 1L, 1L);
-        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusEventType.CONTROL_TAGDEFINITION_CREATION);
+        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusInternalEventType.CONTROL_TAGDEFINITION_CREATION);
 
         Assert.assertEquals(event.getTagDefinitionId(), tagDefinitionId);
         Assert.assertEquals(event.getTagDefinition(), tagDefinition);
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionDeletionEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionDeletionEvent.java
index ab9869a..800d551 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionDeletionEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionDeletionEvent.java
@@ -38,7 +38,7 @@ public class TestDefaultControlTagDefinitionDeletionEvent extends UtilTestSuite 
         final UUID userToken = UUID.randomUUID();
 
         final DefaultControlTagDefinitionDeletionEvent event = new DefaultControlTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken, 1L, 1L);
-        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusEventType.CONTROL_TAGDEFINITION_DELETION);
+        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusInternalEventType.CONTROL_TAGDEFINITION_DELETION);
 
         Assert.assertEquals(event.getTagDefinitionId(), tagDefinitionId);
         Assert.assertEquals(event.getTagDefinition(), tagDefinition);
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java
index ab869b7..93994ac 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java
@@ -42,7 +42,7 @@ public class TestDefaultControlTagDeletionEvent extends UtilTestSuite {
         final UUID userToken = UUID.randomUUID();
 
         final DefaultControlTagDeletionEvent event = new DefaultControlTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken, 1L, 1L);
-        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusEventType.CONTROL_TAG_DELETION);
+        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusInternalEventType.CONTROL_TAG_DELETION);
 
         Assert.assertEquals(event.getTagId(), tagId);
         Assert.assertEquals(event.getObjectId(), objectId);
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java
index 3a2c428..fc4e324 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java
@@ -42,7 +42,7 @@ public class TestDefaultUserTagCreationEvent extends UtilTestSuite {
         final UUID userToken = UUID.randomUUID();
 
         final DefaultUserTagCreationEvent event = new DefaultUserTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken, 1L, 1L);
-        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusEventType.USER_TAG_CREATION);
+        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAG_CREATION);
 
         Assert.assertEquals(event.getTagId(), tagId);
         Assert.assertEquals(event.getObjectId(), objectId);
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionCreationEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionCreationEvent.java
index acbf2ec..211918e 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionCreationEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionCreationEvent.java
@@ -38,7 +38,7 @@ public class TestDefaultUserTagDefinitionCreationEvent extends UtilTestSuite {
         final UUID userToken = UUID.randomUUID();
 
         final DefaultUserTagDefinitionCreationEvent event = new DefaultUserTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken, 1L, 1L);
-        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusEventType.USER_TAGDEFINITION_CREATION);
+        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAGDEFINITION_CREATION);
 
         Assert.assertEquals(event.getTagDefinitionId(), tagDefinitionId);
         Assert.assertEquals(event.getTagDefinition(), tagDefinition);
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionDeletionEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionDeletionEvent.java
index 243fc9f..bb050f1 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionDeletionEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionDeletionEvent.java
@@ -38,7 +38,7 @@ public class TestDefaultUserTagDefinitionDeletionEvent extends UtilTestSuite {
         final UUID userToken = UUID.randomUUID();
 
         final DefaultUserTagDefinitionDeletionEvent event = new DefaultUserTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken, 1L, 1L);
-        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusEventType.USER_TAGDEFINITION_DELETION);
+        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAGDEFINITION_DELETION);
 
         Assert.assertEquals(event.getTagDefinitionId(), tagDefinitionId);
         Assert.assertEquals(event.getTagDefinition(), tagDefinition);
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDeletionEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDeletionEvent.java
index 731021b..e71b8cb 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDeletionEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDeletionEvent.java
@@ -42,7 +42,7 @@ public class TestDefaultUserTagDeletionEvent extends UtilTestSuite {
         final UUID userToken = UUID.randomUUID();
 
         final DefaultUserTagDeletionEvent event = new DefaultUserTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken, 1L, 1L);
-        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusEventType.USER_TAG_DELETION);
+        Assert.assertEquals(event.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAG_DELETION);
 
         Assert.assertEquals(event.getTagId(), tagId);
         Assert.assertEquals(event.getObjectId(), objectId);
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/TestAuditedTagDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/TestAuditedTagDao.java
index 156b438..1477dc1 100644
--- a/util/src/test/java/com/ning/billing/util/tag/dao/TestAuditedTagDao.java
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/TestAuditedTagDao.java
@@ -32,7 +32,7 @@ import org.testng.annotations.Test;
 import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.api.TagDefinitionApiException;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.events.BusInternalEvent;
@@ -63,7 +63,7 @@ public class TestAuditedTagDao extends UtilTestSuiteWithEmbeddedDB {
     private Clock clock;
 
     @Inject
-    private Bus bus;
+    private InternalBus bus;
 
     private EventsListener eventsListener;
 
@@ -73,7 +73,7 @@ public class TestAuditedTagDao extends UtilTestSuiteWithEmbeddedDB {
     }
 
     @BeforeMethod(groups = "slow")
-    public void cleanupBeforeMethod() throws Bus.EventBusException {
+    public void cleanupBeforeMethod() throws InternalBus.EventBusException {
         eventsListener = new EventsListener();
         bus.register(eventsListener);
     }
@@ -181,7 +181,7 @@ public class TestAuditedTagDao extends UtilTestSuiteWithEmbeddedDB {
         Assert.assertEquals(tagFirstEventReceived.getObjectType(), objectType);
         Assert.assertEquals(tagFirstEventReceived.getTagDefinition().getName(), createdTagDefinition.getName());
         Assert.assertEquals(tagFirstEventReceived.getTagDefinition().getDescription(), createdTagDefinition.getDescription());
-        Assert.assertEquals(tagFirstEventReceived.getBusEventType(), BusInternalEvent.BusEventType.USER_TAG_CREATION);
+        Assert.assertEquals(tagFirstEventReceived.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAG_CREATION);
         Assert.assertEquals(tagFirstEventReceived.getUserToken(), internalCallContext.getUserToken());
 
         // Delete the tag
@@ -199,7 +199,7 @@ public class TestAuditedTagDao extends UtilTestSuiteWithEmbeddedDB {
         Assert.assertEquals(tagSecondEventReceived.getObjectType(), objectType);
         Assert.assertEquals(tagSecondEventReceived.getTagDefinition().getName(), createdTagDefinition.getName());
         Assert.assertEquals(tagSecondEventReceived.getTagDefinition().getDescription(), createdTagDefinition.getDescription());
-        Assert.assertEquals(tagSecondEventReceived.getBusEventType(), BusInternalEvent.BusEventType.USER_TAG_DELETION);
+        Assert.assertEquals(tagSecondEventReceived.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAG_DELETION);
         Assert.assertEquals(tagSecondEventReceived.getUserToken(), internalCallContext.getUserToken());
     }
 
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDefinitionDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDefinitionDao.java
index 02d93f4..d5c2f2e 100644
--- a/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDefinitionDao.java
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDefinitionDao.java
@@ -30,7 +30,7 @@ import org.testng.annotations.Test;
 
 import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.events.TagDefinitionInternalEvent;
@@ -53,7 +53,7 @@ public class TestDefaultTagDefinitionDao extends UtilTestSuiteWithEmbeddedDB {
     private Clock clock;
 
     @Inject
-    private Bus bus;
+    private InternalBus bus;
 
     private EventsListener eventsListener;
 
@@ -63,7 +63,7 @@ public class TestDefaultTagDefinitionDao extends UtilTestSuiteWithEmbeddedDB {
     }
 
     @BeforeMethod(groups = "slow")
-    public void cleanupBeforeMethod() throws Bus.EventBusException {
+    public void cleanupBeforeMethod() throws InternalBus.EventBusException {
         eventsListener = new EventsListener();
         bus.register(eventsListener);
     }
@@ -98,7 +98,7 @@ public class TestDefaultTagDefinitionDao extends UtilTestSuiteWithEmbeddedDB {
         Assert.assertEquals(eventsListener.getEvents().get(0), tagDefinitionFirstEventReceived);
         Assert.assertEquals(tagDefinitionFirstEventReceived.getTagDefinitionId(), createdTagDefinition.getId());
         Assert.assertEquals(tagDefinitionFirstEventReceived.getTagDefinition(), createdTagDefinition);
-        Assert.assertEquals(tagDefinitionFirstEventReceived.getBusEventType(), BusInternalEvent.BusEventType.USER_TAGDEFINITION_CREATION);
+        Assert.assertEquals(tagDefinitionFirstEventReceived.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAGDEFINITION_CREATION);
         Assert.assertEquals(tagDefinitionFirstEventReceived.getUserToken(), internalCallContext.getUserToken());
 
         // Delete the tag definition
@@ -114,7 +114,7 @@ public class TestDefaultTagDefinitionDao extends UtilTestSuiteWithEmbeddedDB {
         Assert.assertEquals(eventsListener.getEvents().get(1), tagDefinitionSecondEventReceived);
         Assert.assertEquals(tagDefinitionSecondEventReceived.getTagDefinitionId(), createdTagDefinition.getId());
         Assert.assertEquals(tagDefinitionSecondEventReceived.getTagDefinition(), createdTagDefinition);
-        Assert.assertEquals(tagDefinitionSecondEventReceived.getBusEventType(), BusInternalEvent.BusEventType.USER_TAGDEFINITION_DELETION);
+        Assert.assertEquals(tagDefinitionSecondEventReceived.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAGDEFINITION_DELETION);
         Assert.assertEquals(tagDefinitionSecondEventReceived.getUserToken(), internalCallContext.getUserToken());
     }
 
diff --git a/util/src/test/java/com/ning/billing/util/tag/MockTagStoreModuleSql.java b/util/src/test/java/com/ning/billing/util/tag/MockTagStoreModuleSql.java
index 2bdc97c..ab8c9a4 100644
--- a/util/src/test/java/com/ning/billing/util/tag/MockTagStoreModuleSql.java
+++ b/util/src/test/java/com/ning/billing/util/tag/MockTagStoreModuleSql.java
@@ -21,8 +21,8 @@ import org.skife.jdbi.v2.IDBI;
 import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
 import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.mock.glue.MockClockModule;
-import com.ning.billing.util.svcsapi.bus.Bus;
-import com.ning.billing.util.bus.InMemoryBus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.util.bus.InMemoryInternalBus;
 import com.ning.billing.util.glue.TagStoreModule;
 
 public class MockTagStoreModuleSql extends TagStoreModule {
@@ -33,7 +33,7 @@ public class MockTagStoreModuleSql extends TagStoreModule {
         bind(IDBI.class).toInstance(helper.getDBI());
         bind(MysqlTestingHelper.class).toInstance(helper);
         install(new MockClockModule());
-        bind(Bus.class).toInstance(new InMemoryBus());
+        bind(InternalBus.class).toInstance(new InMemoryInternalBus());
         super.configure();
     }
 }
diff --git a/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java b/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java
index 2363604..bc393a8 100644
--- a/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java
+++ b/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java
@@ -37,7 +37,7 @@ import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.api.TagDefinitionApiException;
-import com.ning.billing.util.svcsapi.bus.Bus;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.dao.TagDao;
@@ -71,7 +71,7 @@ public class TestTagStore extends UtilTestSuiteWithEmbeddedDB {
     private Clock clock;
 
     @Inject
-    private Bus bus;
+    private InternalBus bus;
 
     private TagDefinition testTag;