diff --git a/api_test.go b/api_test.go
index 8899f69..bbdd9c4 100644
--- a/api_test.go
+++ b/api_test.go
@@ -311,7 +311,6 @@
 		CreatedBy:      "haoming@google.com",
 		Updated:        time.Now().Format(time.RFC3339),
 		UpdatedBy:      "haoming@google.com",
-		BlobFSLocation: "BlobFSLocation",
 	}
 	return dep
 }
diff --git a/bundle.go b/bundle.go
index b0dc434..660bd53 100644
--- a/bundle.go
+++ b/bundle.go
@@ -128,7 +128,7 @@
 			for _, dep := range deletedDeployments {
 				bundleFile := getBlobFilePath(dep.BlobID)
 				log.Debugf("removing old bundle: %v", bundleFile)
-				// TODO Remove from the Database table edgex_blob_available
+				// TODO Remove from the Database table apid_blob_available
 				safeDelete(bundleFile)
 			}
 		}()
diff --git a/data.go b/data.go
index 80beedd..2aa7f13 100644
--- a/data.go
+++ b/data.go
@@ -38,7 +38,6 @@
 	CreatedBy      string
 	Updated        string
 	UpdatedBy      string
-	BlobFSLocation string
 }
 
 type SQLExec interface {
@@ -78,7 +77,7 @@
 
 func (dbc *dbManager) initDb() error {
 	_, err := dbc.getDb().Exec(`
-	CREATE TABLE IF NOT EXISTS edgex_blob_available (
+	CREATE TABLE IF NOT EXISTS apid_blob_available (
 		id text primary key,
    		local_fs_location text NOT NULL
 	);
@@ -87,7 +86,7 @@
 		return err
 	}
 
-	log.Debug("Database table edgex_blob_available created.")
+	log.Debug("Database table apid_blob_available created.")
 	return nil
 }
 
@@ -99,7 +98,7 @@
 	rows, err := dbc.getDb().Query(`
 	SELECT a.bean_blob_id
 		FROM metadata_runtime_entity_metadata as a
-		LEFT JOIN edgex_blob_available as b
+		LEFT JOIN apid_blob_available as b
 		ON a.bean_blob_id = b.id
 		WHERE b.id IS NULL;
 	`)
@@ -118,7 +117,7 @@
 	rows, err = dbc.getDb().Query(`
 	SELECT a.resource_blob_id
 		FROM metadata_runtime_entity_metadata as a
-		LEFT JOIN edgex_blob_available as b
+		LEFT JOIN apid_blob_available as b
 		ON a.resource_blob_id = b.id
 		WHERE (b.id IS NULL AND a.resource_blob_id IS NOT NULL AND a.resource_blob_id != '');
 	`)
@@ -153,10 +152,9 @@
 	a.created_at,
 	a.created_by,
 	a.updated_at,
-	a.updated_by,
-	b.local_fs_location
+	a.updated_by
 	FROM metadata_runtime_entity_metadata as a
-	INNER JOIN edgex_blob_available as b
+	INNER JOIN apid_blob_available as b
 	ON (a.bean_blob_id = b.id OR a.resource_blob_id = b.id)
 	;
 	`)
@@ -185,7 +183,7 @@
 func (dbc *dbManager) updateLocalFsLocation(blobId, localFsLocation string) error {
 
 	stmt, err := dbc.getDb().Prepare(`
-		INSERT OR IGNORE INTO edgex_blob_available (
+		INSERT OR IGNORE INTO apid_blob_available (
 		id,
 		local_fs_location
 		) VALUES (?, ?);`)
@@ -197,11 +195,11 @@
 
 	_, err = stmt.Exec(blobId, localFsLocation)
 	if err != nil {
-		log.Errorf("UPDATE edgex_blob_available id {%s} local_fs_location {%s} failed", localFsLocation, err)
+		log.Errorf("UPDATE apid_blob_available id {%s} local_fs_location {%s} failed", localFsLocation, err)
 		return err
 	}
 
-	log.Debugf("INSERT edgex_blob_available {%s} local_fs_location {%s} succeeded", blobId, localFsLocation)
+	log.Debugf("INSERT apid_blob_available {%s} local_fs_location {%s} succeeded", blobId, localFsLocation)
 	return nil
 
 }
@@ -209,7 +207,7 @@
 func (dbc *dbManager) getLocalFSLocation(blobId string) (localFsLocation string, err error) {
 
 	log.Debugf("Getting the blob file for blobId {%s}", blobId)
-	rows, err := dbc.getDb().Query("SELECT local_fs_location FROM edgex_blob_available WHERE id = '" + blobId + "'")
+	rows, err := dbc.getDb().Query("SELECT local_fs_location FROM apid_blob_available WHERE id = '" + blobId + "'")
 	if err != nil {
 		log.Errorf("SELECT local_fs_location failed %v", err)
 		return "", err
@@ -244,7 +242,6 @@
 			&dep.CreatedBy,
 			&dep.Updated,
 			&dep.UpdatedBy,
-			&dep.BlobFSLocation,
 		)
 		if err != nil {
 			return nil, err
diff --git a/data_test.go b/data_test.go
index 208dac8..29f777a 100644
--- a/data_test.go
+++ b/data_test.go
@@ -64,9 +64,9 @@
 		})
 
 		It("should succefully initialized tables", func() {
-			// edgex_blob_available
+			// apid_blob_available
 			rows, err := testDbMan.getDb().Query(`
-				SELECT count(*) from edgex_blob_available;
+				SELECT count(*) from apid_blob_available;
 			`)
 			Expect(err).Should(Succeed())
 			defer rows.Close()
@@ -92,9 +92,9 @@
 
 			err := testDbMan.updateLocalFsLocation(readyBlobId, readyblobLocalFs)
 			Expect(err).Should(Succeed())
-			// edgex_blob_available
+			// apid_blob_available
 			rows, err := testDbMan.getDb().Query(`
-				SELECT count(*) from edgex_blob_available;
+				SELECT count(*) from apid_blob_available;
 			`)
 			Expect(err).Should(Succeed())
 			defer rows.Close()
@@ -110,7 +110,7 @@
 			err := testDbMan.updateLocalFsLocation(readyBlobId, readyblobLocalFs)
 			Expect(err).Should(Succeed())
 
-			// edgex_blob_available
+			// apid_blob_available
 			location, err := testDbMan.getLocalFSLocation(readyBlobId)
 			Expect(err).Should(Succeed())
 			Expect(location).Should(Equal(readyblobLocalFs))
@@ -124,7 +124,6 @@
 			Expect(err).Should(Succeed())
 			Expect(len(deps)).Should(Equal(1))
 			Expect(deps[0].BlobID).Should(Equal(readyBlobId))
-			Expect(deps[0].BlobFSLocation).Should(Equal(readyblobLocalFs))
 		})
 
 		It("should succefully get unready blob ids", func() {
diff --git a/listener.go b/listener.go
index c2b05df..701d3a1 100644
--- a/listener.go
+++ b/listener.go
@@ -22,7 +22,7 @@
 
 const (
 	APIGEE_SYNC_EVENT     = "ApigeeSync"
-	CONFIG_METADATA_TABLE = "project.runtime_blob_metadata"
+	CONFIG_METADATA_TABLE = "metadata.runtime_entity_metadata"
 )
 
 func (h *apigeeSyncHandler) initListener(services apid.Services) {
@@ -80,7 +80,7 @@
 func (h *apigeeSyncHandler) startupOnExistingDatabase() {
 	// start bundle downloads that didn't finish
 	go func() {
-		// create edgex_blob_available table
+		// create apid_blob_available table
 		h.dbMan.initDb()
 		blobIds, err := h.dbMan.getUnreadyBlobs()
 
@@ -127,8 +127,8 @@
 		}
 	*/
 
-	for _, dep := range insertedDeployments {
-		go h.bundleMan.queueDownloadRequest(&dep)
+	for i := range insertedDeployments {
+		go h.bundleMan.queueDownloadRequest(&insertedDeployments[i])
 	}
 
 	// clean up old bundles
diff --git a/listener_test.go b/listener_test.go
index 0cced6f..ad0b258 100644
--- a/listener_test.go
+++ b/listener_test.go
@@ -21,6 +21,7 @@
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
 	"math/rand"
+	"reflect"
 	"time"
 )
 
@@ -37,6 +38,7 @@
 		dummyDbMan = &dummyDbManager{}
 		dummyBundleMan = &dummyBundleManager{
 			requestChan: make(chan *DownloadRequest),
+			depChan:     make(chan *DataDeployment),
 		}
 		testHandler = &apigeeSyncHandler{
 			dbMan:     dummyDbMan,
@@ -56,7 +58,7 @@
 			// init unready blob ids
 			unreadyBlobIds := make([]string, 0)
 			blobMap := make(map[string]int)
-			for i := 0; i < rand.Intn(10); i++ {
+			for i := 0; i < 1+rand.Intn(10); i++ {
 				id := GenerateUUID()
 				blobMap[id] = 1
 				unreadyBlobIds = append(unreadyBlobIds, id)
@@ -99,10 +101,41 @@
 
 	})
 
+	Context("Change list", func() {
+
+		It("Insert event shoud enqueue download requests for all inserted deployments", func() {
+			// emit change event
+			changes := make([]common.Change, 0)
+			deployments := make(map[string]DataDeployment)
+			for i := 0; i < 1+rand.Intn(10); i++ {
+				dep := makeTestDeployment()
+				change := common.Change{
+					Operation: common.Insert,
+					Table:     CONFIG_METADATA_TABLE,
+					NewRow:    rowFromDeployment(dep),
+				}
+				changes = append(changes, change)
+				deployments[dep.ID] = *dep
+			}
+
+			changeList := &common.ChangeList{
+				Changes: changes,
+			}
+
+			apid.Events().Emit(APIGEE_SYNC_EVENT, changeList)
+
+			for i := 0; i < len(changes); i++ {
+				dep := <-dummyBundleMan.depChan
+				Expect(reflect.DeepEqual(deployments[dep.ID], *dep)).Should(BeTrue())
+				delete(deployments, dep.ID)
+			}
+		})
+	})
 })
 
 type dummyBundleManager struct {
 	requestChan chan *DownloadRequest
+	depChan     chan *DataDeployment
 }
 
 func (bm *dummyBundleManager) initializeBundleDownloading() {
@@ -110,7 +143,7 @@
 }
 
 func (bm *dummyBundleManager) queueDownloadRequest(dep *DataDeployment) {
-
+	bm.depChan <- dep
 }
 
 func (bm *dummyBundleManager) enqueueRequest(req *DownloadRequest) {
@@ -126,3 +159,22 @@
 func (bm *dummyBundleManager) Close() {
 
 }
+
+func rowFromDeployment(dep *DataDeployment) common.Row {
+	row := common.Row{}
+	row["id"] = &common.ColumnVal{Value: dep.ID}
+	row["organization_id"] = &common.ColumnVal{Value: dep.OrgID}
+	row["environment_id"] = &common.ColumnVal{Value: dep.EnvID}
+	row["bean_blob_id"] = &common.ColumnVal{Value: dep.BlobID}
+	row["resource_blob_id"] = &common.ColumnVal{Value: dep.BlobResourceID}
+	row["type"] = &common.ColumnVal{Value: dep.Type}
+	row["name"] = &common.ColumnVal{Value: dep.Name}
+	row["revision"] = &common.ColumnVal{Value: dep.Revision}
+	row["path"] = &common.ColumnVal{Value: dep.Path}
+	row["created_at"] = &common.ColumnVal{Value: dep.Created}
+	row["created_by"] = &common.ColumnVal{Value: dep.CreatedBy}
+	row["updated_at"] = &common.ColumnVal{Value: dep.Updated}
+	row["updated_by"] = &common.ColumnVal{Value: dep.UpdatedBy}
+
+	return row
+}
