diff --git a/data.go b/data.go
index fd4111c..c0f7a31 100644
--- a/data.go
+++ b/data.go
@@ -54,6 +54,9 @@
 		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 +66,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
 }
@@ -177,6 +173,7 @@
 		if err == nil && affected != 0 {
 			log.Debugf("DELETE Success [%s] values=%v", sql, values)
 		} else if err == nil && affected == 0 {
+			err = errors.New("Entry not found. Nothing to delete")
 			log.Errorf("Entry not found [%s] values=%v. Nothing to delete.", sql, values)
 			return false
 		} else {
@@ -444,16 +441,11 @@
 		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 +469,13 @@
 		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 +497,6 @@
 			info.InstanceID, info.ClusterID, "")
 		info.LastSnapshot = ""
 	}
-	if err == nil {
-		err = tx.Commit()
-		if err != nil {
-			rollbackTxn(tx)
-		}
-	} else {
-		rollbackTxn(tx)
-	}
 	return
 }
 
@@ -528,6 +512,9 @@
 		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 +522,12 @@
 		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..265ab67 100644
--- a/listener.go
+++ b/listener.go
@@ -58,8 +58,16 @@
 	}
 }
 
-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)
 	}
@@ -78,6 +86,8 @@
 		log.Panicf("Unable to read database: {%s}", err.Error())
 	}
 
+	defer completeTxn(tx, err)
+
 	if numApidClusters != 1 {
 		log.Panic("Illegal state for apid_cluster. Must be a single row.")
 	}
@@ -85,17 +95,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 +111,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 +136,5 @@
 		}
 	}
 
-	err = tx.Commit()
-	if err != nil {
-		log.Panicf("Error processing ChangeList: %v", err)
-		return false
-	}
-
 	return ok
 }
