diff --git a/apigee_sync_test.go b/apigee_sync_test.go
index 5a7d191..f853c93 100644
--- a/apigee_sync_test.go
+++ b/apigee_sync_test.go
@@ -17,20 +17,11 @@
 var _ = Describe("api", func() {
 
 	var server *httptest.Server
+	scope := "bootstrap"
+	phase := 0
+	var h1 *test_handler
 
 	BeforeSuite(func() {
-		apid.Initialize(factory.DefaultServicesFactory())
-	})
-
-	AfterSuite(func() {
-		apid.Events().Close()
-		server.Close()
-	})
-
-	It("perform sync round-trip", func(done Done) {
-		scount := 0
-		phase := 0
-		scope := "bootstrap"
 		key := "XXXXXXX"
 		secret := "YYYYYYY"
 
@@ -54,7 +45,7 @@
 				return
 			}
 
-			// next requests are for changes
+			// next requests are for snapshot
 			if req.URL.Path == "/snapshots" {
 				Expect(req.Method).To(Equal("GET"))
 				q := req.URL.Query()
@@ -191,6 +182,7 @@
 			Fail("should not reach")
 		}))
 
+		apid.Initialize(factory.DefaultServicesFactory())
 		config = apid.Config()
 		config.Set(configProxyServerBaseURI, server.URL)
 		config.Set(configSnapServerBaseURI, server.URL)
@@ -210,8 +202,17 @@
 
 		// start process -  plugin will automatically start polling
 		apid.InitializePlugins()
+	})
 
-		h := &test_handler{
+	AfterSuite(func() {
+		apid.Events().Close()
+		server.Close()
+	})
+
+	It("perform sync round-trip", func(done Done) {
+		scount := 0
+		phase = 0
+		h1 = &test_handler{
 			"sync data",
 			func(event apid.Event) {
 				_, ok := event.(*common.Snapshot)
@@ -244,8 +245,18 @@
 			},
 		}
 
-		apid.Events().Listen(ApigeeSyncEventSelector, h)
+		donehandler := func(e apid.Event) {
+			if rsp, ok := e.(apid.EventDeliveryEvent); ok {
+				Expect(rsp.Description).Should(Equal("event complete"))
+			} else {
+				Fail("Unexpected event")
+			}
+		}
+		apid.Events().Listen(ApigeeSyncEventSelector, h1)
+		events.ListenFunc(apid.EventDeliveredSelector, donehandler)
+
 	})
+
 })
 
 type test_handler struct {
