db.Prepare -> txn.Prepare to avoid needing extra transaction
diff --git a/listener.go b/listener.go
index 2aafd5b..9908f8d 100644
--- a/listener.go
+++ b/listener.go
@@ -29,11 +29,11 @@
 
 	snapData, ok := e.(*common.Snapshot)
 	if ok {
-		res = processSnapshot(snapData, db, txn)
+		res = processSnapshot(snapData, txn)
 	} else {
 		changeSet, ok := e.(*common.ChangeList)
 		if ok {
-			res = processChange(changeSet, db, txn)
+			res = processChange(changeSet, txn)
 		} else {
 			log.Errorf("Received Invalid event. This shouldn't happen!")
 		}
@@ -46,7 +46,7 @@
 	return
 }
 
-func processSnapshot(snapshot *common.Snapshot, db *sql.DB, txn *sql.Tx) bool {
+func processSnapshot(snapshot *common.Snapshot, txn *sql.Tx) bool {
 
 	res := true
 	log.Debugf("Process Snapshot data")
@@ -57,15 +57,15 @@
 	for _, payload := range snapshot.Tables {
 		switch payload.Name {
 		case "kms.developer":
-			res = insertDevelopers(payload.Rows, db, txn)
+			res = insertDevelopers(payload.Rows, txn)
 		case "kms.app":
-			res = insertApplications(payload.Rows, db, txn)
+			res = insertApplications(payload.Rows, txn)
 		case "kms.app_credential":
-			res = insertCredentials(payload.Rows, db, txn)
+			res = insertCredentials(payload.Rows, txn)
 		case "kms.api_product":
-			res = insertAPIproducts(payload.Rows, db, txn)
+			res = insertAPIproducts(payload.Rows, txn)
 		case "kms.app_credential_apiproduct_mapper":
-			res = insertAPIProductMappers(payload.Rows, db, txn)
+			res = insertAPIProductMappers(payload.Rows, txn)
 		}
 		if res == false {
 			log.Error("Error encountered in Downloading Snapshot for VerifyApiKey")
@@ -79,12 +79,12 @@
 /*
  * Performs bulk insert of credentials
  */
-func insertCredentials(rows []common.Row, db *sql.DB, txn *sql.Tx) bool {
+func insertCredentials(rows []common.Row, txn *sql.Tx) bool {
 
 	var scope, id, appId, consumerSecret, appstatus, status, tenantId string
 	var issuedAt int64
 
-	prep, err := db.Prepare("INSERT INTO APP_CREDENTIAL (_apid_scope, id, app_id, consumer_secret, app_status, status, issued_at, tenant_id)VALUES($1,$2,$3,$4,$5,$6,$7,$8);")
+	prep, err := txn.Prepare("INSERT INTO APP_CREDENTIAL (_apid_scope, 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
@@ -122,12 +122,12 @@
 /*
  * Performs Bulk insert of Applications
  */
-func insertApplications(rows []common.Row, db *sql.DB, txn *sql.Tx) bool {
+func insertApplications(rows []common.Row, txn *sql.Tx) bool {
 
 	var scope, EntityIdentifier, DeveloperId, CallbackUrl, Status, AppName, AppFamily, tenantId, CreatedBy, LastModifiedBy string
 	var CreatedAt, LastModifiedAt int64
 
-	prep, err := db.Prepare("INSERT INTO APP (_apid_scope, id, developer_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);")
+	prep, err := txn.Prepare("INSERT INTO APP (_apid_scope, id, developer_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);")
 	if err != nil {
 		log.Error("INSERT APP Failed: ", err)
 		return false
@@ -177,12 +177,12 @@
 /*
  * Performs bulk insert of Developers
  */
-func insertDevelopers(rows []common.Row, db *sql.DB, txn *sql.Tx) bool {
+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 := db.Prepare("INSERT INTO DEVELOPER (_apid_scope,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);")
+	prep, err := txn.Prepare("INSERT INTO DEVELOPER (_apid_scope,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
@@ -231,11 +231,11 @@
 /*
  * Performs Bulk insert of API products
  */
-func insertAPIproducts(rows []common.Row, db *sql.DB, txn *sql.Tx) bool {
+func insertAPIproducts(rows []common.Row, txn *sql.Tx) bool {
 
 	var scope, apiProduct, res, env, tenantId string
 
-	prep, err := db.Prepare("INSERT INTO API_PRODUCT (id, api_resources, environments, tenant_id,_apid_scope) VALUES($1,$2,$3,$4,$5)")
+	prep, err := txn.Prepare("INSERT INTO API_PRODUCT (id, api_resources, environments, tenant_id,_apid_scope) VALUES($1,$2,$3,$4,$5)")
 	if err != nil {
 		log.Error("INSERT API_PRODUCT Failed: ", err)
 		return false
@@ -270,11 +270,11 @@
 /*
  * Performs a bulk insert of all APP_CREDENTIAL_APIPRODUCT_MAPPER rows
  */
-func insertAPIProductMappers(rows []common.Row, db *sql.DB, txn *sql.Tx) bool {
+func insertAPIProductMappers(rows []common.Row, txn *sql.Tx) bool {
 
 	var ApiProduct, AppId, EntityIdentifier, tenantId, Scope, Status string
 
-	prep, err := db.Prepare("INSERT INTO APP_CREDENTIAL_APIPRODUCT_MAPPER(apiprdt_id, app_id, appcred_id, tenant_id, _apid_scope, status) VALUES($1,$2,$3,$4,$5,$6);")
+	prep, err := txn.Prepare("INSERT INTO APP_CREDENTIAL_APIPRODUCT_MAPPER(apiprdt_id, app_id, appcred_id, tenant_id, _apid_scope, status) VALUES($1,$2,$3,$4,$5,$6);")
 	if err != nil {
 		log.Error("INSERT APP_CREDENTIAL_APIPRODUCT_MAPPER Failed: ", err)
 		return false
@@ -329,7 +329,7 @@
 	return true
 }
 
-func processChange(changes *common.ChangeList, db *sql.DB, txn *sql.Tx) bool {
+func processChange(changes *common.ChangeList, txn *sql.Tx) bool {
 
 	var rows []common.Row
 	res := true
@@ -342,73 +342,73 @@
 			switch payload.Operation {
 			case common.Insert:
 				rows = append(rows, payload.NewRow)
-				res = insertDevelopers(rows, db, txn)
+				res = insertDevelopers(rows, txn)
 
 			case common.Update:
-				res = deleteObject("DEVELOPER", payload.OldRow, db, txn)
+				res = deleteObject("DEVELOPER", payload.OldRow, txn)
 				rows = append(rows, payload.NewRow)
-				res = insertDevelopers(rows, db, txn)
+				res = insertDevelopers(rows, txn)
 
 			case common.Delete:
-				res = deleteObject("DEVELOPER", payload.OldRow, db, txn)
+				res = deleteObject("DEVELOPER", payload.OldRow, txn)
 			}
 		case "kms.app":
 			switch payload.Operation {
 			case common.Insert:
 				rows = append(rows, payload.NewRow)
-				res = insertApplications(rows, db, txn)
+				res = insertApplications(rows, txn)
 
 			case common.Update:
-				res = deleteObject("APP", payload.OldRow, db, txn)
+				res = deleteObject("APP", payload.OldRow, txn)
 				rows = append(rows, payload.NewRow)
-				res = insertApplications(rows, db, txn)
+				res = insertApplications(rows, txn)
 
 			case common.Delete:
-				res = deleteObject("APP", payload.OldRow, db, txn)
+				res = deleteObject("APP", payload.OldRow, txn)
 			}
 
 		case "kms.app_credential":
 			switch payload.Operation {
 			case common.Insert:
 				rows = append(rows, payload.NewRow)
-				res = insertCredentials(rows, db, txn)
+				res = insertCredentials(rows, txn)
 
 			case common.Update:
-				res = deleteObject("APP_CREDENTIAL", payload.OldRow, db, txn)
+				res = deleteObject("APP_CREDENTIAL", payload.OldRow, txn)
 				rows = append(rows, payload.NewRow)
-				res = insertCredentials(rows, db, txn)
+				res = insertCredentials(rows, txn)
 
 			case common.Delete:
-				res = deleteObject("APP_CREDENTIAL", payload.OldRow, db, txn)
+				res = deleteObject("APP_CREDENTIAL", payload.OldRow, txn)
 			}
 		case "kms.api_product":
 			switch payload.Operation {
 			case common.Insert:
 				rows = append(rows, payload.NewRow)
-				res = insertAPIproducts(rows, db, txn)
+				res = insertAPIproducts(rows, txn)
 
 			case common.Update:
-				res = deleteObject("API_PRODUCT", payload.OldRow, db, txn)
+				res = deleteObject("API_PRODUCT", payload.OldRow, txn)
 				rows = append(rows, payload.NewRow)
-				res = insertAPIproducts(rows, db, txn)
+				res = insertAPIproducts(rows, txn)
 
 			case common.Delete:
-				res = deleteObject("API_PRODUCT", payload.OldRow, db, txn)
+				res = deleteObject("API_PRODUCT", payload.OldRow, txn)
 			}
 
 		case "kms.app_credential_apiproduct_mapper":
 			switch payload.Operation {
 			case common.Insert:
 				rows = append(rows, payload.NewRow)
-				res = insertAPIProductMappers(rows, db, txn)
+				res = insertAPIProductMappers(rows, txn)
 
 			case common.Update:
-				res = deleteAPIproductMapper(payload.OldRow, db, txn)
+				res = deleteAPIproductMapper(payload.OldRow, txn)
 				rows = append(rows, payload.NewRow)
-				res = insertAPIProductMappers(rows, db, txn)
+				res = insertAPIProductMappers(rows, txn)
 
 			case common.Delete:
-				res = deleteAPIproductMapper(payload.OldRow, db, txn)
+				res = deleteAPIproductMapper(payload.OldRow, txn)
 			}
 		}
 		if res == false {
@@ -422,11 +422,11 @@
 /*
  * DELETE OBJECT as passed in the input
  */
-func deleteObject(object string, ele common.Row, db *sql.DB, txn *sql.Tx) bool {
+func deleteObject(object string, ele common.Row, txn *sql.Tx) bool {
 
 	var scope, apiProduct string
 	ssql := "DELETE FROM " + object + " WHERE id = $1 AND _apid_scope = $2"
-	prep, err := db.Prepare(ssql)
+	prep, err := txn.Prepare(ssql)
 	if err != nil {
 		log.Error("DELETE ", object, " Failed: ", err)
 		return false
@@ -449,10 +449,10 @@
 /*
  * DELETE  APIPRDT MAPPER
  */
-func deleteAPIproductMapper(ele common.Row, db *sql.DB, txn *sql.Tx) bool {
+func deleteAPIproductMapper(ele common.Row, txn *sql.Tx) bool {
 	var ApiProduct, AppId, EntityIdentifier, apid_scope string
 
-	prep, err := db.Prepare("DELETE FROM APP_CREDENTIAL_APIPRODUCT_MAPPER WHERE apiprdt_id=$1 AND app_id=$2 AND appcred_id=$3 AND _apid_scope=$4;")
+	prep, err := txn.Prepare("DELETE FROM APP_CREDENTIAL_APIPRODUCT_MAPPER WHERE apiprdt_id=$1 AND app_id=$2 AND appcred_id=$3 AND _apid_scope=$4;")
 	if err != nil {
 		log.Error("DELETE APP_CREDENTIAL_APIPRODUCT_MAPPER Failed: ", err)
 		return false