diff --git a/listener.go b/listener.go
index 6c025c7..2152bea 100644
--- a/listener.go
+++ b/listener.go
@@ -116,22 +116,26 @@
 /*
  * INSERT INTO APP_CREDENTIAL op
  */
-func insertCreateCredential(ele common.Row, db *sql.DB) {
+func insertCreateCredential(ele common.Row, db *sql.DB) bool {
 
 	var scope, id, appId, consumerSecret, appstatus, status, tenantId string
 	var issuedAt int64
 
-	txn, _ := db.Begin()
-	err := ele.Get("_apid_scope", &scope)
-	err = ele.Get("id", &id)
-	err = ele.Get("app_id", &appId)
-	err = ele.Get("consumer_secret", &consumerSecret)
-	err = ele.Get("app_status", &appstatus)
-	err = ele.Get("status", &status)
-	err = ele.Get("issued_at", &issuedAt)
-	err = ele.Get("tenant_id", &tenantId)
+	ele.Get("_apid_scope", &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)
 
-	_, err = txn.Exec("INSERT INTO APP_CREDENTIAL (_apid_scope, id, app_id, consumer_secret, app_status, status, issued_at, tenant_id)VALUES(?,?,?,?,?,?,?,?);",
+	stmt, 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);")
+	if err != nil {
+		log.Error("INSERT CRED Failed: ", id, ", ", scope, ")", err)
+		return false
+	}
+	_, err = stmt.Exec(
 		scope,
 		id,
 		appId,
@@ -143,31 +147,35 @@
 
 	if err != nil {
 		log.Error("INSERT CRED Failed: ", id, ", ", scope, ")", err)
-		txn.Rollback()
+		return false
 	} else {
 		log.Info("INSERT CRED Success: (", id, ", ", scope, ")")
-		txn.Commit()
+		return true
 	}
 
 }
-func insertApiProductMapper(ele common.Row, db *sql.DB) {
+func insertApiProductMapper(ele common.Row, db *sql.DB) bool {
 
 	var ApiProduct, AppId, EntityIdentifier, tenantId, Scope, Status string
 
-	txn, _ := db.Begin()
-	err := ele.Get("apiprdt_id", &ApiProduct)
-	err = ele.Get("app_id", &AppId)
-	err = ele.Get("appcred_id", &EntityIdentifier)
-	err = ele.Get("tenant_id", &tenantId)
-	err = ele.Get("_apid_scope", &Scope)
-	err = ele.Get("status", &Status)
+	ele.Get("apiprdt_id", &ApiProduct)
+	ele.Get("app_id", &AppId)
+	ele.Get("appcred_id", &EntityIdentifier)
+	ele.Get("tenant_id", &tenantId)
+	ele.Get("_apid_scope", &Scope)
+	ele.Get("status", &Status)
 
 	/*
 	 * If the credentials has been successfully inserted, insert the
 	 * mapping entries associated with the credential
 	 */
 
-	_, err = txn.Exec("INSERT INTO APP_CREDENTIAL_APIPRODUCT_MAPPER(apiprdt_id, app_id, appcred_id, tenant_id, _apid_scope, status) VALUES(?,?,?,?,?,?);",
+	stmt, 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);")
+	if err != nil {
+		log.Error("INSERT APP_CREDENTIAL_APIPRODUCT_MAPPER Failed: ", err)
+		return false
+	}
+	_, err = stmt.Exec(
 		ApiProduct,
 		AppId,
 		EntityIdentifier,
@@ -177,50 +185,54 @@
 
 	if err != nil {
 		log.Error("INSERT APP_CREDENTIAL_APIPRODUCT_MAPPER Failed: (",
-			ApiProduct,
-			AppId,
-			EntityIdentifier,
-			tenantId,
-			Scope,
+			ApiProduct, ", ",
+			AppId, ", ",
+			EntityIdentifier, ", ",
+			tenantId, ", ",
+			Scope, ", ",
 			Status,
 			")",
 			err)
-		txn.Rollback()
+		return false
 	} else {
 		log.Info("INSERT APP_CREDENTIAL_APIPRODUCT_MAPPER Success: (",
-			ApiProduct,
-			AppId,
-			EntityIdentifier,
-			tenantId,
-			Scope,
+			ApiProduct, ", ",
+			AppId, ", ",
+			EntityIdentifier, ", ",
+			tenantId, ", ",
+			Scope, ", ",
 			Status,
 			")")
-		txn.Commit()
+		return true
 	}
 }
 
 /*
  * DELETE CRED
  */
-func deleteCredential(ele common.Row, db *sql.DB) {
-
+func deleteCredential(ele common.Row, db *sql.DB) bool {
+	return true
 }
 
 /*
  * INSERT INTO API product op
  */
-func insertAPIproduct(ele common.Row, db *sql.DB) {
+func insertAPIproduct(ele common.Row, db *sql.DB) bool {
 
 	var scope, apiProduct, res, env, tenantId string
 
-	txn, _ := db.Begin()
-	err := ele.Get("_apid_scope", &scope)
-	err = ele.Get("id", &apiProduct)
-	err = ele.Get("api_resources", &res)
-	err = ele.Get("environments", &env)
-	err = ele.Get("tenant_id", &tenantId)
+	ele.Get("_apid_scope", &scope)
+	ele.Get("id", &apiProduct)
+	ele.Get("api_resources", &res)
+	ele.Get("environments", &env)
+	ele.Get("tenant_id", &tenantId)
 
-	_, err = txn.Exec("INSERT INTO API_PRODUCT (id, api_resources, environments, tenant_id,_apid_scope) VALUES(?,?,?,?,?)",
+	stmt, err := db.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
+	}
+	_, err = stmt.Exec(
 		apiProduct,
 		res,
 		env,
@@ -228,11 +240,11 @@
 		scope)
 
 	if err != nil {
-		log.Error("INSERT API_PRODUCT Failed: (", apiProduct, tenantId, ")", err)
-		txn.Rollback()
+		log.Error("INSERT API_PRODUCT Failed: (", apiProduct, ", ", tenantId, ")", err)
+		return false
 	} else {
-		log.Info("INSERT API_PRODUCT Success: (", apiProduct, tenantId, ")")
-		txn.Commit()
+		log.Info("INSERT API_PRODUCT Success: (", apiProduct, ", ", tenantId, ")")
+		return true
 	}
 
 }
@@ -240,26 +252,30 @@
 /*
  * INSERT INTO APP op
  */
-func insertCreateApplication(ele common.Row, db *sql.DB) {
+func insertCreateApplication(ele common.Row, db *sql.DB) bool {
 
 	var scope, EntityIdentifier, DeveloperId, CallbackUrl, Status, AppName, AppFamily, tenantId, CreatedBy, LastModifiedBy string
 	var CreatedAt, LastModifiedAt int64
-	txn, _ := db.Begin()
 
-	err := ele.Get("_apid_scope", &scope)
-	err = ele.Get("id", &EntityIdentifier)
-	err = ele.Get("developer_id", &DeveloperId)
-	err = ele.Get("callback_url", &CallbackUrl)
-	err = ele.Get("status", &Status)
-	err = ele.Get("name", &AppName)
-	err = ele.Get("app_family", &AppFamily)
-	err = ele.Get("created_at", &CreatedAt)
-	err = ele.Get("created_by", &CreatedBy)
-	err = ele.Get("updated_at", &LastModifiedAt)
-	err = ele.Get("updated_by", &LastModifiedBy)
-	err = ele.Get("tenant_id", &tenantId)
+	ele.Get("_apid_scope", &scope)
+	ele.Get("id", &EntityIdentifier)
+	ele.Get("developer_id", &DeveloperId)
+	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)
 
-	_, err = txn.Exec("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(?,?,?,?,?,?,?,?,?,?,?,?);",
+	stmt, 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);")
+	if err != nil {
+		log.Error("INSERT APP Failed: ", err)
+		return false
+	}
+	_, err = stmt.Exec(
 		scope,
 		EntityIdentifier,
 		DeveloperId,
@@ -274,11 +290,11 @@
 		tenantId)
 
 	if err != nil {
-		log.Error("INSERT APP Failed: (", EntityIdentifier, tenantId, ")", err)
-		txn.Rollback()
+		log.Error("INSERT APP Failed: (", EntityIdentifier, ", ", tenantId, ")", err)
+		return false
 	} else {
-		log.Info("INSERT APP Success: (", EntityIdentifier, tenantId, ")")
-		txn.Commit()
+		log.Info("INSERT APP Success: (", EntityIdentifier, ", ", tenantId, ")")
+		return true
 	}
 
 }
@@ -286,25 +302,30 @@
 /*
  * INSERT INTO DEVELOPER op
  */
-func insertCreateDeveloper(ele common.Row, db *sql.DB) {
+func insertCreateDeveloper(ele common.Row, db *sql.DB) bool {
 	var scope, EntityIdentifier, Email, Status, UserName, FirstName, LastName, tenantId, CreatedBy, LastModifiedBy, Username string
 	var CreatedAt, LastModifiedAt int64
-	txn, _ := db.Begin()
 
-	err := ele.Get("_apid_scope", &scope)
-	err = ele.Get("email", &Email)
-	err = ele.Get("id", &EntityIdentifier)
-	err = ele.Get("tenant_id", &tenantId)
-	err = ele.Get("status", &Status)
-	err = ele.Get("username", &Username)
-	err = ele.Get("first_name", &FirstName)
-	err = ele.Get("last_name", &LastName)
-	err = ele.Get("created_at", &CreatedAt)
-	err = ele.Get("created_by", &CreatedBy)
-	err = ele.Get("updated_at", &LastModifiedAt)
-	err = ele.Get("updated_by", &LastModifiedBy)
+	ele.Get("_apid_scope", &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)
 
-	_, err = txn.Exec("INSERT INTO DEVELOPER (_apid_scope,email,id,tenant_id,status,username,first_name,last_name,created_at,created_by,updated_at,updated_by) VALUES(?,?,?,?,?,?,?,?,?,?,?,?);",
+	stmt, 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);")
+	if err != nil {
+		log.Error("INSERT DEVELOPER Failed: ", err)
+		return false
+	}
+
+	_, err = stmt.Exec(
 		scope,
 		Email,
 		EntityIdentifier,
@@ -319,10 +340,10 @@
 		LastModifiedBy)
 
 	if err != nil {
-		log.Error("INSERT DEVELOPER Failed: (", EntityIdentifier, scope, ")", err)
-		txn.Rollback()
+		log.Error("INSERT DEVELOPER Failed: (", EntityIdentifier, ", ", scope, ")", err)
+		return false
 	} else {
-		log.Info("INSERT DEVELOPER Success: (", EntityIdentifier, scope, ")")
-		txn.Commit()
+		log.Info("INSERT DEVELOPER Success: (", EntityIdentifier, ", ", scope, ")")
+		return true
 	}
 }
