diff --git a/data.go b/data.go
index fd4111c..3c6994b 100644
--- a/data.go
+++ b/data.go
@@ -54,6 +54,7 @@
 		log.Errorf("initDB(): Unable to get DB tx err: {%v}", err)
 		return err
 	}
+	defer completeTxn(tx, err)
 	_, err = tx.Exec(`
 	CREATE TABLE IF NOT EXISTS APID (
 	    instance_id text,
@@ -63,16 +64,9 @@
 	);
 	`)
 	if err != nil {
-		rollbackTxn(tx)
 		log.Errorf("initDB(): Unable to tx exec err: {%v}", err)
 		return err
 	}
-	err = tx.Commit()
-	if err != nil {
-		rollbackTxn(tx)
-		log.Errorf("initDB(): tx commit err: {%v}", err)
-		return err
-	}
 	log.Debug("Database tables created.")
 	return nil
 }
@@ -443,17 +437,10 @@
 		log.Errorf("getApidInstanceInfo: Unable to get DB tx Err: {%v}", err)
 		return err
 	}
-
+	defer completeTxn(tx, err)
 	_, err = tx.Exec("UPDATE EDGEX_APID_CLUSTER SET last_sequence=?;", lastSequence)
 	if err != nil {
 		log.Errorf("UPDATE EDGEX_APID_CLUSTER Failed: %v", err)
-		rollbackTxn(tx)
-		return err
-	}
-	err = tx.Commit()
-	if err != nil {
-		log.Errorf("UPDATE EDGEX_APID_CLUSTER Tx Commit err : %v", err)
-		rollbackTxn(tx)
 		return err
 	}
 	log.Debugf("UPDATE EDGEX_APID_CLUSTER Success: %s", lastSequence)
@@ -477,13 +464,12 @@
 		log.Errorf("getApidInstanceInfo: Unable to get DB tx Err: {%v}", err)
 		return
 	}
-
+	defer completeTxn(tx, err)
 	err = tx.QueryRow("SELECT instance_id, apid_cluster_id, last_snapshot_info FROM APID LIMIT 1").
 		Scan(&info.InstanceID, &savedClusterId, &info.LastSnapshot)
 	if err != nil {
 		if err != sql.ErrNoRows {
 			log.Errorf("Unable to retrieve apidInstanceInfo: %v", err)
-			tx.Rollback()
 			return
 		} else {
 			// first start - no row, generate a UUID and store it
@@ -505,14 +491,6 @@
 			info.InstanceID, info.ClusterID, "")
 		info.LastSnapshot = ""
 	}
-	if err == nil {
-		err = tx.Commit()
-		if err != nil {
-			rollbackTxn(tx)
-		}
-	} else {
-		rollbackTxn(tx)
-	}
 	return
 }
 
@@ -528,6 +506,7 @@
 		log.Errorf("updateApidInstanceInfo: Unable to get DB tx Err: {%v}", err)
 		return err
 	}
+	defer completeTxn(tx, err)
 	rows, err := tx.Exec(`
 		REPLACE
 		INTO APID (instance_id, apid_cluster_id, last_snapshot_info)
@@ -535,20 +514,11 @@
 		apidInfo.InstanceID, apidInfo.ClusterID, apidInfo.LastSnapshot)
 	if err != nil {
 		log.Errorf("updateApidInstanceInfo: Tx Exec Err: {%v}", err)
-		rollbackTxn(tx)
 		return err
 	}
 	n, err := rows.RowsAffected()
 	if err == nil && n == 0 {
 		err = errors.New("no rows affected")
-		rollbackTxn(tx)
-	} else if err == nil {
-		err = tx.Commit()
-		if err != nil {
-			rollbackTxn(tx)
-		}
-	} else {
-		rollbackTxn(tx)
 	}
 
 	return err
diff --git a/listener.go b/listener.go
index 8635a81..0f6bc35 100644
--- a/listener.go
+++ b/listener.go
@@ -58,8 +58,17 @@
 	}
 }
 
-func rollbackTxn (tx apid.Tx) {
-	err := tx.Rollback()
+
+func completeTxn (tx apid.Tx, err error) {
+	if err == nil {
+		err = tx.Commit()
+		if err == nil {
+			log.Debugf("Transaction committed successfully")
+			return
+		}
+		log.Errorf("Transaction commit failed with error : {%v}", err)
+	}
+	err = tx.Rollback()
 	if err != nil {
 		log.Panicf("Unable to rollback Transaction. DB in inconsistent state. Err {%v}", err)
 	}
@@ -72,7 +81,7 @@
 	if err != nil {
 		log.Panicf("Unable to open DB txn: {%v}", err.Error())
 	}
-
+	defer completeTxn(tx, err)
 	err = tx.QueryRow("SELECT COUNT(*) FROM edgex_apid_cluster").Scan(&numApidClusters)
 	if err != nil {
 		log.Panicf("Unable to read database: {%s}", err.Error())
@@ -85,17 +94,11 @@
 	_, err = tx.Exec("ALTER TABLE edgex_apid_cluster ADD COLUMN last_sequence text DEFAULT ''")
 	if err != nil {
 		if err.Error() == "duplicate column name: last_sequence" {
-			rollbackTxn(tx)
 			return
 		} else {
 			log.Panicf("Unable to create last_sequence column on DB.  Error {%v}", err.Error())
 		}
 	}
-	err = tx.Commit()
-	if err != nil {
-		rollbackTxn(tx)
-		return
-	}
 }
 
 func processChangeList(changes *common.ChangeList) bool {
@@ -107,7 +110,7 @@
 		log.Panicf("Error processing ChangeList: %v", err)
 		return ok
 	}
-	defer tx.Rollback()
+	defer completeTxn(tx, err)
 
 	log.Debugf("apigeeSyncEvent: %d changes", len(changes.Changes))
 
@@ -132,11 +135,5 @@
 		}
 	}
 
-	err = tx.Commit()
-	if err != nil {
-		log.Panicf("Error processing ChangeList: %v", err)
-		return false
-	}
-
 	return ok
 }
