Moar tests!
diff --git a/apigeeSync_suite_test.go b/apigeeSync_suite_test.go
index 93c70fb..ef8a1f6 100644
--- a/apigeeSync_suite_test.go
+++ b/apigeeSync_suite_test.go
@@ -21,12 +21,13 @@
 	tmpDir     string
 	testServer *httptest.Server
 	testRouter apid.Router
-	phase 	   int
 )
 
 const testScope = "bootstrap"
 
-var _ = BeforeSuite(func() {
+var _ = BeforeSuite(func(done Done) {
+	var phase int
+
 	apid.Initialize(factory.DefaultServicesFactory())
 
 	config := apid.Config()
@@ -50,7 +51,6 @@
 	config.Set(configConsumerKey, "XXXXXXX")
 	config.Set(configConsumerSecret, "YYYYYYY")
 
-
 	// mock upstream testServer
 	testRouter.HandleFunc("/accesstoken", func(w http.ResponseWriter, req *http.Request) {
 		defer GinkgoRecover()
@@ -261,6 +261,97 @@
 
 	}).Methods("GET")
 
+	// This is actually the first test :)
+	// Tests that entire bootstrap and set of sync operations work
+	apid.Events().ListenFunc(ApigeeSyncEventSelector, func(event apid.Event) {
+		defer GinkgoRecover()
+
+		if s, ok := event.(*common.Snapshot); ok {
+
+			Expect(s.SnapshotInfo).Should(Equal("snapinfo1"))
+
+			for _, t := range s.Tables {
+				switch t.Name {
+
+				case "edgex.apid_cluster":
+					Expect(t.Rows).To(HaveLen(1))
+					r := t.Rows[0]
+					var cs, id string
+					r.Get("_change_selector", &cs)
+					r.Get("id", &id)
+
+					Expect(cs).To(Equal("bootstrap"))
+					Expect(id).To(Equal("bootstrap"))
+
+				case "edgex.data_scope":
+					Expect(t.Rows).To(HaveLen(1))
+					r := t.Rows[0]
+
+					var cs, id, clusterID, env, org, scope string
+					r.Get("_change_selector", &cs)
+					r.Get("id", &id)
+					r.Get("apid_cluster_id", &clusterID)
+					r.Get("env", &env)
+					r.Get("org", &org)
+					r.Get("scope", &scope)
+
+					Expect(id).To(Equal("apid_config_scope_id_0"))
+					Expect(cs).To(Equal("apid_config_scope_id_0"))
+					Expect(clusterID).To(Equal("bootstrap"))
+					Expect(env).To(Equal("prod"))
+					Expect(org).To(Equal("att"))
+					Expect(scope).To(Equal("ert452"))
+
+				case "kms.api_product":
+					Expect(t.Rows).To(HaveLen(0))
+
+				default:
+					Fail("invalid table: " + t.Name)
+				}
+			}
+
+		} else if cl, ok := event.(*common.ChangeList); ok {
+
+			Expect(cl.LastSequence).To(Equal("lastSeq_01"))
+			Expect(cl.Changes).To(HaveLen(1))
+
+			c := cl.Changes[0]
+			Expect(c.Table).To(Equal("edgex.data_scope"))
+			Expect(c.Operation).To(Equal(common.Insert))
+
+			Expect(c.NewRow).ToNot(BeNil())
+
+			var id, clusterID, env, org, scope string
+			c.NewRow.Get("id", &id)
+			c.NewRow.Get("apid_cluster_id", &clusterID)
+			c.NewRow.Get("env", &env)
+			c.NewRow.Get("org", &org)
+			c.NewRow.Get("scope", &scope)
+
+			Expect(id).To(Equal("apid_config_scope_id_1"))
+			Expect(clusterID).To(Equal("bootstrap"))
+			Expect(env).To(Equal("prod"))
+			Expect(org).To(Equal("att"))
+			Expect(scope).To(Equal("ert452"))
+
+			events.ListenFunc(apid.EventDeliveredSelector, func(e apid.Event) {
+				defer GinkgoRecover()
+
+				// allow other handler to execute to insert last_sequence
+				time.Sleep(50 * time.Millisecond)
+				var seq string
+				err = getDB().
+					QueryRow("SELECT last_sequence FROM APID_CLUSTER LIMIT 1;").
+					Scan(&seq)
+
+				Expect(err).NotTo(HaveOccurred())
+				Expect(seq).To(Equal("lastSeq_01"))
+
+				close(done)
+			})
+		}
+	})
+
 	apid.InitializePlugins()
 })
 
diff --git a/apigee_sync.go b/apigee_sync.go
index 1ffaa18..9f02e91 100644
--- a/apigee_sync.go
+++ b/apigee_sync.go
@@ -30,8 +30,8 @@
 
 		if ev, ok := ede.Event.(*common.ChangeList); ok {
 			lastSequence = ev.LastSequence
-			status := persistChange(lastSequence)
-			if status == false {
+			err := persistChange(lastSequence)
+			if err != nil {
 				log.Panic("Unable to update Sequence in DB")
 			}
 			changeFinished = true
diff --git a/data.go b/data.go
index ee245b6..90e40ce 100644
--- a/data.go
+++ b/data.go
@@ -220,35 +220,28 @@
  * Persist the last change Id each time a change has been successfully
  * processed by the plugin(s)
  */
-func persistChange(lastChange string) bool {
+func persistChange(lastChange string) error {
 
 	log.Debugf("persistChange: %s", lastChange)
 
 	db := getDB()
 
-	txn, err := db.Begin()
-	if err != nil {
-		log.Errorf("Unable to create Sqlite transaction: %v", err)
-		return false
-	}
-	prep, err := txn.Prepare("UPDATE APID_CLUSTER SET last_sequence=$1;")
+	stmt, err := db.Prepare("UPDATE APID_CLUSTER SET last_sequence=$1;")
 	if err != nil {
 		log.Errorf("UPDATE APID_CLUSTER Failed: %v", err)
-		return false
+		return err
 	}
-	defer prep.Close()
-	s := txn.Stmt(prep)
-	_, err = s.Exec(lastChange)
-	s.Close()
+	defer stmt.Close()
+
+	_, err = stmt.Exec(lastChange)
 	if err != nil {
 		log.Errorf("UPDATE DATA_SCOPE Failed: %v", err)
-		txn.Rollback()
-		return false
+		return err
 	}
 
-	log.Info("UPDATE DATA_SCOPE Success: (", lastChange, ")")
-	txn.Commit()
-	return true
+	log.Infof("UPDATE DATA_SCOPE Success: %s", lastChange)
+
+	return nil
 }
 
 func getApidInstanceInfo() (info apidInstanceInfo, err error) {