diff --git a/api.go b/api.go
index 1020414..d026ed9 100644
--- a/api.go
+++ b/api.go
@@ -119,13 +119,13 @@
 			ad.id,
 			"developer" as ctype
 		FROM
-			APP_CREDENTIAL AS c 
-			INNER JOIN APP AS a ON c.app_id = a.id
-			INNER JOIN DEVELOPER AS ad 
+			KMS_APP_CREDENTIAL AS c
+			INNER JOIN KMS_APP AS a ON c.app_id = a.id
+			INNER JOIN KMS_DEVELOPER AS ad
 				ON ad.id = a.developer_id
-			INNER JOIN APP_CREDENTIAL_APIPRODUCT_MAPPER as mp 
+			INNER JOIN KMS_APP_CREDENTIAL_APIPRODUCT_MAPPER as mp
 				ON mp.appcred_id = c.id 
-			INNER JOIN API_PRODUCT as ap ON ap.id = mp.apiprdt_id
+			INNER JOIN KMS_API_PRODUCT as ap ON ap.id = mp.apiprdt_id
 		WHERE (UPPER(ad.status) = 'ACTIVE' 
 			AND mp.apiprdt_id = ap.id 
 			AND mp.app_id = a.id
@@ -145,13 +145,13 @@
 			ad.id,
 			"company" as ctype
 		FROM
-			APP_CREDENTIAL AS c
-			INNER JOIN APP AS a ON c.app_id = a.id
-			INNER JOIN COMPANY AS ad
+			KMS_APP_CREDENTIAL AS c
+			INNER JOIN KMS_APP AS a ON c.app_id = a.id
+			INNER JOIN KMS_COMPANY AS ad
 				ON ad.id = a.company_id
-			INNER JOIN APP_CREDENTIAL_APIPRODUCT_MAPPER as mp
+			INNER JOIN KMS_APP_CREDENTIAL_APIPRODUCT_MAPPER as mp
 				ON mp.appcred_id = c.id
-			INNER JOIN API_PRODUCT as ap ON ap.id = mp.apiprdt_id
+			INNER JOIN KMS_API_PRODUCT as ap ON ap.id = mp.apiprdt_id
 		WHERE (UPPER(ad.status) = 'ACTIVE'
 			AND mp.apiprdt_id = ap.id
 			AND mp.app_id = a.id
@@ -162,8 +162,12 @@
 			AND c.tenant_id = $2)
 	;`
 
-	var status, redirectionURIs, appName, appId, resName, resEnv, cType string
-	var issuedAt int64
+	/* these fields need to be nullable types for scanning.  This is because when using json snapshots,
+	   and therefore being responsible for inserts, we were able to default everything to be not null.  With
+	   sqlite snapshots, we are not necessarily guaranteed that
+	*/
+	var status, redirectionURIs, appName, appId, resName, resEnv, cType sql.NullString
+	var issuedAt sql.NullInt64
 	err := db.QueryRow(sSql, key, tenantId).Scan(&resName, &resEnv, &issuedAt, &status,
 		&redirectionURIs, &appName, &appId, &cType)
 	switch {
@@ -182,18 +186,18 @@
 	 * Perform all validations related to the Query made with the data
 	 * we just retrieved
 	 */
-	result := validatePath(resName, path)
+	result := validatePath(resName.String, path)
 	if result == false {
-		reason := "Path Validation Failed (" + resName + " vs " + path + ")"
+		reason := "Path Validation Failed (" + resName.String + " vs " + path + ")"
 		errorCode := "PATH_VALIDATION_FAILED"
 		return errorResponse(reason, errorCode)
 
 	}
 
 	/* Verify if the ENV matches */
-	result = validateEnv(resEnv, env)
+	result = validateEnv(resEnv.String, env)
 	if result == false {
-		reason := "ENV Validation Failed (" + resEnv + " vs " + env + ")"
+		reason := "ENV Validation Failed (" + resEnv.String + " vs " + env + ")"
 		errorCode := "ENV_VALIDATION_FAILED"
 		return errorResponse(reason, errorCode)
 	}
@@ -204,12 +208,12 @@
 		RspInfo: sucResponseDetail{
 			Key:             key,
 			ExpiresAt:       expiresAt,
-			IssuedAt:        issuedAt,
-			Status:          status,
-			RedirectionURIs: redirectionURIs,
-			Type:            cType,
-			AppId:           appId,
-			AppName:         appName},
+			IssuedAt:        issuedAt.Int64,
+			Status:          status.String,
+			RedirectionURIs: redirectionURIs.String,
+			Type:            cType.String,
+			AppId:           appId.String,
+			AppName:         appName.String},
 	}
 	return json.Marshal(resp)
 }
diff --git a/api_test.go b/api_test.go
index 7222341..ddb245e 100644
--- a/api_test.go
+++ b/api_test.go
@@ -2,7 +2,6 @@
 
 import (
 	"encoding/json"
-	"github.com/apigee-labs/transicator/common"
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
 	"io/ioutil"
@@ -16,98 +15,6 @@
 
 	Context("DB Inserts/Deletes verification", func() {
 
-		It("Positive DB test for Insert operations", func() {
-			db := getDB()
-			txn, err := db.Begin()
-			Expect(err).ShouldNot(HaveOccurred())
-			// api products
-			for i := 0; i < 10; i++ {
-				row := generateTestApiProduct(i)
-				res := insertAPIproducts([]common.Row{row}, txn)
-				Expect(res).Should(BeTrue())
-			}
-			// developers
-			for i := 0; i < 10; i++ {
-				row := generateTestDeveloper(i)
-				res := insertDevelopers([]common.Row{row}, txn)
-				Expect(res).Should(BeTrue())
-			}
-
-			// application
-			var j, k int
-			for i := 0; i < 10; i++ {
-				for j = k; j < 10+k; j++ {
-					row := generateTestApp(j, i)
-					res := insertApplications([]common.Row{row}, txn)
-					Expect(res).Should(BeTrue())
-				}
-				k = j
-			}
-			// app credentials
-			for i := 0; i < 10; i++ {
-				row := generateTestAppCreds(i)
-				res := insertCredentials([]common.Row{row}, txn)
-				Expect(res).Should(BeTrue())
-			}
-			// api product mapper
-			for i := 0; i < 10; i++ {
-				row := generateTestApiProductMapper(i)
-				res := insertAPIProductMappers([]common.Row{row}, txn)
-				Expect(res).Should(BeTrue())
-			}
-
-			// Following are data for company
-			// api products
-			for i := 100; i < 110; i++ {
-				row := generateTestApiProduct(i)
-				res := insertAPIproducts([]common.Row{row}, txn)
-				Expect(res).Should(BeTrue())
-			}
-
-			// companies
-			for i := 100; i < 110; i++ {
-				row := generateTestCompany(i)
-				res := insertCompanies([]common.Row{row}, txn)
-				Expect(res).Should(BeTrue())
-			}
-
-			// company developers
-			for i := 100; i < 110; i++ {
-				row := generateTestCompanyDeveloper(i)
-				res := insertCompanyDevelopers([]common.Row{row}, txn)
-				Expect(res).Should(BeTrue())
-			}
-
-			// application
-			k = 100
-			for i := 100; i < 110; i++ {
-				for j = k; j < 100+k; j++ {
-					row := generateTestAppCompany(j, i)
-					res := insertApplications([]common.Row{row}, txn)
-					Expect(res).Should(BeTrue())
-				}
-				k = j
-			}
-			// app credentials
-			for i := 100; i < 110; i++ {
-				row := generateTestAppCreds(i)
-				res := insertCredentials([]common.Row{row}, txn)
-				Expect(res).Should(BeTrue())
-			}
-			// api product mapper
-			for i := 100; i < 110; i++ {
-				row := generateTestApiProductMapper(i)
-				res := insertAPIProductMappers([]common.Row{row}, txn)
-				Expect(res).Should(BeTrue())
-			}
-
-			txn.Commit()
-			var count int64
-			db.QueryRow("select count(*) from data_scope").Scan(&count)
-			log.Info("Found ", count)
-
-		})
-
 		It("should reject a bad key", func() {
 			v := url.Values{
 				"key":       []string{"credential_x"},
@@ -165,109 +72,6 @@
 			}
 		})
 
-		It("Positive DB test for Delete operations", func() {
-			db := getDB()
-			txn, err := db.Begin()
-			Expect(err).ShouldNot(HaveOccurred())
-
-			for i := 0; i < 10; i++ {
-				row := generateTestApiProductMapper(i)
-				res := deleteAPIproductMapper(row, txn)
-				Expect(res).Should(BeTrue())
-			}
-
-			for i := 0; i < 10; i++ {
-				row := generateTestAppCreds(i)
-				res := deleteObject("APP_CREDENTIAL", row, txn)
-				Expect(res).Should(BeTrue())
-			}
-			for i := 0; i < 100; i++ {
-				row := generateTestApp(i, 999) //TODO we use j in above insertions
-				res := deleteObject("APP", row, txn)
-				Expect(res).Should(BeTrue())
-			}
-
-			for i := 0; i < 10; i++ {
-				row := generateTestDeveloper(i)
-				res := deleteObject("DEVELOPER", row, txn)
-				Expect(res).Should(BeTrue())
-			}
-
-			for i := 0; i < 10; i++ {
-				row := generateTestApiProduct(i)
-				res := deleteObject("API_PRODUCT", row, txn)
-				Expect(res).Should(BeTrue())
-			}
-
-			for i := 100; i < 110; i++ {
-				row := generateTestCompanyDeveloper(i)
-				res := deleteCompanyDeveloper(row, txn)
-				Expect(res).Should(BeTrue())
-			}
-
-			txn.Commit()
-		})
-
-		It("Negative cases for DB Deletes on KMS tables", func() {
-			db := getDB()
-			txn, err := db.Begin()
-			Expect(err).ShouldNot(HaveOccurred())
-
-			row := generateTestApiProductMapper(999)
-
-			res := deleteAPIproductMapper(row, txn)
-			Expect(res).Should(BeFalse())
-
-			res = deleteObject("API_PRODUCT", row, txn)
-			Expect(res).Should(BeFalse())
-
-			res = deleteObject("APP_CREDENTIAL", row, txn)
-			Expect(res).Should(BeFalse())
-
-			res = deleteObject("DEVELOPER", row, txn)
-			Expect(res).Should(BeFalse())
-
-			res = deleteObject("APP", row, txn)
-			Expect(res).Should(BeFalse())
-
-			res = deleteObject("COMPANY", row, txn)
-			Expect(res).Should(BeFalse())
-
-			res = deleteCompanyDeveloper(row, txn)
-			Expect(res).Should(BeFalse())
-
-			txn.Rollback()
-
-		})
-
-		It("Negative cases for DB Inserts/updates on KMS tables", func() {
-
-			db := getDB()
-			txn, err := db.Begin()
-			Expect(err).ShouldNot(HaveOccurred())
-
-			row := generateTestApiProduct(999)
-			row["id"] = nil
-			res := insertAPIproducts([]common.Row{row}, txn)
-			Expect(res).Should(BeFalse())
-
-			res = insertApplications([]common.Row{row}, txn)
-			Expect(res).Should(BeFalse())
-
-			res = insertCredentials([]common.Row{row}, txn)
-			Expect(res).Should(BeFalse())
-
-			res = insertAPIProductMappers([]common.Row{row}, txn)
-			Expect(res).Should(BeFalse())
-
-			res = insertCompanies([]common.Row{row}, txn)
-			Expect(res).Should(BeFalse())
-
-			res = insertCompanyDevelopers([]common.Row{row}, txn)
-			Expect(res).Should(BeFalse())
-
-		})
-
 		It("should reject a bad key", func() {
 
 			uri, err := url.Parse(testServer.URL)
@@ -295,4 +99,4 @@
 			Expect(respj.ErrInfo.ErrorCode).Should(Equal("REQ_ENTRY_NOT_FOUND"))
 		})
 	})
-})
+})
\ No newline at end of file
diff --git a/init.go b/init.go
index 7a1ad38..19b729d 100644
--- a/init.go
+++ b/init.go
@@ -52,7 +52,7 @@
 
 func createTables(db apid.DB) {
 	_, err := db.Exec(`
-CREATE TABLE IF NOT EXISTS api_product (
+CREATE TABLE IF NOT EXISTS kms_api_product (
     id text,
     tenant_id text,
     name text,
@@ -71,7 +71,7 @@
     updated_at int64,
     updated_by text,
     PRIMARY KEY (tenant_id, id));
-CREATE TABLE IF NOT EXISTS developer (
+CREATE TABLE IF NOT EXISTS kms_developer (
     id text,
     tenant_id text,
     username text,
@@ -89,7 +89,7 @@
     updated_by text,
     PRIMARY KEY (tenant_id, id)
 );
-CREATE TABLE IF NOT EXISTS company (
+CREATE TABLE IF NOT EXISTS kms_company (
     id text,
     tenant_id text,
     name text,
@@ -102,7 +102,7 @@
     _change_selector text,
     PRIMARY KEY (tenant_id, id)
 );
-CREATE TABLE IF NOT EXISTS company_developer (
+CREATE TABLE IF NOT EXISTS kms_company_developer (
      tenant_id text,
      company_id text,
      developer_id text,
@@ -114,7 +114,7 @@
     _change_selector text,
     PRIMARY KEY (tenant_id, company_id,developer_id)
 );
-CREATE TABLE IF NOT EXISTS app (
+CREATE TABLE IF NOT EXISTS kms_app (
     id text,
     tenant_id text,
     name text,
@@ -134,7 +134,7 @@
     _change_selector text,
     PRIMARY KEY (tenant_id, id)
 );
-CREATE TABLE IF NOT EXISTS app_credential (
+CREATE TABLE IF NOT EXISTS kms_app_credential (
     id text,
     tenant_id text,
     consumer_secret text,
@@ -147,7 +147,7 @@
     _change_selector text,
     PRIMARY KEY (tenant_id, id)
 );
-CREATE TABLE IF NOT EXISTS app_credential_apiproduct_mapper (
+CREATE TABLE IF NOT EXISTS kms_app_credential_apiproduct_mapper (
     tenant_id text,
     appcred_id text,
     app_id text,
@@ -156,10 +156,10 @@
     status text,
     PRIMARY KEY (appcred_id, app_id, apiprdt_id,tenant_id)
 );
-CREATE INDEX IF NOT EXISTS company_id ON company (id);
-CREATE INDEX IF NOT EXISTS developer_id ON developer (id);
-CREATE INDEX IF NOT EXISTS api_product_id ON api_product (id);
-CREATE INDEX IF NOT EXISTS app_id ON app (id);
+CREATE INDEX IF NOT EXISTS company_id ON kms_company (id);
+CREATE INDEX IF NOT EXISTS developer_id ON kms_developer (id);
+CREATE INDEX IF NOT EXISTS api_product_id ON kms_api_product (id);
+CREATE INDEX IF NOT EXISTS app_id ON kms_app (id);
 `)
 	if err != nil {
 		log.Panic("Unable to initialize DB", err)
diff --git a/listener.go b/listener.go
index 3fae5c0..8eda4ed 100644
--- a/listener.go
+++ b/listener.go
@@ -1,8 +1,6 @@
 package apidVerifyApiKey
 
 import (
-	"database/sql"
-
 	"github.com/30x/apid-core"
 	"github.com/apigee-labs/transicator/common"
 )
@@ -19,13 +17,6 @@
 	snapData, ok := e.(*common.Snapshot)
 	if ok {
 		processSnapshot(snapData)
-	} else {
-		changeSet, ok := e.(*common.ChangeList)
-		if ok {
-			processChange(changeSet)
-		} else {
-			log.Debugf("Received Invalid event. Ignoring. %v", e)
-		}
 	}
 	return
 }
@@ -39,647 +30,6 @@
 		log.Panicf("Unable to access database: %v", err)
 	}
 
-	createTables(db)
-
-	if len(snapshot.Tables) > 0 {
-		txn, err := db.Begin()
-		if err != nil {
-			log.Panicf("Unable to create transaction: %v", err)
-			return
-		}
-
-		/*
-		 * Iterate the tables, and insert the rows,
-		 * Commit them in bulk.
-		 */
-		ok := true
-		for _, payload := range snapshot.Tables {
-			switch payload.Name {
-			case "kms.developer":
-				ok = insertDevelopers(payload.Rows, txn)
-			case "kms.app":
-				ok = insertApplications(payload.Rows, txn)
-			case "kms.app_credential":
-				ok = insertCredentials(payload.Rows, txn)
-			case "kms.api_product":
-				ok = insertAPIproducts(payload.Rows, txn)
-			case "kms.app_credential_apiproduct_mapper":
-				ok = insertAPIProductMappers(payload.Rows, txn)
-			case "kms.company":
-				ok = insertCompanies(payload.Rows, txn)
-			case "kms.company_developer":
-				ok = insertCompanyDevelopers(payload.Rows, txn)
-			}
-			if !ok {
-				log.Error("Error encountered in Downloading Snapshot for VerifyApiKey")
-				txn.Rollback()
-				return
-			}
-		}
-		log.Debug("Downloading Snapshot for VerifyApiKey complete")
-		txn.Commit()
-	}
-
 	setDB(db)
 	return
-}
-
-/*
- * Performs bulk insert of credentials
- */
-func insertCredentials(rows []common.Row, txn *sql.Tx) bool {
-
-	var scope, id, appId, consumerSecret, appstatus, status, tenantId string
-	var issuedAt int64
-
-	prep, err := txn.Prepare("INSERT INTO APP_CREDENTIAL (_change_selector, id, app_id, consumer_secret, app_status, status, issued_at, tenant_id)VALUES($1,$2,$3,$4,$5,$6,$7,$8);")
-	if err != nil {
-		log.Error("INSERT Cred Failed: ", err)
-		return false
-	}
-	defer prep.Close()
-	for _, ele := range rows {
-		ele.Get("_change_selector", &scope)
-		ele.Get("id", &id)
-		ele.Get("app_id", &appId)
-		ele.Get("consumer_secret", &consumerSecret)
-		ele.Get("app_status", &appstatus)
-		ele.Get("status", &status)
-		ele.Get("issued_at", &issuedAt)
-		ele.Get("tenant_id", &tenantId)
-
-		/* Mandatory params check */
-		if id == "" || scope == "" || tenantId == "" {
-			log.Error("INSERT APP_CREDENTIAL: i/p args missing")
-			return false
-		}
-		_, err = prep.Exec(
-			scope,
-			id,
-			appId,
-			consumerSecret,
-			appstatus,
-			status,
-			issuedAt,
-			tenantId)
-
-		if err != nil {
-			log.Error("INSERT CRED Failed: ", id, ", ", scope, ")", err)
-			return false
-		} else {
-			log.Debug("INSERT CRED Success: (", id, ", ", scope, ")")
-		}
-	}
-	return true
-}
-
-/*
- * Performs Bulk insert of Applications
- */
-func insertApplications(rows []common.Row, txn *sql.Tx) bool {
-
-	var scope, EntityIdentifier, DeveloperId, CompanyId, ParentId, CallbackUrl, Status, AppName, AppFamily, tenantId, CreatedBy, LastModifiedBy string
-	var CreatedAt, LastModifiedAt int64
-
-	prep, err := txn.Prepare("INSERT INTO APP (_change_selector, id, developer_id, company_id, parent_id, callback_url,status, name, app_family, created_at, created_by,updated_at, updated_by,tenant_id) VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14);")
-	if err != nil {
-		log.Error("INSERT APP Failed: ", err)
-		return false
-	}
-
-	defer prep.Close()
-	for _, ele := range rows {
-
-		ele.Get("_change_selector", &scope)
-		ele.Get("id", &EntityIdentifier)
-		ele.Get("developer_id", &DeveloperId)
-		ele.Get("company_id", &CompanyId)
-		ele.Get("parent_id", &ParentId)
-		ele.Get("callback_url", &CallbackUrl)
-		ele.Get("status", &Status)
-		ele.Get("name", &AppName)
-		ele.Get("app_family", &AppFamily)
-		ele.Get("created_at", &CreatedAt)
-		ele.Get("created_by", &CreatedBy)
-		ele.Get("updated_at", &LastModifiedAt)
-		ele.Get("updated_by", &LastModifiedBy)
-		ele.Get("tenant_id", &tenantId)
-
-		/* Mandatory params check */
-		if EntityIdentifier == "" || scope == "" || tenantId == "" {
-			log.Error("INSERT APP: i/p args missing")
-			return false
-		}
-		_, err = prep.Exec(
-			scope,
-			EntityIdentifier,
-			DeveloperId,
-			CompanyId,
-			ParentId,
-			CallbackUrl,
-			Status,
-			AppName,
-			AppFamily,
-			CreatedAt,
-			CreatedBy,
-			LastModifiedAt,
-			LastModifiedBy,
-			tenantId)
-
-		if err != nil {
-			log.Error("INSERT APP Failed: (", EntityIdentifier, ", ", tenantId, ")", err)
-			return false
-		} else {
-			log.Debug("INSERT APP Success: (", EntityIdentifier, ", ", tenantId, ")")
-		}
-	}
-	return true
-
-}
-
-/*
- * Performs bulk insert of Developers
- */
-func insertDevelopers(rows []common.Row, txn *sql.Tx) bool {
-
-	var scope, EntityIdentifier, Email, Status, UserName, FirstName, LastName, tenantId, CreatedBy, LastModifiedBy, Username string
-	var CreatedAt, LastModifiedAt int64
-
-	prep, err := txn.Prepare("INSERT INTO DEVELOPER (_change_selector,email,id,tenant_id,status,username,first_name,last_name,created_at,created_by,updated_at,updated_by) VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12);")
-	if err != nil {
-		log.Error("INSERT DEVELOPER Failed: ", err)
-		return false
-	}
-
-	defer prep.Close()
-	for _, ele := range rows {
-
-		ele.Get("_change_selector", &scope)
-		ele.Get("email", &Email)
-		ele.Get("id", &EntityIdentifier)
-		ele.Get("tenant_id", &tenantId)
-		ele.Get("status", &Status)
-		ele.Get("username", &Username)
-		ele.Get("first_name", &FirstName)
-		ele.Get("last_name", &LastName)
-		ele.Get("created_at", &CreatedAt)
-		ele.Get("created_by", &CreatedBy)
-		ele.Get("updated_at", &LastModifiedAt)
-		ele.Get("updated_by", &LastModifiedBy)
-
-		/* Mandatory params check */
-		if EntityIdentifier == "" || scope == "" || tenantId == "" {
-			log.Error("INSERT DEVELOPER: i/p args missing")
-			return false
-		}
-		_, err = prep.Exec(
-			scope,
-			Email,
-			EntityIdentifier,
-			tenantId,
-			Status,
-			UserName,
-			FirstName,
-			LastName,
-			CreatedAt,
-			CreatedBy,
-			LastModifiedAt,
-			LastModifiedBy)
-
-		if err != nil {
-			log.Error("INSERT DEVELOPER Failed: (", EntityIdentifier, ", ", scope, ")", err)
-			return false
-		} else {
-			log.Debug("INSERT DEVELOPER Success: (", EntityIdentifier, ", ", scope, ")")
-		}
-	}
-	return true
-}
-
-/*
- * Performs Bulk insert of Company Developers
- */
-func insertCompanyDevelopers(rows []common.Row, txn *sql.Tx) bool {
-	var scope, CompanyId, DeveloperId, tenantId, CreatedBy, LastModifiedBy string
-	var CreatedAt, LastModifiedAt int64
-
-	prep, err := txn.Prepare("INSERT INTO COMPANY_DEVELOPER (_change_selector,company_id,tenant_id,developer_id,created_at,created_by,updated_at,updated_by) VALUES($1,$2,$3,$4,$5,$6,$7,$8);")
-	if err != nil {
-		log.Error("INSERT COMPANY_DEVELOPER Failed: ", err)
-		return false
-	}
-	defer prep.Close()
-	for _, ele := range rows {
-
-		ele.Get("_change_selector", &scope)
-		ele.Get("company_id", &CompanyId)
-		ele.Get("tenant_id", &tenantId)
-		ele.Get("developer_id", &DeveloperId)
-		ele.Get("created_at", &CreatedAt)
-		ele.Get("created_by", &CreatedBy)
-		ele.Get("updated_at", &LastModifiedAt)
-		ele.Get("updated_by", &LastModifiedBy)
-
-		/* Mandatory params check */
-		if scope == "" || tenantId == "" || CompanyId == "" || DeveloperId == "" {
-			log.Error("INSERT COMPANY_DEVELOPER: i/p args missing")
-			return false
-		}
-		_, err = prep.Exec(
-			scope,
-			CompanyId,
-			tenantId,
-			DeveloperId,
-			CreatedAt,
-			CreatedBy,
-			LastModifiedAt,
-			LastModifiedBy)
-
-		if err != nil {
-			log.Error("INSERT COMPANY_DEVELOPER Failed: (", DeveloperId, ", ", CompanyId, ", ", scope, ")", err)
-			return false
-		} else {
-			log.Debug("INSERT COMPANY_DEVELOPER Success: (", DeveloperId, ", ", CompanyId, ", ", scope, ")")
-		}
-	}
-	return true
-}
-
-/*
- * Performs Bulk insert of Companies
- */
-func insertCompanies(rows []common.Row, txn *sql.Tx) bool {
-	var scope, EntityIdentifier, Name, DisplayName, Status, tenantId, CreatedBy, LastModifiedBy string
-	var CreatedAt, LastModifiedAt int64
-
-	prep, err := txn.Prepare("INSERT INTO COMPANY (_change_selector,id,tenant_id,status,name,display_name,created_at,created_by,updated_at,updated_by) VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10);")
-	if err != nil {
-		log.Error("INSERT COMPANY Failed: ", err)
-		return false
-	}
-	defer prep.Close()
-	for _, ele := range rows {
-
-		ele.Get("_change_selector", &scope)
-		ele.Get("id", &EntityIdentifier)
-		ele.Get("tenant_id", &tenantId)
-		ele.Get("status", &Status)
-		ele.Get("name", &Name)
-		ele.Get("display_name", &DisplayName)
-		ele.Get("created_at", &CreatedAt)
-		ele.Get("created_by", &CreatedBy)
-		ele.Get("updated_at", &LastModifiedAt)
-		ele.Get("updated_by", &LastModifiedBy)
-
-		/* Mandatory params check */
-		if EntityIdentifier == "" || scope == "" || tenantId == "" {
-			log.Error("INSERT COMPANY: i/p args missing")
-			return false
-		}
-		_, err = prep.Exec(
-			scope,
-			EntityIdentifier,
-			tenantId,
-			Status,
-			Name,
-			DisplayName,
-			CreatedAt,
-			CreatedBy,
-			LastModifiedAt,
-			LastModifiedBy)
-
-		if err != nil {
-			log.Error("INSERT COMPANY Failed: (", EntityIdentifier, ", ", scope, ")", err)
-			return false
-		} else {
-			log.Debug("INSERT COMPANY Success: (", EntityIdentifier, ", ", scope, ")")
-		}
-	}
-	return true
-}
-
-/*
- * Performs Bulk insert of API products
- */
-func insertAPIproducts(rows []common.Row, txn *sql.Tx) bool {
-
-	var scope, apiProduct, res, env, tenantId string
-
-	prep, err := txn.Prepare("INSERT INTO API_PRODUCT (id, api_resources, environments, tenant_id,_change_selector) VALUES($1,$2,$3,$4,$5)")
-	if err != nil {
-		log.Error("INSERT API_PRODUCT Failed: ", err)
-		return false
-	}
-
-	defer prep.Close()
-	for _, ele := range rows {
-
-		ele.Get("_change_selector", &scope)
-		ele.Get("id", &apiProduct)
-		ele.Get("api_resources", &res)
-		ele.Get("environments", &env)
-		ele.Get("tenant_id", &tenantId)
-
-		/* Mandatory params check */
-		if apiProduct == "" || scope == "" || tenantId == "" {
-			log.Error("INSERT API_PRODUCT: i/p args missing")
-			return false
-		}
-		_, err = prep.Exec(
-			apiProduct,
-			res,
-			env,
-			tenantId,
-			scope)
-
-		if err != nil {
-			log.Error("INSERT API_PRODUCT Failed: (", apiProduct, ", ", tenantId, ")", err)
-			return false
-		} else {
-			log.Debug("INSERT API_PRODUCT Success: (", apiProduct, ", ", tenantId, ")")
-		}
-	}
-	return true
-}
-
-/*
- * Performs a bulk insert of all APP_CREDENTIAL_APIPRODUCT_MAPPER rows
- */
-func insertAPIProductMappers(rows []common.Row, txn *sql.Tx) bool {
-
-	var ApiProduct, AppId, EntityIdentifier, tenantId, Scope, Status string
-
-	prep, err := txn.Prepare("INSERT INTO APP_CREDENTIAL_APIPRODUCT_MAPPER(apiprdt_id, app_id, appcred_id, tenant_id, _change_selector, status) VALUES($1,$2,$3,$4,$5,$6);")
-	if err != nil {
-		log.Error("INSERT APP_CREDENTIAL_APIPRODUCT_MAPPER Failed: ", err)
-		return false
-	}
-
-	defer prep.Close()
-	for _, ele := range rows {
-
-		ele.Get("apiprdt_id", &ApiProduct)
-		ele.Get("app_id", &AppId)
-		ele.Get("appcred_id", &EntityIdentifier)
-		ele.Get("tenant_id", &tenantId)
-		ele.Get("_change_selector", &Scope)
-		ele.Get("status", &Status)
-
-		/* Mandatory params check */
-		if ApiProduct == "" || AppId == "" || EntityIdentifier == "" || tenantId == "" || Scope == "" {
-			log.Error("INSERT APP_CREDENTIAL_APIPRODUCT_MAPPER : i/p args missing")
-			return false
-		}
-
-		/*
-		 * If the credentials has been successfully inserted, insert the
-		 * mapping entries associated with the credential
-		 */
-
-		_, err = prep.Exec(
-			ApiProduct,
-			AppId,
-			EntityIdentifier,
-			tenantId,
-			Scope,
-			Status)
-
-		if err != nil {
-			log.Error("INSERT APP_CREDENTIAL_APIPRODUCT_MAPPER Failed: (",
-				ApiProduct, ", ",
-				AppId, ", ",
-				EntityIdentifier, ", ",
-				tenantId, ", ",
-				Scope, ", ",
-				Status,
-				")",
-				err)
-
-			return false
-		} else {
-			log.Debug("INSERT APP_CREDENTIAL_APIPRODUCT_MAPPER Success: (",
-				ApiProduct, ", ",
-				AppId, ", ",
-				EntityIdentifier, ", ",
-				tenantId, ", ",
-				Scope, ", ",
-				Status,
-				")")
-		}
-	}
-	return true
-}
-
-func processChange(changes *common.ChangeList) {
-
-	db := getDB()
-
-	txn, err := db.Begin()
-	if err != nil {
-		log.Error("Unable to create transaction")
-		return
-	}
-	defer txn.Rollback()
-
-	var rows []common.Row
-	ok := true
-
-	log.Debugf("apigeeSyncEvent: %d changes", len(changes.Changes))
-	for _, payload := range changes.Changes {
-		rows = nil
-		switch payload.Table {
-		case "kms.developer":
-			switch payload.Operation {
-			case common.Insert:
-				rows = append(rows, payload.NewRow)
-				ok = insertDevelopers(rows, txn)
-
-			case common.Update:
-				ok = deleteObject("DEVELOPER", payload.OldRow, txn)
-				rows = append(rows, payload.NewRow)
-				ok = insertDevelopers(rows, txn)
-
-			case common.Delete:
-				ok = deleteObject("DEVELOPER", payload.OldRow, txn)
-			}
-		case "kms.app":
-			switch payload.Operation {
-			case common.Insert:
-				rows = append(rows, payload.NewRow)
-				ok = insertApplications(rows, txn)
-
-			case common.Update:
-				ok = deleteObject("APP", payload.OldRow, txn)
-				rows = append(rows, payload.NewRow)
-				ok = insertApplications(rows, txn)
-
-			case common.Delete:
-				ok = deleteObject("APP", payload.OldRow, txn)
-			}
-		case "kms.company":
-			switch payload.Operation {
-			case common.Insert:
-				rows = append(rows, payload.NewRow)
-				ok = insertCompanies(rows, txn)
-
-			case common.Update:
-				ok = deleteObject("COMPANY", payload.OldRow, txn)
-				rows = append(rows, payload.NewRow)
-				ok = insertCompanies(rows, txn)
-
-			case common.Delete:
-				ok = deleteObject("COMPANY", payload.OldRow, txn)
-			}
-		case "kms.company_developer":
-			switch payload.Operation {
-			case common.Insert:
-				rows = append(rows, payload.NewRow)
-				ok = insertCompanyDevelopers(rows, txn)
-
-			case common.Update:
-				ok = deleteCompanyDeveloper(payload.OldRow, txn)
-				rows = append(rows, payload.NewRow)
-				ok = insertCompanyDevelopers(rows, txn)
-
-			case common.Delete:
-				ok = deleteCompanyDeveloper(payload.OldRow, txn)
-			}
-		case "kms.app_credential":
-			switch payload.Operation {
-			case common.Insert:
-				rows = append(rows, payload.NewRow)
-				ok = insertCredentials(rows, txn)
-
-			case common.Update:
-				ok = deleteObject("APP_CREDENTIAL", payload.OldRow, txn)
-				rows = append(rows, payload.NewRow)
-				ok = insertCredentials(rows, txn)
-
-			case common.Delete:
-				ok = deleteObject("APP_CREDENTIAL", payload.OldRow, txn)
-			}
-		case "kms.api_product":
-			switch payload.Operation {
-			case common.Insert:
-				rows = append(rows, payload.NewRow)
-				ok = insertAPIproducts(rows, txn)
-
-			case common.Update:
-				ok = deleteObject("API_PRODUCT", payload.OldRow, txn)
-				rows = append(rows, payload.NewRow)
-				ok = insertAPIproducts(rows, txn)
-
-			case common.Delete:
-				ok = deleteObject("API_PRODUCT", payload.OldRow, txn)
-			}
-
-		case "kms.app_credential_apiproduct_mapper":
-			switch payload.Operation {
-			case common.Insert:
-				rows = append(rows, payload.NewRow)
-				ok = insertAPIProductMappers(rows, txn)
-
-			case common.Update:
-				ok = deleteAPIproductMapper(payload.OldRow, txn)
-				rows = append(rows, payload.NewRow)
-				ok = insertAPIProductMappers(rows, txn)
-
-			case common.Delete:
-				ok = deleteAPIproductMapper(payload.OldRow, txn)
-			}
-		}
-		if !ok {
-			log.Error("Sql Operation error. Operation rollbacked")
-			return
-		}
-	}
-	txn.Commit()
-	return
-}
-
-/*
- * DELETE OBJECT as passed in the input
- */
-func deleteObject(object string, ele common.Row, txn *sql.Tx) bool {
-
-	var scope, objid string
-	ssql := "DELETE FROM " + object + " WHERE id = $1 AND _change_selector = $2"
-	prep, err := txn.Prepare(ssql)
-	if err != nil {
-		log.Error("DELETE ", object, " Failed: ", err)
-		return false
-	}
-	defer prep.Close()
-	ele.Get("_change_selector", &scope)
-	ele.Get("id", &objid)
-
-	res, err := prep.Exec(objid, scope)
-	if err == nil {
-		affect, err := res.RowsAffected()
-		if err == nil && affect != 0 {
-			log.Debugf("DELETE %s (%s, %s) success.", object, objid, scope)
-			return true
-		}
-	}
-	log.Errorf("DELETE %s (%s, %s) failed.", object, objid, scope)
-	return false
-
-}
-
-/*
- * DELETE  APIPRDT MAPPER
- */
-func deleteAPIproductMapper(ele common.Row, txn *sql.Tx) bool {
-	var ApiProduct, AppId, EntityIdentifier, apid_scope string
-
-	prep, err := txn.Prepare("DELETE FROM APP_CREDENTIAL_APIPRODUCT_MAPPER WHERE apiprdt_id=$1 AND app_id=$2 AND appcred_id=$3 AND _change_selector=$4;")
-	if err != nil {
-		log.Error("DELETE APP_CREDENTIAL_APIPRODUCT_MAPPER Failed: ", err)
-		return false
-	}
-
-	defer prep.Close()
-
-	ele.Get("apiprdt_id", &ApiProduct)
-	ele.Get("app_id", &AppId)
-	ele.Get("appcred_id", &EntityIdentifier)
-	ele.Get("_change_selector", &apid_scope)
-
-	res, err := prep.Exec(ApiProduct, AppId, EntityIdentifier, apid_scope)
-	if err == nil {
-		affect, err := res.RowsAffected()
-		if err == nil && affect != 0 {
-			log.Debugf("DELETE APP_CREDENTIAL_APIPRODUCT_MAPPER (%s, %s, %s, %s) success.", ApiProduct, AppId, EntityIdentifier, apid_scope)
-			return true
-		}
-	}
-	log.Errorf("DELETE APP_CREDENTIAL_APIPRODUCT_MAPPER (%s, %s, %s, %s) failed.", ApiProduct, AppId, EntityIdentifier, apid_scope, err)
-	return false
-}
-
-func deleteCompanyDeveloper(ele common.Row, txn *sql.Tx) bool {
-	prep, err := txn.Prepare(`
-	DELETE FROM COMPANY_DEVELOPER
-	WHERE tenant_id=$1 AND company_id=$2 AND developer_id=$3`)
-	if err != nil {
-		log.Errorf("DELETE COMPANY_DEVELOPER Failed: %v", err)
-		return false
-	}
-	defer prep.Close()
-
-	var tenantId, companyId, developerId string
-	ele.Get("tenant_id", &tenantId)
-	ele.Get("company_id", &companyId)
-	ele.Get("developer_id", &developerId)
-
-	res, err := prep.Exec(tenantId, companyId, developerId)
-	if err == nil {
-		affect, err := res.RowsAffected()
-		if err == nil && affect != 0 {
-			log.Debugf("DELETE COMPANY_DEVELOPER (%s, %s, %s) success.", tenantId, companyId, developerId)
-			return true
-		}
-	}
-	log.Errorf("DELETE COMPANY_DEVELOPER (%s, %s, %s) failed: %v", tenantId, companyId, developerId, err)
-	return false
-}
+}
\ No newline at end of file
diff --git a/listener_test.go b/listener_test.go
index 195b2b9..1cc33da 100644
--- a/listener_test.go
+++ b/listener_test.go
@@ -1,1154 +1,41 @@
 package apidVerifyApiKey
 
 import (
-	"encoding/json"
-	"fmt"
 	"github.com/30x/apid-core"
 	"github.com/apigee-labs/transicator/common"
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
-	"io/ioutil"
-	"net/http"
-	"net/http/httptest"
-	"net/url"
 )
 
 var _ = Describe("listener", func() {
 
 	Context("KMS create/updates verification via changes for Developer", func() {
-		It("Create KMS tables via changes, and Verify via verifyApiKey", func(done Done) {
-			server := mockKMSserver()
-			var event = common.ChangeList{}
-			closed := 0
-			/* API Product */
-			srvItems := common.Row{
-				"id": {
-					Value: "ch_api_product_2",
-				},
-				"api_resources": {
-					Value: "{}",
-				},
-				"environments": {
-					Value: "{Env_0, Env_1}",
-				},
-				"tenant_id": {
-					Value: "tenant_id_0",
-				},
-				"_change_selector": {
-					Value: "test_org0",
-				},
+
+		handler := handler{}
+
+		It("should set DB to appropriate version", func() {
+
+			saveDb := getDB()
+
+			s := &common.Snapshot{
+				SnapshotInfo: "test_snapshot",
+				Tables:       []common.Table{},
 			}
 
-			/* DEVELOPER */
-			devItems := common.Row{
-				"id": {
-					Value: "ch_developer_id_2",
-				},
-				"status": {
-					Value: "Active",
-				},
-				"tenant_id": {
-					Value: "tenant_id_0",
-				},
-				"_change_selector": {
-					Value: "test_org0",
-				},
-			}
+			handler.Handle(s)
 
-			/* APP */
-			appItems := common.Row{
-				"id": {
-					Value: "ch_application_id_2",
-				},
-				"developer_id": {
-					Value: "ch_developer_id_2",
-				},
-				"status": {
-					Value: "Approved",
-				},
-				"tenant_id": {
-					Value: "tenant_id_0",
-				},
-				"_change_selector": {
-					Value: "test_org0",
-				},
-				"parent_id": {
-					Value: "ch_developer_id_2",
-				},
-			}
+			expectedDB, err := data.DBVersion(s.SnapshotInfo)
+			Expect(err).NotTo(HaveOccurred())
 
-			/* CRED */
-			credItems := common.Row{
-				"id": {
-					Value: "ch_app_credential_2",
-				},
-				"app_id": {
-					Value: "ch_application_id_2",
-				},
-				"tenant_id": {
-					Value: "tenant_id_0",
-				},
-				"status": {
-					Value: "Approved",
-				},
-				"_change_selector": {
-					Value: "test_org0",
-				},
-			}
+			Expect(getDB() == expectedDB).Should(BeTrue())
 
-			/* APP_CRED_APIPRD_MAPPER */
-			mpItems := common.Row{
-				"apiprdt_id": {
-					Value: "ch_api_product_2",
-				},
-				"app_id": {
-					Value: "ch_application_id_2",
-				},
-				"appcred_id": {
-					Value: "ch_app_credential_2",
-				},
-				"status": {
-					Value: "Approved",
-				},
-				"_change_selector": {
-					Value: "test_org0",
-				},
-				"tenant_id": {
-					Value: "tenant_id_0",
-				},
-			}
-
-			event.Changes = []common.Change{
-				{
-					Table:     "kms.api_product",
-					NewRow:    srvItems,
-					Operation: 1,
-				},
-				{
-					Table:     "kms.developer",
-					NewRow:    devItems,
-					Operation: 1,
-				},
-				{
-					Table:     "kms.app",
-					NewRow:    appItems,
-					Operation: 1,
-				},
-				{
-					Table:     "kms.app_credential",
-					NewRow:    credItems,
-					Operation: 1,
-				},
-				{
-					Table:     "kms.app_credential_apiproduct_mapper",
-					NewRow:    mpItems,
-					Operation: 1,
-				},
-			}
-
-			h := &test_handler{
-				"checkDatabase post Insertion",
-				func(e apid.Event) {
-					defer GinkgoRecover()
-
-					// ignore the first event, let standard listener process it
-					changeSet := e.(*common.ChangeList)
-					if len(changeSet.Changes) > 0 || closed == 1 {
-						return
-					}
-
-					rsp, err := http.PostForm(
-						fmt.Sprintf("%s/verifiers/apikey",
-							server.URL),
-						url.Values{"key": {"ch_app_credential_2"},
-							"uriPath":   {"/test"},
-							"scopeuuid": {"XYZ"},
-							"action":    {"verify"}})
-
-					Expect(err).Should(Succeed())
-					defer rsp.Body.Close()
-					body, readErr := ioutil.ReadAll(rsp.Body)
-					Expect(readErr).Should(Succeed())
-					var respj kmsResponseSuccess
-					json.Unmarshal(body, &respj)
-					Expect(respj.Type).Should(Equal("APIKeyContext"))
-					Expect(rsp.StatusCode).To(Equal(http.StatusOK))
-					Expect(respj.RspInfo.Key).Should(Equal("ch_app_credential_2"))
-					Expect(respj.RspInfo.Type).Should(Equal("developer"))
-					dataValue := rsp.Header.Get("Content-Type")
-					Expect(dataValue).To(Equal("application/json"))
-
-					rsp, err = http.PostForm(
-						fmt.Sprintf("%s/verifiers/apikey",
-							server.URL),
-						url.Values{"key": {"ch_app_credential_2"},
-							"uriPath":   {"/test"},
-							"scopeuuid": {"badscope"},
-							"action":    {"verify"}})
-
-					Expect(err).Should(Succeed())
-					defer rsp.Body.Close()
-					body, readErr = ioutil.ReadAll(rsp.Body)
-					Expect(readErr).Should(Succeed())
-					var respe kmsResponseFail
-					json.Unmarshal(body, &respe)
-					Expect(rsp.StatusCode).To(Equal(http.StatusOK))
-					dataValue = rsp.Header.Get("Content-Type")
-					Expect(dataValue).To(Equal("application/json"))
-					Expect(respe.Type).Should(Equal("ErrorResult"))
-					Expect(respe.ErrInfo.ErrorCode).Should(Equal("ENV_VALIDATION_FAILED"))
-
-					closed = 1
-					close(done)
-				},
-			}
-
-			apid.Events().Listen("ApigeeSync", h)
-			apid.Events().Emit("ApigeeSync", &event)
-			apid.Events().Emit("ApigeeSync", &common.ChangeList{})
+			//restore the db to the valid one
+			setDB(saveDb)
 		})
+
 	})
-
-	Context("KMS create/updates verification via changes for Company", func() {
-		It("Create KMS tables via changes, and Verify via verifyApiKey", func(done Done) {
-			server := mockKMSserver()
-			var event = common.ChangeList{}
-			closed := 0
-			/* API Product */
-			srvItems := common.Row{
-				"id": {
-					Value: "ch_api_product_5",
-				},
-				"api_resources": {
-					Value: "{}",
-				},
-				"environments": {
-					Value: "{Env_0, Env_1}",
-				},
-				"tenant_id": {
-					Value: "tenant_id_0",
-				},
-				"_change_selector": {
-					Value: "test_org0",
-				},
-			}
-
-			/* COMPANY */
-			companyItems := common.Row{
-				"id": {
-					Value: "ch_company_id_5",
-				},
-				"status": {
-					Value: "Active",
-				},
-				"tenant_id": {
-					Value: "tenant_id_0",
-				},
-				"_change_selector": {
-					Value: "test_org0",
-				},
-				"name": {
-					Value: "test_company_name0",
-				},
-				"display_name": {
-					Value: "test_company_display_name0",
-				},
-			}
-			/* COMPANY_DEVELOPER */
-			companyDeveloperItems := common.Row{
-				"id": {
-					Value: "ch_developer_id_5",
-				},
-				"tenant_id": {
-					Value: "tenant_id_0",
-				},
-				"_change_selector": {
-					Value: "test_org0",
-				},
-				"company_id": {
-					Value: "ch_company_id_5",
-				},
-				"developer_id": {
-					Value: "ch_developer_id_5",
-				},
-			}
-
-			/* APP */
-			appItems := common.Row{
-				"id": {
-					Value: "ch_application_id_5",
-				},
-				"company_id": {
-					Value: "ch_company_id_5",
-				},
-				"status": {
-					Value: "Approved",
-				},
-				"tenant_id": {
-					Value: "tenant_id_0",
-				},
-				"_change_selector": {
-					Value: "test_org0",
-				},
-				"parent_id": {
-					Value: "ch_company_id_5",
-				},
-			}
-
-			/* CRED */
-			credItems := common.Row{
-				"id": {
-					Value: "ch_app_credential_5",
-				},
-				"app_id": {
-					Value: "ch_application_id_5",
-				},
-				"tenant_id": {
-					Value: "tenant_id_0",
-				},
-				"status": {
-					Value: "Approved",
-				},
-				"_change_selector": {
-					Value: "test_org0",
-				},
-			}
-
-			/* APP_CRED_APIPRD_MAPPER */
-			mpItems := common.Row{
-				"apiprdt_id": {
-					Value: "ch_api_product_5",
-				},
-				"app_id": {
-					Value: "ch_application_id_5",
-				},
-				"appcred_id": {
-					Value: "ch_app_credential_5",
-				},
-				"status": {
-					Value: "Approved",
-				},
-				"_change_selector": {
-					Value: "test_org0",
-				},
-				"tenant_id": {
-					Value: "tenant_id_0",
-				},
-			}
-
-			event.Changes = []common.Change{
-				{
-					Table:     "kms.api_product",
-					NewRow:    srvItems,
-					Operation: 1,
-				},
-
-				{
-					Table:     "kms.app",
-					NewRow:    appItems,
-					Operation: 1,
-				},
-				{
-					Table:     "kms.app_credential",
-					NewRow:    credItems,
-					Operation: 1,
-				},
-				{
-					Table:     "kms.app_credential_apiproduct_mapper",
-					NewRow:    mpItems,
-					Operation: 1,
-				},
-				{
-					Table:     "kms.company",
-					NewRow:    companyItems,
-					Operation: 1,
-				},
-				{
-					Table:     "kms.company_developer",
-					NewRow:    companyDeveloperItems,
-					Operation: 1,
-				},
-			}
-
-			h := &test_handler{
-				"checkDatabase post Insertion",
-				func(e apid.Event) {
-					defer GinkgoRecover()
-
-					// ignore the first event, let standard listener process it
-					changeSet := e.(*common.ChangeList)
-					if len(changeSet.Changes) > 0 || closed == 1 {
-						return
-					}
-
-					rsp, err := http.PostForm(
-						fmt.Sprintf("%s/verifiers/apikey",
-							server.URL),
-						url.Values{"key": {"ch_app_credential_5"},
-							"uriPath":   {"/test"},
-							"scopeuuid": {"XYZ"},
-							"action":    {"verify"}})
-
-					Expect(err).Should(Succeed())
-					defer rsp.Body.Close()
-					body, readErr := ioutil.ReadAll(rsp.Body)
-					Expect(readErr).Should(Succeed())
-					var respj kmsResponseSuccess
-					json.Unmarshal(body, &respj)
-					Expect(rsp.StatusCode).To(Equal(http.StatusOK))
-					Expect(respj.RspInfo.Type).Should(Equal("company"))
-					Expect(respj.Type).Should(Equal("APIKeyContext"))
-					Expect(respj.RspInfo.Key).Should(Equal("ch_app_credential_5"))
-					dataValue := rsp.Header.Get("Content-Type")
-					Expect(dataValue).To(Equal("application/json"))
-
-					rsp, err = http.PostForm(
-						fmt.Sprintf("%s/verifiers/apikey",
-							server.URL),
-						url.Values{"key": {"ch_app_credential_5"},
-							"uriPath":   {"/test"},
-							"scopeuuid": {"badscope"},
-							"action":    {"verify"}})
-
-					Expect(err).Should(Succeed())
-					defer rsp.Body.Close()
-					body, readErr = ioutil.ReadAll(rsp.Body)
-					Expect(readErr).Should(Succeed())
-					var respe kmsResponseFail
-					json.Unmarshal(body, &respe)
-					Expect(rsp.StatusCode).To(Equal(http.StatusOK))
-					dataValue = rsp.Header.Get("Content-Type")
-					Expect(dataValue).To(Equal("application/json"))
-					Expect(respe.Type).Should(Equal("ErrorResult"))
-					Expect(respe.ErrInfo.ErrorCode).Should(Equal("ENV_VALIDATION_FAILED"))
-
-					closed = 1
-					close(done)
-				},
-			}
-
-			apid.Events().Listen("ApigeeSync", h)
-			apid.Events().Emit("ApigeeSync", &event)
-			apid.Events().Emit("ApigeeSync", &common.ChangeList{})
-		})
-	})
-
-	It("Modify tables in KMS tables, and verify via verifyApiKey for Developer", func(done Done) {
-		closed := 0
-		var event = common.ChangeList{}
-		var event2 = common.ChangeList{}
-
-		/* Orig data */
-		/* API Product */
-		srvItemsOld := common.Row{
-			"id": {
-				Value: "ch_api_product_0",
-			},
-			"api_resources": {
-				Value: "{}",
-			},
-			"environments": {
-				Value: "{Env_0, Env_1}",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-		}
-
-		/* DEVELOPER */
-		devItemsOld := common.Row{
-			"id": {
-				Value: "ch_developer_id_0",
-			},
-			"status": {
-				Value: "Active",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-		}
-
-		/* APP */
-		appItemsOld := common.Row{
-			"id": {
-				Value: "ch_application_id_0",
-			},
-			"developer_id": {
-				Value: "ch_developer_id_0",
-			},
-			"status": {
-				Value: "Approved",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-			"parent_id": {
-				Value: "ch_developer_id_0",
-			},
-		}
-
-		/* CRED */
-		credItemsOld := common.Row{
-			"id": {
-				Value: "ch_app_credential_0",
-			},
-			"app_id": {
-				Value: "ch_application_id_0",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"status": {
-				Value: "Approved",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-		}
-
-		/* APP_CRED_APIPRD_MAPPER */
-		mpItemsOld := common.Row{
-			"apiprdt_id": {
-				Value: "ch_api_product_0",
-			},
-			"app_id": {
-				Value: "ch_application_id_0",
-			},
-			"appcred_id": {
-				Value: "ch_app_credential_0",
-			},
-			"status": {
-				Value: "Approved",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-		}
-
-		/* New to be replaced data */
-		/* API PRODUCT */
-		srvItemsNew := common.Row{
-			"id": {
-				Value: "ch_api_product_1",
-			},
-			"api_resources": {
-				Value: "{}",
-			},
-			"environments": {
-				Value: "{Env_0, Env_1}",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-		}
-
-		/* DEVELOPER */
-		devItemsNew := common.Row{
-			"id": {
-				Value: "ch_developer_id_1",
-			},
-			"status": {
-				Value: "Active",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-		}
-
-		/* APP */
-		appItemsNew := common.Row{
-			"id": {
-				Value: "ch_application_id_1",
-			},
-			"developer_id": {
-				Value: "ch_developer_id_1",
-			},
-			"status": {
-				Value: "Approved",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-			"parent_id": {
-				Value: "ch_developer_id_1",
-			},
-		}
-
-		/* CRED */
-		credItemsNew := common.Row{
-			"id": {
-				Value: "ch_app_credential_1",
-			},
-			"app_id": {
-				Value: "ch_application_id_1",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"status": {
-				Value: "Approved",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-		}
-
-		/* APP_CRED_APIPRD_MAPPER */
-		mpItemsNew := common.Row{
-			"apiprdt_id": {
-				Value: "ch_api_product_1",
-			},
-			"app_id": {
-				Value: "ch_application_id_1",
-			},
-			"appcred_id": {
-				Value: "ch_app_credential_1",
-			},
-			"status": {
-				Value: "Approved",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-		}
-
-		event.Changes = []common.Change{
-			{
-				Table:     "kms.api_product",
-				NewRow:    srvItemsOld,
-				Operation: 1,
-			},
-			{
-				Table:     "kms.developer",
-				NewRow:    devItemsOld,
-				Operation: 1,
-			},
-
-			{
-				Table:     "kms.app",
-				NewRow:    appItemsOld,
-				Operation: 1,
-			},
-			{
-				Table:     "kms.app_credential",
-				NewRow:    credItemsOld,
-				Operation: 1,
-			},
-			{
-				Table:     "kms.app_credential_apiproduct_mapper",
-				NewRow:    mpItemsOld,
-				Operation: 1,
-			},
-		}
-
-		event2.Changes = []common.Change{
-			{
-				Table:     "kms.api_product",
-				OldRow:    srvItemsOld,
-				NewRow:    srvItemsNew,
-				Operation: 2,
-			},
-			{
-				Table:     "kms.developer",
-				OldRow:    devItemsOld,
-				NewRow:    devItemsNew,
-				Operation: 2,
-			},
-			{
-				Table:     "kms.app",
-				OldRow:    appItemsOld,
-				NewRow:    appItemsNew,
-				Operation: 2,
-			},
-			{
-				Table:     "kms.app_credential",
-				OldRow:    credItemsOld,
-				NewRow:    credItemsNew,
-				Operation: 2,
-			},
-			{
-				Table:     "kms.app_credential_apiproduct_mapper",
-				OldRow:    mpItemsOld,
-				NewRow:    mpItemsNew,
-				Operation: 2,
-			},
-		}
-
-		h := &test_handler{
-			"checkDatabase post Insertion",
-			func(e apid.Event) {
-				defer GinkgoRecover()
-
-				// ignore the first event, let standard listener process it
-				changeSet := e.(*common.ChangeList)
-				if len(changeSet.Changes) > 0 || closed == 1 {
-					return
-				}
-				v := url.Values{
-					"key":       []string{"ch_app_credential_1"},
-					"uriPath":   []string{"/test"},
-					"scopeuuid": []string{"XYZ"},
-					"action":    []string{"verify"},
-				}
-				rsp, err := verifyAPIKey(v)
-				Expect(err).ShouldNot(HaveOccurred())
-				var respj kmsResponseSuccess
-				json.Unmarshal(rsp, &respj)
-				Expect(respj.Type).Should(Equal("APIKeyContext"))
-				Expect(respj.RspInfo.Key).Should(Equal("ch_app_credential_1"))
-				Expect(respj.RspInfo.Type).Should(Equal("developer"))
-				closed = 1
-				close(done)
-			},
-		}
-
-		apid.Events().Listen("ApigeeSync", h)
-		apid.Events().Emit("ApigeeSync", &event)
-		apid.Events().Emit("ApigeeSync", &event2)
-		apid.Events().Emit("ApigeeSync", &common.ChangeList{})
-	})
-
-	It("Modify tables in KMS tables, and verify via verifyApiKey for Company", func(done Done) {
-		closed := 0
-		var event = common.ChangeList{}
-		var event2 = common.ChangeList{}
-
-		/* Orig data */
-		/* API Product */
-		srvItemsOld := common.Row{
-			"id": {
-				Value: "ch_api_product_0",
-			},
-			"api_resources": {
-				Value: "{}",
-			},
-			"environments": {
-				Value: "{Env_0, Env_1}",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-		}
-
-		/* DEVELOPER */
-		devItemsOld := common.Row{
-			"id": {
-				Value: "ch_developer_id_0",
-			},
-			"status": {
-				Value: "Active",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-		}
-
-		/* APP */
-		appItemsOld := common.Row{
-			"id": {
-				Value: "ch_application_id_0",
-			},
-			"company_id": {
-				Value: "ch_company_id_0",
-			},
-			"status": {
-				Value: "Approved",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-			"parent_id": {
-				Value: "ch_company_id_0",
-			},
-		}
-
-		/* COMPANY */
-		companyItemsOld := common.Row{
-			"id": {
-				Value: "ch_company_id_0",
-			},
-			"status": {
-				Value: "Active",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-			"name": {
-				Value: "test_company_name0",
-			},
-			"display_name": {
-				Value: "test_company_display_name0",
-			},
-		}
-
-		/* COMPANY_DEVELOPER */
-		companyDeveloperItemsOld := common.Row{
-			"id": {
-				Value: "ch_developer_id_0",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-			"company_id": {
-				Value: "ch_company_id_0",
-			},
-			"developer_id": {
-				Value: "ch_developer_id_0",
-			},
-		}
-
-		/* CRED */
-		credItemsOld := common.Row{
-			"id": {
-				Value: "ch_app_credential_0",
-			},
-			"app_id": {
-				Value: "ch_application_id_0",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"status": {
-				Value: "Approved",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-		}
-
-		/* APP_CRED_APIPRD_MAPPER */
-		mpItemsOld := common.Row{
-			"apiprdt_id": {
-				Value: "ch_api_product_0",
-			},
-			"app_id": {
-				Value: "ch_application_id_0",
-			},
-			"appcred_id": {
-				Value: "ch_app_credential_0",
-			},
-			"status": {
-				Value: "Approved",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-		}
-
-		/* New to be replaced data */
-		/* API PRODUCT */
-		srvItemsNew := common.Row{
-			"id": {
-				Value: "ch_api_product_1",
-			},
-			"api_resources": {
-				Value: "{}",
-			},
-			"environments": {
-				Value: "{Env_0, Env_1}",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-		}
-
-		/* DEVELOPER */
-		devItemsNew := common.Row{
-			"id": {
-				Value: "ch_developer_id_1",
-			},
-			"status": {
-				Value: "Active",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-		}
-
-		/* COMPANY */
-		companyItemsNew := common.Row{
-			"id": {
-				Value: "ch_company_id_1",
-			},
-			"status": {
-				Value: "Active",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-			"name": {
-				Value: "test_company_name0",
-			},
-			"display_name": {
-				Value: "test_company_display_name0",
-			},
-		}
-
-		/* COMPANY_DEVELOPER */
-		companyDeveloperItemsNew := common.Row{
-			"id": {
-				Value: "ch_developer_id_1",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-			"company_id": {
-				Value: "ch_company_id_1",
-			},
-			"developer_id": {
-				Value: "ch_developer_id_1",
-			},
-		}
-
-		/* APP */
-		appItemsNew := common.Row{
-			"id": {
-				Value: "ch_application_id_1",
-			},
-			"company_id": {
-				Value: "ch_company_id_1",
-			},
-			"status": {
-				Value: "Approved",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-			"parent_id": {
-				Value: "ch_company_id_1",
-			},
-		}
-
-		/* CRED */
-		credItemsNew := common.Row{
-			"id": {
-				Value: "ch_app_credential_1",
-			},
-			"app_id": {
-				Value: "ch_application_id_1",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-			"status": {
-				Value: "Approved",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-		}
-
-		/* APP_CRED_APIPRD_MAPPER */
-		mpItemsNew := common.Row{
-			"apiprdt_id": {
-				Value: "ch_api_product_1",
-			},
-			"app_id": {
-				Value: "ch_application_id_1",
-			},
-			"appcred_id": {
-				Value: "ch_app_credential_1",
-			},
-			"status": {
-				Value: "Approved",
-			},
-			"_change_selector": {
-				Value: "test_org0",
-			},
-			"tenant_id": {
-				Value: "tenant_id_0",
-			},
-		}
-
-		event.Changes = []common.Change{
-			{
-				Table:     "kms.api_product",
-				NewRow:    srvItemsOld,
-				Operation: 1,
-			},
-			{
-				Table:     "kms.developer",
-				NewRow:    devItemsOld,
-				Operation: 1,
-			},
-			{
-				Table:     "kms.company",
-				NewRow:    companyItemsOld,
-				Operation: 1,
-			},
-			{
-				Table:     "kms.company_developer",
-				NewRow:    companyDeveloperItemsOld,
-				Operation: 1,
-			},
-			{
-				Table:     "kms.app",
-				NewRow:    appItemsOld,
-				Operation: 1,
-			},
-			{
-				Table:     "kms.app_credential",
-				NewRow:    credItemsOld,
-				Operation: 1,
-			},
-			{
-				Table:     "kms.app_credential_apiproduct_mapper",
-				NewRow:    mpItemsOld,
-				Operation: 1,
-			},
-		}
-
-		event2.Changes = []common.Change{
-			{
-				Table:     "kms.api_product",
-				OldRow:    srvItemsOld,
-				NewRow:    srvItemsNew,
-				Operation: 2,
-			},
-			{
-				Table:     "kms.developer",
-				OldRow:    devItemsOld,
-				NewRow:    devItemsNew,
-				Operation: 2,
-			},
-			{
-				Table:     "kms.company",
-				OldRow:    companyItemsOld,
-				NewRow:    companyItemsNew,
-				Operation: 2,
-			},
-			{
-				Table:     "kms.company_developer",
-				OldRow:    companyDeveloperItemsOld,
-				NewRow:    companyDeveloperItemsNew,
-				Operation: 2,
-			},
-			{
-				Table:     "kms.app",
-				OldRow:    appItemsOld,
-				NewRow:    appItemsNew,
-				Operation: 2,
-			},
-			{
-				Table:     "kms.app_credential",
-				OldRow:    credItemsOld,
-				NewRow:    credItemsNew,
-				Operation: 2,
-			},
-			{
-				Table:     "kms.app_credential_apiproduct_mapper",
-				OldRow:    mpItemsOld,
-				NewRow:    mpItemsNew,
-				Operation: 2,
-			},
-		}
-
-		h := &test_handler{
-			"checkDatabase post Insertion",
-			func(e apid.Event) {
-				defer GinkgoRecover()
-
-				// ignore the first event, let standard listener process it
-				changeSet := e.(*common.ChangeList)
-				if len(changeSet.Changes) > 0 || closed == 1 {
-					return
-				}
-				v := url.Values{
-					"key":       []string{"ch_app_credential_1"},
-					"uriPath":   []string{"/test"},
-					"scopeuuid": []string{"XYZ"},
-					"action":    []string{"verify"},
-				}
-				rsp, err := verifyAPIKey(v)
-				Expect(err).ShouldNot(HaveOccurred())
-				var respj kmsResponseSuccess
-				json.Unmarshal(rsp, &respj)
-				Expect(respj.Type).Should(Equal("APIKeyContext"))
-				Expect(respj.RspInfo.Key).Should(Equal("ch_app_credential_1"))
-
-				closed = 1
-				close(done)
-			},
-		}
-
-		apid.Events().Listen("ApigeeSync", h)
-		apid.Events().Emit("ApigeeSync", &event)
-		apid.Events().Emit("ApigeeSync", &event2)
-		apid.Events().Emit("ApigeeSync", &common.ChangeList{})
-	})
-
 })
 
-type test_handler struct {
-	description string
-	f           func(event apid.Event)
-}
-
-func (t *test_handler) String() string {
-	return t.description
-}
-
-func (t *test_handler) Handle(event apid.Event) {
-	t.f(event)
-}
-
 func addScopes(db apid.DB) {
 	txn, _ := db.Begin()
 	txn.Exec("INSERT INTO DATA_SCOPE (id, _change_selector, apid_cluster_id, scope, org, env) "+
@@ -1174,9 +61,3 @@
 	log.Info("Inserted DATA_SCOPE for test")
 	txn.Commit()
 }
-
-func mockKMSserver() *httptest.Server {
-	return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		handleRequest(w, r)
-	}))
-}
diff --git a/sql/init_mock_db.sql b/sql/init_mock_db.sql
new file mode 100644
index 0000000..dc14fda
--- /dev/null
+++ b/sql/init_mock_db.sql
@@ -0,0 +1,246 @@
+PRAGMA foreign_keys=OFF;
+BEGIN TRANSACTION;
+CREATE TABLE _transicator_metadata
+(key varchar primary key,
+value varchar);
+INSERT INTO "_transicator_metadata" VALUES('snapshot','1142790:1142790:');
+CREATE TABLE _transicator_tables
+(tableName varchar not null,
+columnName varchar not null,
+typid integer,
+primaryKey bool);
+INSERT INTO "_transicator_tables" VALUES('kms_bundle_config','id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_bundle_config','data_scope_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_bundle_config','name',25,0);
+INSERT INTO "_transicator_tables" VALUES('kms_bundle_config','uri',25,0);
+INSERT INTO "_transicator_tables" VALUES('kms_bundle_config','checksumtype',25,0);
+INSERT INTO "_transicator_tables" VALUES('kms_bundle_config','checksum',25,0);
+INSERT INTO "_transicator_tables" VALUES('kms_bundle_config','created',1114,0);
+INSERT INTO "_transicator_tables" VALUES('kms_bundle_config','created_by',25,0);
+INSERT INTO "_transicator_tables" VALUES('kms_bundle_config','updated',1114,0);
+INSERT INTO "_transicator_tables" VALUES('kms_bundle_config','updated_by',25,0);
+INSERT INTO "_transicator_tables" VALUES('kms_bundle_config','crc',25,0);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment','id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment','bundle_config_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment','apid_cluster_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment','data_scope_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment','bundle_config_name',25,0);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment','bundle_config_json',25,0);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment','config_json',25,0);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment','created',1114,0);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment','created_by',25,0);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment','updated',1114,0);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment','updated_by',25,0);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment','_change_selector',25,1);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','id',2950,1);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','tenant_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','name',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','display_name',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','description',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','api_resources',1015,0);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','approval_type',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','scopes',1015,0);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','proxies',1015,0);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','environments',1015,0);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','quota',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','quota_time_unit',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','quota_interval',23,0);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','created_at',1114,1);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','created_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','updated_at',1114,1);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','updated_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_api_product','_change_selector',1043,0);
+INSERT INTO "_transicator_tables" VALUES('attributes','tenant_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('attributes','entity_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('attributes','cust_id',2950,0);
+INSERT INTO "_transicator_tables" VALUES('attributes','org_id',2950,0);
+INSERT INTO "_transicator_tables" VALUES('attributes','dev_id',2950,0);
+INSERT INTO "_transicator_tables" VALUES('attributes','comp_id',2950,0);
+INSERT INTO "_transicator_tables" VALUES('attributes','apiprdt_id',2950,0);
+INSERT INTO "_transicator_tables" VALUES('attributes','app_id',2950,0);
+INSERT INTO "_transicator_tables" VALUES('attributes','appcred_id',1043,0);
+INSERT INTO "_transicator_tables" VALUES('attributes','name',1043,1);
+INSERT INTO "_transicator_tables" VALUES('attributes','type',19701,1);
+INSERT INTO "_transicator_tables" VALUES('attributes','value',1043,0);
+INSERT INTO "_transicator_tables" VALUES('attributes','_change_selector',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_company','id',2950,1);
+INSERT INTO "_transicator_tables" VALUES('kms_company','tenant_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_company','name',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_company','display_name',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_company','status',19564,0);
+INSERT INTO "_transicator_tables" VALUES('kms_company','created_at',1114,1);
+INSERT INTO "_transicator_tables" VALUES('kms_company','created_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_company','updated_at',1114,1);
+INSERT INTO "_transicator_tables" VALUES('kms_company','updated_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_company','_change_selector',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_organization','id',2950,1);
+INSERT INTO "_transicator_tables" VALUES('kms_organization','name',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_organization','display_name',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_organization','type',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_organization','tenant_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_organization','customer_id',2950,1);
+INSERT INTO "_transicator_tables" VALUES('kms_organization','description',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_organization','created_at',1114,1);
+INSERT INTO "_transicator_tables" VALUES('kms_organization','created_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_organization','updated_at',1114,1);
+INSERT INTO "_transicator_tables" VALUES('kms_organization','updated_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_organization','_change_selector',1043,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_apid_cluster','id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('edgex_apid_cluster','name',25,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_apid_cluster','description',25,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_apid_cluster','umbrella_org_app_name',25,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_apid_cluster','created',1114,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_apid_cluster','created_by',25,1);
+INSERT INTO "_transicator_tables" VALUES('edgex_apid_cluster','updated',1114,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_apid_cluster','updated_by',25,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_apid_cluster','_change_selector',25,1);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment_history','id',2950,1);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment_history','name',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment_history','ext_ref_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment_history','display_name',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment_history','description',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment_history','created_at',1114,1);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment_history','created_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment_history','updated_at',1114,1);
+INSERT INTO "_transicator_tables" VALUES('kms_deployment_history','updated_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('configuration','id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('configuration','body',25,0);
+INSERT INTO "_transicator_tables" VALUES('configuration','created',1114,0);
+INSERT INTO "_transicator_tables" VALUES('configuration','created_by',25,0);
+INSERT INTO "_transicator_tables" VALUES('configuration','updated',1114,0);
+INSERT INTO "_transicator_tables" VALUES('configuration','updated_by',25,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_data_scope','id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('edgex_data_scope','apid_cluster_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('edgex_data_scope','scope',25,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_data_scope','org',25,1);
+INSERT INTO "_transicator_tables" VALUES('edgex_data_scope','env',25,1);
+INSERT INTO "_transicator_tables" VALUES('edgex_data_scope','created',1114,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_data_scope','created_by',25,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_data_scope','updated',1114,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_data_scope','updated_by',25,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_data_scope','_change_selector',25,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential','id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential','tenant_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential','consumer_secret',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential','app_id',2950,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential','method_type',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential','status',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential','issued_at',1114,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential','expires_at',1114,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential','app_status',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential','scopes',1015,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential','created_at',1114,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential','created_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential','updated_at',1114,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential','updated_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential','_change_selector',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_company_developer','tenant_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_company_developer','company_id',2950,1);
+INSERT INTO "_transicator_tables" VALUES('kms_company_developer','developer_id',2950,1);
+INSERT INTO "_transicator_tables" VALUES('kms_company_developer','roles',1015,0);
+INSERT INTO "_transicator_tables" VALUES('kms_company_developer','created_at',1114,0);
+INSERT INTO "_transicator_tables" VALUES('kms_company_developer','created_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_company_developer','updated_at',1114,0);
+INSERT INTO "_transicator_tables" VALUES('kms_company_developer','updated_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_company_developer','_change_selector',1043,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_deployment_history','id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('edgex_deployment_history','deployment_id',1043,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_deployment_history','action',25,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_deployment_history','bundle_config_id',1043,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_deployment_history','apid_cluster_id',1043,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_deployment_history','data_scope_id',1043,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_deployment_history','bundle_config_json',25,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_deployment_history','config_json',25,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_deployment_history','created',1114,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_deployment_history','created_by',25,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_deployment_history','updated',1114,0);
+INSERT INTO "_transicator_tables" VALUES('edgex_deployment_history','updated_by',25,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app','id',2950,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app','tenant_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app','name',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app','display_name',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app','access_type',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app','callback_url',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app','status',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app','app_family',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app','company_id',2950,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app','developer_id',2950,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app','parent_id',2950,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app','type',19625,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app','created_at',1114,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app','created_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app','updated_at',1114,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app','updated_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app','_change_selector',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential_apiproduct_mapper','tenant_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential_apiproduct_mapper','appcred_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential_apiproduct_mapper','app_id',2950,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential_apiproduct_mapper','apiprdt_id',2950,1);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential_apiproduct_mapper','status',19670,0);
+INSERT INTO "_transicator_tables" VALUES('kms_app_credential_apiproduct_mapper','_change_selector',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_developer','id',2950,1);
+INSERT INTO "_transicator_tables" VALUES('kms_developer','tenant_id',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_developer','username',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_developer','first_name',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_developer','last_name',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_developer','password',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_developer','email',1043,1);
+INSERT INTO "_transicator_tables" VALUES('kms_developer','status',19564,0);
+INSERT INTO "_transicator_tables" VALUES('kms_developer','encrypted_password',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_developer','salt',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_developer','created_at',1114,1);
+INSERT INTO "_transicator_tables" VALUES('kms_developer','created_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_developer','updated_at',1114,1);
+INSERT INTO "_transicator_tables" VALUES('kms_developer','updated_by',1043,0);
+INSERT INTO "_transicator_tables" VALUES('kms_developer','_change_selector',1043,0);
+CREATE TABLE "kms_deployment" (id text,bundle_config_id text,apid_cluster_id text,data_scope_id text,bundle_config_name text,bundle_config_json text,config_json text,created blob,created_by text,updated blob,updated_by text,_change_selector text, primary key (id,bundle_config_id,apid_cluster_id,data_scope_id,_change_selector));
+INSERT INTO "kms_deployment" VALUES('321e443b-9db9-4043-b987-1599e0cdd029','1b6a5e15-4bb8-4c8e-ae3d-63e6efb9ba85','bootstrap','dataScope1','gcp-test-bundle','{"id":"1b6a5e15-4bb8-4c8e-ae3d-63e6efb9ba85","created":"2017-02-27T07:40:57.810Z","createdBy":"fierrom@google.com","updated":"2017-02-27T07:40:57.810Z","updatedBy":"fierrom@google.com","name":"gcp-test-bundle","uri":"https://gist.github.com/mdobson/f9d537c5192a660f692affc294266df2/archive/234c7cbf227d769278bee9b06ace51d6062fe96b.zip","checksumType":"md5","checksum":"06fde116f0270b3734a48653d0cfb495"}','{}','2017-02-27 07:41:33.888+00:00','fierrom@google.com','2017-02-27 07:41:33.888+00:00','fierrom@google.com','bootstrap');
+CREATE TABLE "kms_api_product" (id text,tenant_id text,name text,display_name text,description text,api_resources text,approval_type text,scopes text,proxies text,environments text,quota text,quota_time_unit text,quota_interval integer,created_at blob,created_by text,updated_at blob,updated_by text,_change_selector text, primary key (id,tenant_id,created_at,updated_at));
+INSERT INTO "kms_api_product" VALUES('f5f07319-5104-471c-9df3-64b1842dbe00','43aef41d','test','test','','{/}','AUTO','{""}','{helloworld}','{test}','','',NULL,'2017-02-27 07:32:49.897+00:00','vbhangale@apigee.com','2017-02-27 07:32:49.897+00:00','vbhangale@apigee.com','43aef41d');
+INSERT INTO "kms_api_product" VALUES('87a4bfaa-b3c4-47cd-b6c5-378cdb68610c','43aef41d','GregProduct','Greg''s Product','A product for testing Greg','{/**}','AUTO','{""}','{}','{test}','','',NULL,'2017-03-01 22:50:41.75+00:00','greg@google.com','2017-03-01 22:50:41.75+00:00','greg@google.com','43aef41d');
+CREATE TABLE attributes (tenant_id text,entity_id text,cust_id text,org_id text,dev_id text,comp_id text,apiprdt_id text,app_id text,appcred_id text,name text,type text,value text,_change_selector text, primary key (tenant_id,tenant_id,entity_id,entity_id,name,type,type));
+INSERT INTO "attributes" VALUES('43aef41d','ff0b5496-c674-4531-9443-ace334504f59','','ff0b5496-c674-4531-9443-ace334504f59','','','','','','features.isSmbOrganization','ORGANIZATION','true','43aef41d');
+INSERT INTO "attributes" VALUES('43aef41d','ff0b5496-c674-4531-9443-ace334504f59','','ff0b5496-c674-4531-9443-ace334504f59','','','','','','features.mgmtGroup','ORGANIZATION','management-edgex','43aef41d');
+INSERT INTO "attributes" VALUES('43aef41d','ff0b5496-c674-4531-9443-ace334504f59','','ff0b5496-c674-4531-9443-ace334504f59','','','','','','features.isEdgexEnabled','ORGANIZATION','true','43aef41d');
+INSERT INTO "attributes" VALUES('43aef41d','ff0b5496-c674-4531-9443-ace334504f59','','ff0b5496-c674-4531-9443-ace334504f59','','','','','','features.isCpsEnabled','ORGANIZATION','true','43aef41d');
+INSERT INTO "attributes" VALUES('43aef41d','f5f07319-5104-471c-9df3-64b1842dbe00','','','','','f5f07319-5104-471c-9df3-64b1842dbe00','','','access','APIPRODUCT','internal','43aef41d');
+INSERT INTO "attributes" VALUES('43aef41d','f5f07319-5104-471c-9df3-64b1842dbe00','','','','','f5f07319-5104-471c-9df3-64b1842dbe00','','','test','APIPRODUCT','v1','43aef41d');
+INSERT INTO "attributes" VALUES('43aef41d','8f5c9b86-0783-439c-b8e6-7ab9549e30e8','','','','','','8f5c9b86-0783-439c-b8e6-7ab9549e30e8','','DisplayName','APP','MitchTestApp','43aef41d');
+INSERT INTO "attributes" VALUES('43aef41d','8f5c9b86-0783-439c-b8e6-7ab9549e30e8','','','','','','8f5c9b86-0783-439c-b8e6-7ab9549e30e8','','Notes','APP','','43aef41d');
+INSERT INTO "attributes" VALUES('43aef41d','87c20a31-a504-4ed5-89a5-700adfbb0142','','','','','','87c20a31-a504-4ed5-89a5-700adfbb0142','','DisplayName','APP','MitchTestApp2','43aef41d');
+INSERT INTO "attributes" VALUES('43aef41d','87c20a31-a504-4ed5-89a5-700adfbb0142','','','','','','87c20a31-a504-4ed5-89a5-700adfbb0142','','Notes','APP','','43aef41d');
+INSERT INTO "attributes" VALUES('43aef41d','87a4bfaa-b3c4-47cd-b6c5-378cdb68610c','','','','','87a4bfaa-b3c4-47cd-b6c5-378cdb68610c','','','access','APIPRODUCT','public','43aef41d');
+INSERT INTO "attributes" VALUES('43aef41d','be902c0c-c54b-4a65-85d6-358ff8639586','','','','','','be902c0c-c54b-4a65-85d6-358ff8639586','','DisplayName','APP','Greg''s Test App','43aef41d');
+INSERT INTO "attributes" VALUES('43aef41d','be902c0c-c54b-4a65-85d6-358ff8639586','','','','','','be902c0c-c54b-4a65-85d6-358ff8639586','','Notes','APP','','43aef41d');
+CREATE TABLE "kms_company" (id text,tenant_id text,name text,display_name text,status text,created_at blob,created_by text,updated_at blob,updated_by text,_change_selector text, primary key (id,tenant_id,tenant_id,name,created_at,updated_at));
+CREATE TABLE "kms_organization" (id text,name text,display_name text,type text,tenant_id text,customer_id text,description text,created_at blob,created_by text,updated_at blob,updated_by text,_change_selector text, primary key (id,tenant_id,tenant_id,customer_id,created_at,updated_at));
+INSERT INTO "kms_organization" VALUES('ff0b5496-c674-4531-9443-ace334504f59','edgex_gcp1','edgex_gcp1','paid','43aef41d','307eadd7-c6d7-4ec1-b433-59bcd22cd06d','','2017-02-25 00:17:58.159+00:00','vbhangale@apigee.com','2017-02-25 00:18:14.729+00:00','vbhangale@apigee.com','43aef41d');
+CREATE TABLE "edgex_apid_cluster" (id text,name text,description text,umbrella_org_app_name text,created blob,created_by text,updated blob,updated_by text,_change_selector text, primary key (id,created_by,created_by,created_by,created_by,_change_selector));
+INSERT INTO "edgex_apid_cluster" VALUES('bootstrap','mitch-gcp-cluster','','X-5NF3iDkQLtQt6uPp4ELYhuOkzL5BbSMgf3Gx','2017-02-27 07:39:22.179+00:00','fierrom@google.com','2017-02-27 07:39:22.179+00:00','fierrom@google.com','bootstrap');
+CREATE TABLE "edgex_data_scope" (id text,apid_cluster_id text,scope text,org text,env text,created blob,created_by text,updated blob,updated_by text,_change_selector text, primary key (id,apid_cluster_id,apid_cluster_id,org,env,_change_selector));
+INSERT INTO "edgex_data_scope" VALUES('dataScope1','bootstrap','43aef41d','edgex_gcp1','test','2017-02-27 07:40:25.094+00:00','fierrom@google.com','2017-02-27 07:40:25.094+00:00','fierrom@google.com','bootstrap');
+INSERT INTO "edgex_data_scope" VALUES('dataScope2','bootstrap','43aef41d','edgex_gcp1','test','2017-02-27 07:40:25.094+00:00','fierrom@google.com','2017-02-27 07:40:25.094+00:00','sendtofierro@gmail.com','bootstrap');
+CREATE TABLE "kms_app_credential" (id text,tenant_id text,consumer_secret text,app_id text,method_type text,status text,issued_at blob,expires_at blob,app_status text,scopes text,created_at blob,created_by text,updated_at blob,updated_by text,_change_selector text, primary key (id,tenant_id,app_id,issued_at,expires_at));
+INSERT INTO "kms_app_credential" VALUES('xA9QylNTGQxKGYtHXwvmx8ldDaIJMAEx','43aef41d','lscGO3lfs3zh8iQ','87c20a31-a504-4ed5-89a5-700adfbb0142','','APPROVED','2017-02-27 07:45:22.774+00:00','','','{}','2017-02-27 07:45:22.774+00:00','-NA-','2017-02-27 07:45:22.877+00:00','-NA-','43aef41d');
+INSERT INTO "kms_app_credential" VALUES('ds986MejQqoWRSSeC0UTIPSJ3rtaG2xv','43aef41d','5EBOSSQrLOLO9siN','8f5c9b86-0783-439c-b8e6-7ab9549e30e8','','APPROVED','2017-02-27 07:43:23.263+00:00','','','{}','2017-02-27 07:43:23.263+00:00','-NA-','2017-02-27 07:48:16.717+00:00','-NA-','43aef41d');
+INSERT INTO "kms_app_credential" VALUES('DMh0uQOPA5rbhl4YTnGvBAzGzOGuMH3A','43aef41d','MTfK8xscShhnops','be902c0c-c54b-4a65-85d6-358ff8639586','','APPROVED','2017-03-01 22:52:28.019+00:00','','','{}','2017-03-01 22:52:28.019+00:00','-NA-','2017-03-01 22:52:28.022+00:00','-NA-','43aef41d');
+CREATE TABLE "kms_company_developer" (tenant_id text,company_id text,developer_id text,roles text,created_at blob,created_by text,updated_at blob,updated_by text,_change_selector text, primary key (tenant_id,company_id,developer_id));
+CREATE TABLE "kms_app" (id text,tenant_id text,name text,display_name text,access_type text,callback_url text,status text,app_family text,company_id text,developer_id text,parent_id text,type text,created_at blob,created_by text,updated_at blob,updated_by text,_change_selector text, primary key (id,tenant_id,tenant_id,name,name,app_family,parent_id,created_at,updated_at));
+INSERT INTO "kms_app" VALUES('87c20a31-a504-4ed5-89a5-700adfbb0142','43aef41d','MitchTestApp2','','','','APPROVED','default','','8a350848-0aba-4dcc-aa60-97903efb42ef','8a350848-0aba-4dcc-aa60-97903efb42ef','DEVELOPER','2017-02-27 07:45:21.586+00:00','fierrom@google.com' ||
+ '','2017-02-27 07:45:21.586+00:00','fierrom@google.com' ||
+  '','43aef41d');
+INSERT INTO "kms_app" VALUES('8f5c9b86-0783-439c-b8e6-7ab9549e30e8','43aef41d','MitchTestApp','','','','APPROVED','default','','8a350848-0aba-4dcc-aa60-97903efb42ef','8a350848-0aba-4dcc-aa60-97903efb42ef','DEVELOPER','2017-02-27 07:43:22.301+00:00','fierrom@google.com' ||
+ '','2017-02-27 07:48:18.964+00:00','fierrom@google.com' ||
+  '','43aef41d');
+INSERT INTO "kms_app" VALUES('be902c0c-c54b-4a65-85d6-358ff8639586','43aef41d','GregTestApp','','','','APPROVED','default','','046974c2-9ae5-4452-a42f-bb6657e6cdbe','046974c2-9ae5-4452-a42f-bb6657e6cdbe','DEVELOPER','2017-03-01 22:52:27.615+00:00','greg@google.com','2017-03-01 22:52:27.615+00:00','greg@google.com','43aef41d');
+CREATE TABLE "kms_app_credential_apiproduct_mapper" (tenant_id text,appcred_id text,app_id text,apiprdt_id text,status text,_change_selector text, primary key (tenant_id,appcred_id,app_id,apiprdt_id));
+INSERT INTO "kms_app_credential_apiproduct_mapper" VALUES('43aef41d','ds986MejQqoWRSSeC0UTIPSJ3rtaG2xv','8f5c9b86-0783-439c-b8e6-7ab9549e30e8','f5f07319-5104-471c-9df3-64b1842dbe00','APPROVED','43aef41d');
+INSERT INTO "kms_app_credential_apiproduct_mapper" VALUES('43aef41d','xA9QylNTGQxKGYtHXwvmx8ldDaIJMAEx','87c20a31-a504-4ed5-89a5-700adfbb0142','f5f07319-5104-471c-9df3-64b1842dbe00','APPROVED','43aef41d');
+INSERT INTO "kms_app_credential_apiproduct_mapper" VALUES('43aef41d','DMh0uQOPA5rbhl4YTnGvBAzGzOGuMH3A','be902c0c-c54b-4a65-85d6-358ff8639586','87a4bfaa-b3c4-47cd-b6c5-378cdb68610c','APPROVED','43aef41d');
+CREATE TABLE "kms_developer" (id text,tenant_id text,username text,first_name text,last_name text,password text,email text,status text,encrypted_password text,salt text,created_at blob,created_by text,updated_at blob,updated_by text,_change_selector text, primary key (id,tenant_id,tenant_id,username,email,created_at,updated_at));
+INSERT INTO "kms_developer" VALUES('8a350848-0aba-4dcc-aa60-97903efb42ef','43aef41d','mitchfierro','Mitch','Fierro','','fierrom@google.com','ACTIVE','','','2017-02-27 07:43:00.281+00:00','fierrom@google.com' ||
+ '','2017-02-27 07:43:00.281+00:00','fierrom@google.com' ||
+  '','43aef41d');
+INSERT INTO "kms_developer" VALUES('6ab21170-6bac-481d-9be1-9fda02bdd1da','43aef41d','adikgcp','gcp','dev','','adikancherla@gcp.com','ACTIVE','','','2017-02-27 23:50:24.426+00:00','akancherla@apigee.com','2017-02-27 23:50:24.426+00:00','akancherla@apigee.com','43aef41d');
+INSERT INTO "kms_developer" VALUES('046974c2-9ae5-4452-a42f-bb6657e6cdbe','43aef41d','gregbrail','Greg','Brail','','gregbrail@google.com','ACTIVE','','','2017-03-01 22:51:40.602+00:00','greg@google.com','2017-03-01 22:51:40.602+00:00','greg@google.com','43aef41d');
+COMMIT;
\ No newline at end of file
diff --git a/test_helper.go b/test_helper.go
index 44a341b..08c5215 100644
--- a/test_helper.go
+++ b/test_helper.go
@@ -1,194 +1,87 @@
 package apidVerifyApiKey
 
 import (
-	"github.com/apigee-labs/transicator/common"
 	"strconv"
+	"database/sql"
 )
 
 func convertSuffix(i int) string {
 	return strconv.FormatInt(int64(i), 10)
 }
 
-func generateTestApiProduct(suffix int) common.Row {
-	return common.Row{
-		"id": {
-			Value: "api_product_" + convertSuffix(suffix),
-		},
-		"api_resources": {
-			Value: "{/**, /test}",
-		},
-		"environments": {
-			Value: "{Env_0, Env_1}",
-		},
-		"tenant_id": {
-			Value: "tenant_id_xxxx",
-		},
-		"_change_selector": {
-			Value: "Org_0",
-		},
+func generateTestApiProduct(suffix int, txn *sql.Tx) {
+
+	s, err := txn.Prepare("INSERT INTO kms_api_product (id, api_resources, environments, tenant_id, _change_selector) VALUES(?, ?, ?, ?, ?)")
+	if err != nil {
+		log.Panicf("WHAT THE FUCK: " + err.Error())
 	}
+	s.Exec("api_product_" + convertSuffix(suffix), "{/**, /test}", "{Env_0, Env_1}",
+		"tenant_id_xxxx", "Org_0")
 }
 
-func generateTestDeveloper(suffix int) common.Row {
-	return common.Row{
-		"id": {
-			Value: "developer_id_" + convertSuffix(suffix),
-		},
-		"status": {
-			Value: "Active",
-		},
-		"email": {
-			Value: "test@apigee.com",
-		},
-		"first_name": {
-			Value: "Apigee",
-		},
-		"last_name": {
-			Value: "Google",
-		},
-		"tenant_id": {
-			Value: "tenant_id_xxxx",
-		},
-		"_change_selector": {
-			Value: "Org_0",
-		},
+func generateTestDeveloper(suffix int, txn *sql.Tx) {
+	s, err := txn.Prepare("INSERT INTO kms_developer (id, status, email, first_name, last_name, tenant_id, _change_selector)" +
+		"VALUES (?, ?, ?, ?, ?, ?, ?)")
+	if err != nil {
+		log.Panicf("This is a bug : " + err.Error())
 	}
+	s.Exec("developer_id_" + convertSuffix(suffix), "Active", "test@apigee.com", "Apigee", "Google", "tenant_id_xxxx", "Org_0")
 }
 
-func generateTestCompany(suffix int) common.Row {
-	return common.Row{
-		"id": {
-			Value: "company_id_" + convertSuffix(suffix),
-		},
-		"status": {
-			Value: "Active",
-		},
-		"name": {
-			Value: "Apigee Corporation",
-		},
-		"display_name": {
-			Value: "Apigee",
-		},
-		"tenant_id": {
-			Value: "tenant_id_xxxx",
-		},
-		"_change_selector": {
-			Value: "Org_0",
-		},
+func generateTestCompany(suffix int, txn *sql.Tx) {
+	s, err := txn.Prepare("INSERT INTO kms_company (id, status, name, display_name, tenant_id, _change_selector)" +
+		"VALUES (?, ?, ?, ?, ?, ?)")
+	if err != nil {
+		log.Panicf("This is a bug: " + err.Error())
 	}
+	s.Exec("company_id_" + convertSuffix(suffix), "Active", "Apigee Corporation", "Apigee", "tenant_id_xxxx", "Org_0")
 }
 
-func generateTestCompanyDeveloper(suffix int) common.Row {
-	return common.Row{
-		"developer_id": {
-			Value: "developer_id_" + convertSuffix(suffix),
-		},
-		"tenant_id": {
-			Value: "tenant_id_0",
-		},
-		"_change_selector": {
-			Value: "test_org0",
-		},
-		"company_id": {
-			Value: "company_id_" + convertSuffix(suffix),
-		},
+func generateTestCompanyDeveloper(suffix int, txn *sql.Tx) {
+	s, err := txn.Prepare("INSERT INTO kms_company_developer (developer_id, tenant_id, _change_selector, company_id)" +
+		"VALUES (?, ?, ?, ?)")
+	if err != nil {
+		log.Panicf("This is a bug: " + err.Error())
 	}
+	s.Exec("developer_id_" + convertSuffix(suffix), "tenant_id_0", "test_org0", "company_id_" + convertSuffix(suffix))
 }
 
-func generateTestApp(suffix1, suffix2 int) common.Row {
-	return common.Row{
-		"id": {
-			Value: "application_id_" + convertSuffix(suffix1),
-		},
-		"developer_id": {
-			Value: "developer_id_" + convertSuffix(suffix2),
-		},
-		"status": {
-			Value: "Approved",
-		},
-		"tenant_id": {
-			Value: "tenant_id_xxxx",
-		},
-		"callback_url": {
-			Value: "http://apigee.com",
-		},
-		"_change_selector": {
-			Value: "Org_0",
-		},
-		"parent_id": {
-			Value: "developer_id_" + convertSuffix(suffix2),
-		},
+func generateTestApp(suffix1, suffix2 int, txn *sql.Tx) {
+	s, err := txn.Prepare("INSERT INTO kms_app (id, developer_id, status, tenant_id, callback_url, _change_selector, parent_id)" +
+		" VALUES(?, ?, ?, ?, ?, ?, ?)")
+	if err != nil {
+		log.Panicf("This is a bug: " + err.Error())
 	}
+	s.Exec("application_id_" + convertSuffix(suffix1), "developer_id_" + convertSuffix(suffix2), "Approved", "tenant_id_xxxx",
+		"http://apigee.com", "Org_0", "developer_id_" + convertSuffix(suffix2))
+
 }
 
-func generateTestAppCompany(suffix1, suffix2 int) common.Row {
-	return common.Row{
-		"id": {
-			Value: "application_id_" + convertSuffix(suffix1),
-		},
-		"company_id": {
-			Value: "company_id_" + convertSuffix(suffix2),
-		},
-		"status": {
-			Value: "Approved",
-		},
-		"tenant_id": {
-			Value: "tenant_id_xxxx",
-		},
-		"callback_url": {
-			Value: "http://apigee.com",
-		},
-		"_change_selector": {
-			Value: "Org_0",
-		},
-		"parent_id": {
-			Value: "company_id_" + convertSuffix(suffix2),
-		},
+func generateTestAppCompany(suffix1, suffix2 int, txn *sql.Tx) {
+	s, err := txn.Prepare("INSERT INTO kms_app (id, company_id, status, tenant_id, callback_url, _change_selector, parent_id)" +
+		" VALUES(?, ?, ?, ?, ?, ?, ?)")
+	if err != nil {
+		log.Panicf("This is a bug: " + err.Error())
 	}
+	s.Exec("application_id_" + convertSuffix(suffix1), "company_id_" + convertSuffix(suffix2), "Approved", "tenant_id_xxxx",
+		"http://apigee.com", "Org_0", "company_id_" + convertSuffix(suffix2))
+
 }
 
-func generateTestAppCreds(suffix int) common.Row {
-	return common.Row{
-		"id": {
-			Value: "app_credential_" + convertSuffix(suffix),
-		},
-		"app_id": {
-			Value: "application_id_" + convertSuffix(suffix),
-		},
-		"status": {
-			Value: "Approved",
-		},
-		"tenant_id": {
-			Value: "tenant_id_xxxx",
-		},
-		"callback_url": {
-			Value: "http://apigee.com",
-		},
-		"_change_selector": {
-			Value: "Org_0",
-		},
+func generateTestAppCreds(suffix int, txn *sql.Tx) {
+	s, err := txn.Prepare("INSERT INTO kms_app_credential (id, app_id, status, tenant_id, _change_selector) VALUES(?, ?, ?, ?, ?)")
+	if err != nil {
+		log.Panicf("This is a bug: " + err.Error())
 	}
+	s.Exec("app_credential_" + convertSuffix(suffix), "application_id_" + convertSuffix(suffix), "Approved",
+		"tenant_id_xxxx", "Org_0")
 }
 
-func generateTestApiProductMapper(suffix int) common.Row {
-	return common.Row{
-		"apiprdt_id": {
-			Value: "api_product_" + convertSuffix(suffix),
-		},
-		"status": {
-			Value: "Approved",
-		},
-		"app_id": {
-			Value: "application_id_" + convertSuffix(suffix),
-		},
-		"appcred_id": {
-			Value: "app_credential_" + convertSuffix(suffix),
-		},
-		"tenant_id": {
-			Value: "tenant_id_xxxx",
-		},
-		"_change_selector": {
-			Value: "Org_0",
-		},
+func generateTestApiProductMapper(suffix int, txn *sql.Tx) {
+	s, err := txn.Prepare("INSERT INTO kms_app_credential_apiproduct_mapper (apiprdt_id, status, app_id, appcred_id, tenant_id, _change_selector) VALUES(?, ?, ?, ?, ?, ?)")
+	if err != nil {
+		log.Panicf("This is a bug: " + err.Error())
 	}
-}
+	s.Exec("api_product_" + convertSuffix(suffix), "Approved", "application_id_" + convertSuffix(suffix),
+		"app_credential_" + convertSuffix(suffix), "tenant_id_xxxx", "Org_0")
+}
\ No newline at end of file
diff --git a/verifyAPIKey_suite_test.go b/verifyAPIKey_suite_test.go
index e9dd358..2a044e1 100644
--- a/verifyAPIKey_suite_test.go
+++ b/verifyAPIKey_suite_test.go
@@ -42,6 +42,8 @@
 			handleRequest(w, req)
 		}
 	}))
+
+	createTestData(db)
 })
 
 var _ = AfterSuite(func() {
@@ -56,3 +58,71 @@
 	RegisterFailHandler(Fail)
 	RunSpecs(t, "VerifyAPIKey Suite")
 }
+
+func createTestData(db apid.DB) {
+	txn, err := db.Begin()
+	Expect(err).ShouldNot(HaveOccurred())
+	// api products
+	for i := 0; i < 10; i++ {
+		generateTestApiProduct(i, txn)
+	}
+	// developers
+	for i := 0; i < 10; i++ {
+		generateTestDeveloper(i, txn)
+	}
+
+	// application
+	var j, k int
+	for i := 0; i < 10; i++ {
+		for j = k; j < 10 + k; j++ {
+			generateTestApp(j, i, txn)
+		}
+		k = j
+	}
+	// app credentials
+	for i := 0; i < 10; i++ {
+		generateTestAppCreds(i, txn)
+	}
+	// api product mapper
+	for i := 0; i < 10; i++ {
+		generateTestApiProductMapper(i, txn)
+	}
+
+	// Following are data for company
+	// api products
+	for i := 100; i < 110; i++ {
+		generateTestApiProduct(i, txn)
+	}
+
+	// companies
+	for i := 100; i < 110; i++ {
+		generateTestCompany(i, txn)
+	}
+
+	// company developers
+	for i := 100; i < 110; i++ {
+		generateTestCompanyDeveloper(i, txn)
+	}
+
+	// application
+	k = 100
+	for i := 100; i < 110; i++ {
+		for j = k; j < 100 + k; j++ {
+			generateTestAppCompany(j, i, txn)
+		}
+		k = j
+	}
+	// app credentials
+	for i := 100; i < 110; i++ {
+		generateTestAppCreds(i, txn)
+	}
+	// api product mapper
+	for i := 100; i < 110; i++ {
+		generateTestApiProductMapper(i, txn)
+	}
+
+	txn.Commit()
+	var count int64
+	db.QueryRow("select count(*) from data_scope").Scan(&count)
+	log.Info("Found ", count)
+}
