diff --git a/listener.go b/listener.go
index e5d3980..393dc03 100644
--- a/listener.go
+++ b/listener.go
@@ -102,7 +102,7 @@
 func processChangeList(changes *common.ChangeList) {
 
 	// changes have been applied to DB
-	var deploymentsToInsert, deploymentsToDelete []DataDeployment
+	var insertedDeployments, deletedDeployments []DataDeployment
 	var errResults apiDeploymentResults
 	for _, change := range changes.Changes {
 		switch change.Table {
@@ -111,7 +111,7 @@
 			case common.Insert:
 				dep, err := dataDeploymentFromRow(change.NewRow)
 				if err == nil {
-					deploymentsToInsert = append(deploymentsToInsert, dep)
+					insertedDeployments = append(insertedDeployments, dep)
 				} else {
 					result := apiDeploymentResult{
 						ID:        dep.ID,
@@ -130,7 +130,7 @@
 					ID:          id,
 					DataScopeID: dataScopeID,
 				}
-				deploymentsToDelete = append(deploymentsToDelete, dep)
+				deletedDeployments = append(deletedDeployments, dep)
 			default:
 				log.Errorf("unexpected operation: %s", change.Operation)
 			}
@@ -142,23 +142,23 @@
 		go transmitDeploymentResultsToServer(errResults)
 	}
 
-	for _, d := range deploymentsToDelete {
+	for _, d := range deletedDeployments {
 		deploymentsChanged <- d.ID
 	}
 
 	log.Debug("ChangeList processed")
 
-	for _, dep := range deploymentsToInsert {
+	for _, dep := range insertedDeployments {
 		queueDownloadRequest(dep)
 	}
 
 	// clean up old bundles
-	if len(deploymentsToDelete) > 0 {
-		log.Debugf("will delete %d old bundles", len(deploymentsToDelete))
+	if len(deletedDeployments) > 0 {
+		log.Debugf("will delete %d old bundles", len(deletedDeployments))
 		go func() {
 			// give clients a minute to avoid conflicts
 			time.Sleep(bundleCleanupDelay)
-			for _, dep := range deploymentsToDelete {
+			for _, dep := range deletedDeployments {
 				bundleFile := getBundleFile(dep)
 				log.Debugf("removing old bundle: %v", bundleFile)
 				safeDelete(bundleFile)
diff --git a/listener_test.go b/listener_test.go
index 09b3dec..09290d8 100644
--- a/listener_test.go
+++ b/listener_test.go
@@ -8,7 +8,6 @@
 
 	"net/http"
 
-	"fmt"
 	"github.com/30x/apid-core"
 	"github.com/apigee-labs/transicator/common"
 	. "github.com/onsi/ginkgo"
@@ -19,8 +18,39 @@
 
 	Context("ApigeeSync snapshot event", func() {
 
+		/*
+		 * Note that the test snapshot should not be empty.
+		 * If it's empty, you can't use deploymentsResult chan to mark the end of processing,
+		 * so the threads generated by startupOnExistingDatabase() will mess up later tests
+		 */
+		It("should set DB to appropriate version", func(done Done) {
+			deploymentID := "set_version_test"
+			snapshot, dep := createSnapshotDeployment(deploymentID)
+
+			db, err := data.DBVersion(snapshot.SnapshotInfo)
+			Expect(err).ShouldNot(HaveOccurred())
+
+			err = InitDB(db)
+			Expect(err).ShouldNot(HaveOccurred())
+
+			insertDeploymentToDb(dep, db)
+			expectedDB, err := data.DBVersion(snapshot.SnapshotInfo)
+			Expect(err).NotTo(HaveOccurred())
+
+			var listener = make(chan deploymentsResult)
+			addSubscriber <- listener
+
+			apid.Events().Emit(APIGEE_SYNC_EVENT, &snapshot)
+
+			result := <-listener
+			Expect(result.err).ShouldNot(HaveOccurred())
+
+			// DB should have been set
+			Expect(getDB() == expectedDB).Should(BeTrue())
+			close(done)
+		})
+
 		It("should process unready on existing db startup event", func(done Done) {
-			fmt.Println("should process unready on existing db startup event")
 
 			deploymentID := "startup_test"
 
@@ -50,7 +80,6 @@
 		})
 
 		It("should send deployment statuses on existing db startup event", func(done Done) {
-			fmt.Println("should send deployment statuses on existing db startup event")
 
 			successDep := DataDeployment{
 				ID:                 "success",
@@ -195,6 +224,7 @@
 			addSubscriber <- listener
 			apid.Events().Emit(APIGEE_SYNC_EVENT, &event)
 			result = <-listener
+			Expect(result.err).ShouldNot(HaveOccurred())
 			Expect(len(result.deployments)).To(Equal(0))
 			close(done)
 		})
