diff --git a/apidGatewayDeploy_suite_test.go b/apidGatewayDeploy_suite_test.go
index 7325666..236fe51 100644
--- a/apidGatewayDeploy_suite_test.go
+++ b/apidGatewayDeploy_suite_test.go
@@ -42,9 +42,10 @@
 
 	apid.InitializePlugins("")
 
+	// init full DB
 	db, err := data.DB()
 	Expect(err).NotTo(HaveOccurred())
-	err = InitDB(db)
+	err = InitDBFullColumns(db)
 	Expect(err).NotTo(HaveOccurred())
 	SetDB(db)
 
@@ -116,6 +117,7 @@
 
 	_, err = getDB().Exec("DELETE FROM edgex_deployment")
 	Expect(err).ShouldNot(HaveOccurred())
+
 	_, err = getDB().Exec("UPDATE etag SET value=1")
 })
 
diff --git a/data.go b/data.go
index 02e1f9c..72f007a 100644
--- a/data.go
+++ b/data.go
@@ -5,6 +5,7 @@
 	"fmt"
 	"sync"
 
+	"encoding/json"
 	"github.com/30x/apid-core"
 )
 
@@ -38,7 +39,7 @@
 	Exec(query string, args ...interface{}) (sql.Result, error)
 }
 
-func InitDB(db apid.DB) error {
+func InitDBFullColumns(db apid.DB) error {
 	_, err := db.Exec(`
 	CREATE TABLE IF NOT EXISTS edgex_deployment (
 		id character varying(36) NOT NULL,
@@ -51,7 +52,7 @@
 		created_by text,
 		updated timestamp without time zone,
 		updated_by text,
-		bundle_name text,
+		bundle_config_name text,
 		bundle_uri text,
 		local_bundle_uri text,
 		bundle_checksum text,
@@ -70,6 +71,49 @@
 	return nil
 }
 
+func InitDB(db apid.DB) error {
+	_, err := db.Exec(`
+	CREATE TABLE IF NOT EXISTS edgex_deployment (
+		id character varying(36) NOT NULL,
+		bundle_config_id varchar(36) NOT NULL,
+		apid_cluster_id varchar(36) NOT NULL,
+		data_scope_id varchar(36) NOT NULL,
+		bundle_config_json text NOT NULL,
+		config_json text NOT NULL,
+		created timestamp without time zone,
+		created_by text,
+		updated timestamp without time zone,
+		updated_by text,
+		bundle_config_name text,
+		PRIMARY KEY (id)
+	);
+	`)
+	if err != nil {
+		return err
+	}
+
+	log.Debug("Database tables created.")
+	return nil
+}
+
+func AlterTable(db apid.DB) error {
+	_, err := db.Exec(`
+	ALTER TABLE edgex_deployment ADD COLUMN bundle_uri text;
+	ALTER TABLE edgex_deployment ADD COLUMN local_bundle_uri text;
+	ALTER TABLE edgex_deployment ADD COLUMN bundle_checksum text;
+	ALTER TABLE edgex_deployment ADD COLUMN bundle_checksum_type text;
+	ALTER TABLE edgex_deployment ADD COLUMN deploy_status string;
+	ALTER TABLE edgex_deployment ADD COLUMN deploy_error_code int;
+	ALTER TABLE edgex_deployment ADD COLUMN deploy_error_message text;
+	`)
+	if err != nil {
+		return err
+	}
+
+	log.Debug("Database table altered.")
+	return nil
+}
+
 func getDB() apid.DB {
 	dbMux.RLock()
 	db := unsafeDB
@@ -97,7 +141,7 @@
 	INSERT INTO edgex_deployment
 		(id, bundle_config_id, apid_cluster_id, data_scope_id,
 		bundle_config_json, config_json, created, created_by,
-		updated, updated_by, bundle_name, bundle_uri, local_bundle_uri,
+		updated, updated_by, bundle_config_name, bundle_uri, local_bundle_uri,
 		bundle_checksum, bundle_checksum_type, deploy_status,
 		deploy_error_code, deploy_error_message)
 		VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18);
@@ -127,6 +171,89 @@
 	return err
 }
 
+func updateDeploymentsColumns(tx *sql.Tx, deps []DataDeployment) error {
+
+	log.Debugf("updating %d edgex_deployment", len(deps))
+
+	stmt, err := tx.Prepare(`
+	UPDATE edgex_deployment SET
+		(bundle_uri, local_bundle_uri,
+		bundle_checksum, bundle_checksum_type, deploy_status,
+		deploy_error_code, deploy_error_message)
+		= ($1,$2,$3,$4,$5,$6,$7) WHERE id = $8
+	`)
+	if err != nil {
+		log.Errorf("prepare update edgex_deployment failed: %v", err)
+		return err
+	}
+	defer stmt.Close()
+
+	for _, dep := range deps {
+		log.Debugf("updateDeploymentsColumns: processing deployment %s, %v", dep.ID, dep.BundleURI)
+
+		_, err = stmt.Exec(
+			dep.BundleURI,
+			dep.LocalBundleURI, dep.BundleChecksum, dep.BundleChecksumType, dep.DeployStatus,
+			dep.DeployErrorCode, dep.DeployErrorMessage, dep.ID)
+		if err != nil {
+			log.Errorf("updateDeploymentsColumns of edgex_deployment %s failed: %v", dep.ID, err)
+			return err
+		}
+	}
+
+	log.Debug("updateDeploymentsColumns of edgex_deployment succeeded")
+	return err
+}
+
+func getDeploymentsToUpdate(db apid.DB) (deployments []DataDeployment, err error) {
+	deployments, err = getDeployments("WHERE bundle_uri IS NULL AND local_bundle_uri IS NULL AND deploy_status IS NULL")
+	if err != nil {
+		log.Errorf("getDeployments in getDeploymentsToUpdate failed: %v", err)
+		return
+	}
+	var bc bundleConfigJson
+	for i, _ := range deployments {
+		log.Debugf("getDeploymentsToUpdate: processing deployment %v, %v", deployments[i].ID, deployments[i].BundleConfigJSON)
+		json.Unmarshal([]byte(deployments[i].BundleConfigJSON), &bc)
+		if err != nil {
+			log.Errorf("JSON decoding Manifest failed: %v", err)
+			return
+		}
+		deployments[i].BundleName = bc.Name
+		deployments[i].BundleURI = bc.URI
+		deployments[i].BundleChecksumType = bc.ChecksumType
+		deployments[i].BundleChecksum = bc.Checksum
+
+		log.Debugf("Unmarshal: %v", deployments[i].BundleURI)
+	}
+	return
+}
+
+/*
+func countColumns(db apid.DB) int {
+	stmt, err := db.Prepare(`
+	SELECT * FROM edgex_deployment LIMIT 1;
+	`)
+	if err != nil {
+		log.Panicf("countColumns Failed %v", err)
+		return
+	}
+	defer stmt.Close()
+	var rows *sql.Rows
+	rows, err = stmt.Query()
+	if err != nil {
+		log.Panicf("countColumns Failed %v", err)
+		return
+	}
+	defer rows.Close()
+	cols, err :=rows.Columns()
+	if err != nil {
+		log.Panicf("countColumns Failed %v", err)
+		return
+	}
+	return len(cols)
+}
+*/
 func deleteDeployment(tx *sql.Tx, depID string) error {
 
 	log.Debugf("deleteDeployment: %s", depID)
@@ -166,7 +293,7 @@
 	stmt, err = db.Prepare(`
 	SELECT id, bundle_config_id, apid_cluster_id, data_scope_id,
 		bundle_config_json, config_json, created, created_by,
-		updated, updated_by, bundle_name, bundle_uri,
+		updated, updated_by, bundle_config_name, bundle_uri,
 		local_bundle_uri, bundle_checksum, bundle_checksum_type, deploy_status,
 		deploy_error_code, deploy_error_message
 	FROM edgex_deployment
@@ -268,3 +395,33 @@
 
 	return nil
 }
+
+func InsertTestDeployment(tx *sql.Tx, dep DataDeployment) error {
+
+	stmt, err := tx.Prepare(`
+	INSERT INTO edgex_deployment
+		(id, bundle_config_id, apid_cluster_id, data_scope_id,
+		bundle_config_json, config_json, created, created_by,
+		updated, updated_by, bundle_config_name)
+		VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11);
+	`)
+	if err != nil {
+		log.Errorf("prepare insert into edgex_deployment failed: %v", err)
+		return err
+	}
+	defer stmt.Close()
+
+	log.Debugf("InsertTestDeployment: %s", dep.ID)
+
+	_, err = stmt.Exec(
+		dep.ID, dep.BundleConfigID, dep.ApidClusterID, dep.DataScopeID,
+		dep.BundleConfigJSON, dep.ConfigJSON, dep.Created, dep.CreatedBy,
+		dep.Updated, dep.UpdatedBy, dep.BundleName)
+	if err != nil {
+		log.Errorf("insert into edgex_deployment %s failed: %v", dep.ID, err)
+		return err
+	}
+
+	log.Debug("InsertTestDeployment edgex_deployment succeeded")
+	return err
+}
diff --git a/listener.go b/listener.go
index 393dc03..b1e965a 100644
--- a/listener.go
+++ b/listener.go
@@ -9,6 +9,7 @@
 
 	"github.com/30x/apid-core"
 	"github.com/apigee-labs/transicator/common"
+	"strings"
 )
 
 const (
@@ -54,10 +55,38 @@
 		log.Panicf("Unable to access database: %v", err)
 	}
 
+	// alter table
+	err = AlterTable(db)
+	if err != nil {
+		log.Error(err.Error())
+		if !strings.Contains(err.Error(), "duplicate") {
+			log.Panicf("Alter table failed: %v", err)
+		}
+	}
 	// ensure that no new database updates are made on old database
 	dbMux.Lock()
 	SetDB(db)
 	dbMux.Unlock()
+
+	// update deployments
+	deps, err := getDeploymentsToUpdate(db)
+	if err != nil {
+		log.Panicf("Unable to getDeploymentsToUpdate: %v", err)
+	}
+	tx, err := db.Begin()
+	if err != nil {
+		log.Panicf("Error starting transaction: %v", err)
+	}
+	defer tx.Rollback()
+	err = updateDeploymentsColumns(tx, deps)
+	if err != nil {
+		log.Panicf("updateDeploymentsColumns failed: %v", err)
+	}
+	err = tx.Commit()
+	if err != nil {
+		log.Panicf("Error committing Snapshot update: %v", err)
+	}
+
 	startupOnExistingDatabase()
 	log.Debug("Snapshot processed")
 }
diff --git a/listener_test.go b/listener_test.go
index 09290d8..c253eb3 100644
--- a/listener_test.go
+++ b/listener_test.go
@@ -8,6 +8,7 @@
 
 	"net/http"
 
+	"fmt"
 	"github.com/30x/apid-core"
 	"github.com/apigee-labs/transicator/common"
 	. "github.com/onsi/ginkgo"
@@ -24,8 +25,9 @@
 		 * so the threads generated by startupOnExistingDatabase() will mess up later tests
 		 */
 		It("should set DB to appropriate version", func(done Done) {
+			saveDB := getDB()
 			deploymentID := "set_version_test"
-			snapshot, dep := createSnapshotDeployment(deploymentID)
+			snapshot, dep := createSnapshotDeployment(deploymentID, "test_version")
 
 			db, err := data.DBVersion(snapshot.SnapshotInfo)
 			Expect(err).ShouldNot(HaveOccurred())
@@ -47,14 +49,18 @@
 
 			// DB should have been set
 			Expect(getDB() == expectedDB).Should(BeTrue())
+
+			SetDB(saveDB)
 			close(done)
 		})
 
 		It("should process unready on existing db startup event", func(done Done) {
 
+			saveDB := getDB()
+
 			deploymentID := "startup_test"
 
-			snapshot, dep := createSnapshotDeployment(deploymentID)
+			snapshot, dep := createSnapshotDeployment(deploymentID, "test_unready")
 
 			db, err := data.DBVersion(snapshot.SnapshotInfo)
 			Expect(err).ShouldNot(HaveOccurred())
@@ -76,11 +82,15 @@
 			d := result.deployments[0]
 
 			Expect(d.ID).To(Equal(deploymentID))
+
+			SetDB(saveDB)
 			close(done)
 		})
 
 		It("should send deployment statuses on existing db startup event", func(done Done) {
 
+			saveDB := getDB()
+
 			successDep := DataDeployment{
 				ID:                 "success",
 				LocalBundleURI:     "x",
@@ -124,6 +134,7 @@
 					Message:   failDep.DeployErrorMessage,
 				}))
 
+				SetDB(saveDB)
 				close(done)
 			}))
 
@@ -140,7 +151,7 @@
 			db, err := data.DBVersion(snapshot.SnapshotInfo)
 			Expect(err).NotTo(HaveOccurred())
 
-			err = InitDB(db)
+			err = InitDBFullColumns(db)
 			Expect(err).NotTo(HaveOccurred())
 
 			tx, err := db.Begin()
@@ -168,7 +179,13 @@
 
 			event, dep := createChangeDeployment(deploymentID)
 
-			insertDeploymentToDb(dep, getDB())
+			// insert full deployment columns
+			tx, err := getDB().Begin()
+			Expect(err).ShouldNot(HaveOccurred())
+			err = InsertDeployment(tx, dep)
+			Expect(err).ShouldNot(HaveOccurred())
+			err = tx.Commit()
+			Expect(err).ShouldNot(HaveOccurred())
 
 			var listener = make(chan deploymentsResult)
 			addSubscriber <- listener
@@ -198,7 +215,15 @@
 
 			// insert deployment
 			event, dep := createChangeDeployment(deploymentID)
-			insertDeploymentToDb(dep, getDB())
+
+			// insert full deployment columns
+			tx, err := getDB().Begin()
+			Expect(err).ShouldNot(HaveOccurred())
+			err = InsertDeployment(tx, dep)
+			Expect(err).ShouldNot(HaveOccurred())
+			err = tx.Commit()
+			Expect(err).ShouldNot(HaveOccurred())
+
 			listener := make(chan deploymentsResult)
 			addSubscriber <- listener
 			apid.Events().Emit(APIGEE_SYNC_EVENT, &event)
@@ -267,7 +292,7 @@
 	tx, err := db.Begin()
 	Expect(err).ShouldNot(HaveOccurred())
 	defer tx.Rollback()
-	err = InsertDeployment(tx, dep)
+	err = InsertTestDeployment(tx, dep)
 	Expect(err).ShouldNot(HaveOccurred())
 	err = tx.Commit()
 	Expect(err).ShouldNot(HaveOccurred())
@@ -283,7 +308,7 @@
 	Expect(err).ShouldNot(HaveOccurred())
 }
 
-func createSnapshotDeployment(deploymentID string) (common.Snapshot, DataDeployment) {
+func createSnapshotDeployment(deploymentID string, snapInfo string) (common.Snapshot, DataDeployment) {
 	uri, err := url.Parse(testServer.URL)
 	Expect(err).ShouldNot(HaveOccurred())
 
@@ -296,17 +321,22 @@
 	}
 	bundle.Checksum = testGetChecksum(bundle.ChecksumType, bundleUri)
 
+	jsonBytes, err := json.Marshal(bundle)
+	Expect(err).ShouldNot(HaveOccurred())
+	fmt.Println("JSON :" + string(jsonBytes))
+
 	dep := DataDeployment{
 		ID:                 deploymentID,
 		DataScopeID:        deploymentID,
 		BundleURI:          bundle.URI,
 		BundleChecksum:     bundle.Checksum,
 		BundleChecksumType: bundle.ChecksumType,
+		BundleConfigJSON:   string(jsonBytes),
 	}
 
 	// init without info == startup on existing DB
 	var snapshot = common.Snapshot{
-		SnapshotInfo: "test",
+		SnapshotInfo: snapInfo,
 		Tables:       []common.Table{},
 	}
 	return snapshot, dep
