Code refactor.
diff --git a/listener.go b/listener.go
index 6a9c8ec..a557a25 100644
--- a/listener.go
+++ b/listener.go
@@ -17,68 +17,86 @@
 
 func (h *handler) Handle(e apid.Event) {
 
-	snapData, ok := e.(*common.Snapshot)
-	if ok {
-		processSnapshot(snapData)
-	} else {
-		changeSet, ok := e.(*common.ChangeList)
-		if ok {
-			processChange(changeSet)
-		} else {
-			log.Errorf("Received Invalid event. This shouldn't happen!")
-		}
-	}
-	return
-}
-
-func processSnapshot(snapshot *common.Snapshot) {
-
-	log.Debugf("Process Snapshot data")
+	res := true
 
 	db, err := data.DB()
 	if err != nil {
 		panic("Unable to access Sqlite DB")
 	}
+	txn, err := db.Begin()
+	if err != nil {
+		log.Error("Unable to create Sqlite transaction")
+		return
+	}
+
+	snapData, ok := e.(*common.Snapshot)
+	if ok {
+		res = processSnapshot(snapData, db, txn)
+	} else {
+		changeSet, ok := e.(*common.ChangeList)
+		if ok {
+			res = processChange(changeSet, db, txn)
+		} else {
+			log.Fatal("Received Invalid event. This shouldn't happen!")
+		}
+	}
+	if res == true {
+		txn.Commit()
+	} else {
+		txn.Rollback()
+	}
+	return
+}
+
+func processSnapshot(snapshot *common.Snapshot, db *sql.DB, txn *sql.Tx) bool {
+
+	log.Debugf("Process Snapshot data")
+	res := true
 
 	for _, payload := range snapshot.Tables {
 
 		switch payload.Name {
 		case "edgex.apid_config":
-			for _, row := range payload.Rows {
-				insertApidConfig(row, db, snapshot.SnapshotInfo)
-			}
+			res = insertApidConfig(payload.Rows, db, txn, snapshot.SnapshotInfo)
 		case "edgex.apid_config_scope":
-			insertApidConfigScopes(payload.Rows, db)
+			res = insertApidConfigScopes(payload.Rows, db, txn)
+		}
+		if res == false {
+			log.Error("Error encountered in Downloading Snapshot for ApidApigeeSync")
+			return res
 		}
 	}
+	return res
 }
 
-func processChange(changes *common.ChangeList) {
+func processChange(changes *common.ChangeList, db *sql.DB, txn *sql.Tx) bool {
 
 	log.Debugf("apigeeSyncEvent: %d changes", len(changes.Changes))
 	var rows []common.Row
-	db, err := data.DB()
-	if err != nil {
-		panic("Unable to access Sqlite DB")
-	}
+	res := true
 
 	for _, payload := range changes.Changes {
 		rows = nil
 		switch payload.Table {
 		case "edgex.apid_config_scope":
 			switch payload.Operation {
-			case 1:
+			case common.Insert:
 				rows = append(rows, payload.NewRow)
-				insertApidConfigScopes(rows, db)
+				res = insertApidConfigScopes(rows, db, txn)
 			}
 		}
+		if res == false {
+			log.Error("Sql Operation error. Operation rollbacked")
+			return res
+		}
 	}
+	return res
 }
 
 /*
  * INSERT INTO APP_CREDENTIAL op
  */
-func insertApidConfig(ele common.Row, db *sql.DB, snapInfo string) bool {
+func insertApidConfig(rows []common.Row, db *sql.DB, txn *sql.Tx, snapInfo string) bool {
 
 	var scope, id, name, orgAppName, createdBy, updatedBy, Description string
 	var updated, created int64
@@ -88,46 +106,44 @@
 		log.Error("INSERT APID_CONFIG Failed: ", err)
 		return false
 	}
+	defer prep.Close()
 
-	txn, err := db.Begin()
+	for _, ele := range rows {
+		ele.Get("id", &id)
+		ele.Get("_apid_scope", &scope)
+		ele.Get("name", &name)
+		ele.Get("umbrella_org_app_name", &orgAppName)
+		ele.Get("created", &created)
+		ele.Get("created_by", &createdBy)
+		ele.Get("updated", &updated)
+		ele.Get("updated_by", &updatedBy)
+		ele.Get("description", &Description)
 
-	ele.Get("id", &id)
-	ele.Get("_apid_scope", &scope)
-	ele.Get("name", &name)
-	ele.Get("umbrella_org_app_name", &orgAppName)
-	ele.Get("created", &created)
-	ele.Get("created_by", &createdBy)
-	ele.Get("updated", &updated)
-	ele.Get("updated_by", &updatedBy)
-	ele.Get("description", &Description)
+		_, err = txn.Stmt(prep).Exec(
+			id,
+			scope,
+			name,
+			orgAppName,
+			created,
+			createdBy,
+			updated,
+			updatedBy,
+			snapInfo)
 
-	_, err = txn.Stmt(prep).Exec(
-		id,
-		scope,
-		name,
-		orgAppName,
-		created,
-		createdBy,
-		updated,
-		updatedBy,
-		snapInfo)
-
-	if err != nil {
-		log.Error("INSERT APID_CONFIG Failed: ", id, ", ", scope, ")", err)
-		txn.Rollback()
-		return false
-	} else {
-		log.Info("INSERT APID_CONFIG Success: (", id, ", ", scope, ")")
-		txn.Commit()
-		return true
+		if err != nil {
+			log.Error("INSERT APID_CONFIG Failed: ", id, ", ", scope, ")", err)
+			return false
+		} else {
+			log.Info("INSERT APID_CONFIG Success: (", id, ", ", scope, ")")
+		}
 	}
-
+	return true
 }
 
 /*
  * INSERT INTO APP_CREDENTIAL op
  */
-func insertApidConfigScopes(rows []common.Row, db *sql.DB) bool {
+func insertApidConfigScopes(rows []common.Row, db *sql.DB, txn *sql.Tx) bool {
 
 	var id, scopeId, apiConfigId, scope, createdBy, updatedBy string
 	var created, updated int64
@@ -137,8 +153,8 @@
 		log.Error("INSERT APID_CONFIG_SCOPE Failed: ", err)
 		return false
 	}
+	defer prep.Close()
 
-	txn, err := db.Begin()
 	for _, ele := range rows {
 
 		ele.Get("id", &id)
@@ -162,12 +178,10 @@
 
 		if err != nil {
 			log.Error("INSERT APID_CONFIG_SCOPE Failed: ", id, ", ", scope, ")", err)
-			txn.Rollback()
 			return false
 		} else {
 			log.Info("INSERT APID_CONFIG_SCOPE Success: (", id, ", ", scope, ")")
 		}
 	}
-	txn.Commit()
 	return true
 }