diff --git a/apigee_sync.go b/apigee_sync.go
index 72185ff..10745de 100644
--- a/apigee_sync.go
+++ b/apigee_sync.go
@@ -39,7 +39,7 @@
 
 	if apidInfo.LastSnapshot != "" {
 		snapshot := startOnLocalSnapshot(apidInfo.LastSnapshot)
-
+		processSnapshot(snapshot)
 		events.EmitWithCallback(ApigeeSyncEventSelector, snapshot, func(event apid.Event) {
 			apidChangeManager.pollChangeWithBackoff()
 		})
diff --git a/apigee_sync_test.go b/apigee_sync_test.go
index 94fa16e..d81ec32 100644
--- a/apigee_sync_test.go
+++ b/apigee_sync_test.go
@@ -306,7 +306,7 @@
 			apidTokenManager = createSimpleTokenManager()
 			apidTokenManager.start()
 			apidSnapshotManager = createSnapShotManager()
-			events.Listen(ApigeeSyncEventSelector, &handler{})
+			//events.Listen(ApigeeSyncEventSelector, &handler{})
 
 			scopes := []string{apidInfo.ClusterID}
 			snapshot := &common.Snapshot{}
diff --git a/change_test.go b/change_test.go
index 09ef3dd..4abea60 100644
--- a/change_test.go
+++ b/change_test.go
@@ -27,7 +27,6 @@
 var _ = Describe("Change Agent", func() {
 
 	Context("Change Agent Unit Tests", func() {
-		handler := handler{}
 
 		var createTestDb = func(sqlfile string, dbId string) common.Snapshot {
 			initDb(sqlfile, "./mockdb_change.sqlite3")
@@ -46,7 +45,7 @@
 
 		BeforeEach(func() {
 			event := createTestDb("./sql/init_mock_db.sql", "test_change")
-			handler.Handle(&event)
+			processSnapshot(&event)
 			knownTables = extractTablesFromDB(getDB())
 		})
 
diff --git a/changes.go b/changes.go
index 4ea5920..987c307 100644
--- a/changes.go
+++ b/changes.go
@@ -252,6 +252,7 @@
 
 	/* If valid data present, Emit to plugins */
 	if len(resp.Changes) > 0 {
+		processChangeList(&resp)
 		select {
 		case <-time.After(httpTimeout):
 			log.Panic("Timeout. Plugins failed to respond to changes.")
diff --git a/init.go b/init.go
index b2f87f8..245d4af 100644
--- a/init.go
+++ b/init.go
@@ -228,7 +228,6 @@
 		apidTokenManager.start()
 		go bootstrap()
 
-		events.Listen(ApigeeSyncEventSelector, &handler{})
 		log.Debug("Done post plugin init")
 	}
 }
diff --git a/listener.go b/listener.go
index 541b793..9c002f2 100644
--- a/listener.go
+++ b/listener.go
@@ -24,24 +24,6 @@
 	LISTENER_TABLE_DATA_SCOPE   = "edgex.data_scope"
 )
 
-type handler struct {
-}
-
-func (h *handler) String() string {
-	return "ApigeeSync"
-}
-
-func (h *handler) Handle(e apid.Event) {
-
-	if changeSet, ok := e.(*common.ChangeList); ok {
-		processChangeList(changeSet)
-	} else if snapShot, ok := e.(*common.Snapshot); ok {
-		processSnapshot(snapShot)
-	} else {
-		log.Debugf("Received invalid event. Ignoring. %v", e)
-	}
-}
-
 func processSnapshot(snapshot *common.Snapshot) {
 	log.Debugf("Snapshot received. Switching to DB version: %s", snapshot.SnapshotInfo)
 
diff --git a/listener_test.go b/listener_test.go
index bf5bef3..afb86b3 100644
--- a/listener_test.go
+++ b/listener_test.go
@@ -24,7 +24,7 @@
 
 var _ = Describe("listener", func() {
 
-	handler := handler{}
+
 
 	var createTestDb = func(sqlfile string, dbId string) common.Snapshot {
 		initDb(sqlfile, "./mockdb.sqlite3")
@@ -41,7 +41,7 @@
 
 		It("should fail if more than one apid_cluster rows", func() {
 			event := createTestDb("./sql/init_listener_test_duplicate_apids.sql", "test_snapshot_fail_multiple_clusters")
-			Expect(func() { handler.Handle(&event) }).To(Panic())
+			Expect(func() { processSnapshot(&event) }).To(Panic())
 		}, 3)
 
 		It("should fail if more than one apid_cluster rows", func() {
@@ -64,7 +64,7 @@
 
 			event := createTestDb("./sql/init_listener_test_valid_snapshot.sql", "test_snapshot_valid")
 
-			handler.Handle(&event)
+			processSnapshot(&event)
 
 			info, err := getApidInstanceInfo()
 			Expect(err).NotTo(HaveOccurred())
@@ -160,7 +160,7 @@
 
 			It("insert event should panic", func() {
 				ssEvent := createTestDb("./sql/init_listener_test_valid_snapshot.sql", "test_changes_insert_panic")
-				handler.Handle(&ssEvent)
+				processSnapshot(&ssEvent)
 
 				//save the last snapshot, so we can restore it at the end of this context
 
@@ -174,12 +174,12 @@
 					},
 				}
 
-				Expect(func() { handler.Handle(&csEvent) }).To(Panic())
+				Expect(func(){processChangeList(&csEvent)}).To(Panic())
 			}, 3)
 
 			It("update event should panic", func() {
 				ssEvent := createTestDb("./sql/init_listener_test_valid_snapshot.sql", "test_changes_update_panic")
-				handler.Handle(&ssEvent)
+				processSnapshot(&ssEvent)
 
 				event := common.ChangeList{
 					LastSequence: "test",
@@ -191,7 +191,7 @@
 					},
 				}
 
-				Expect(func() { handler.Handle(&event) }).To(Panic())
+				Expect(func(){processChangeList(&event)}).To(Panic())
 				//restore the last snapshot
 			}, 3)
 
@@ -201,7 +201,7 @@
 
 			It("insert event should add", func() {
 				ssEvent := createTestDb("./sql/init_listener_test_no_datascopes.sql", "test_changes_insert")
-				handler.Handle(&ssEvent)
+				processSnapshot(&ssEvent)
 
 				event := common.ChangeList{
 					LastSequence: "test",
@@ -241,7 +241,7 @@
 					},
 				}
 
-				handler.Handle(&event)
+				processChangeList(&event)
 
 				var dds []dataDataScope
 
@@ -286,7 +286,7 @@
 
 			It("delete event should delete", func() {
 				ssEvent := createTestDb("./sql/init_listener_test_no_datascopes.sql", "test_changes_delete")
-				handler.Handle(&ssEvent)
+				processSnapshot(&ssEvent)
 				insert := common.ChangeList{
 					LastSequence: "test",
 					Changes: []common.Change{
@@ -309,7 +309,7 @@
 					},
 				}
 
-				handler.Handle(&insert)
+				processChangeList(&insert)
 
 				delete := common.ChangeList{
 					LastSequence: "test",
@@ -322,7 +322,7 @@
 					},
 				}
 
-				handler.Handle(&delete)
+				processChangeList(&delete)
 
 				var nRows int
 				err := getDB().QueryRow("SELECT count(id) FROM EDGEX_DATA_SCOPE").Scan(&nRows)
@@ -333,7 +333,7 @@
 
 			It("update event should panic for data scopes table", func() {
 				ssEvent := createTestDb("./sql/init_listener_test_valid_snapshot.sql", "test_update_panic")
-				handler.Handle(&ssEvent)
+				processSnapshot(&ssEvent)
 
 				event := common.ChangeList{
 					LastSequence: "test",
@@ -345,7 +345,7 @@
 					},
 				}
 
-				Expect(func() { handler.Handle(&event) }).To(Panic())
+				Expect(func() { processChangeList(&event) }).To(Panic())
 				//restore the last snapshot
 			}, 3)
 
diff --git a/snapshot.go b/snapshot.go
index b7a089d..960b4fc 100644
--- a/snapshot.go
+++ b/snapshot.go
@@ -154,6 +154,7 @@
 		log.Panicf("Database inaccessible: %v", err)
 	}
 
+	processSnapshot(snapshot)
 	log.Info("Emitting Snapshot to plugins")
 
 	select {
