diff --git a/data.go b/data.go
index bf0bd2e..a9b1496 100644
--- a/data.go
+++ b/data.go
@@ -101,9 +101,8 @@
 	if err != nil {
 		log.Errorf("INSERT Fail [%s] values=%v error=[%v]", sql, values, err)
 		return false
-	} else {
-		log.Debugf("INSERT Success [%s] values=%v", sql, values)
 	}
+	log.Debugf("INSERT Success [%s] values=%v", sql, values)
 
 	return true
 }
@@ -126,39 +125,42 @@
 	if len(pkeys) == 0 || err != nil {
 		log.Errorf("DELETE No primary keys found for table. %s", tableName)
 		return false
-	} else if len(rows) == 0 {
+	}
+
+	if len(rows) == 0 {
 		log.Errorf("No rows found for table.", tableName)
 		return false
-	} else {
-		sql := buildDeleteSql(tableName, rows[0], pkeys)
-		prep, err := txn.Prepare(sql)
+	}
+
+	sql := buildDeleteSql(tableName, rows[0], pkeys)
+	prep, err := txn.Prepare(sql)
+	if err != nil {
+		log.Errorf("DELETE Fail to prep statement [%s] error=[%v]", sql, err)
+		return false
+	}
+	defer prep.Close()
+	for _, row := range rows {
+		values := getValueListFromKeys(row, pkeys)
+		// delete prepared statement from existing template statement
+		res, err := txn.Stmt(prep).Exec(values...)
 		if err != nil {
-			log.Errorf("DELETE Fail to prep statement [%s] error=[%v]", sql, err)
+			log.Errorf("DELETE Fail [%s] values=%v error=[%v]", sql, values, err)
 			return false
 		}
-		defer prep.Close()
-		for _, row := range rows {
-			values := getValueListFromKeys(row, pkeys)
-			// delete prepared statement from existing template statement
-			res, err := txn.Stmt(prep).Exec(values...)
-			if err != nil {
-				log.Errorf("DELETE Fail [%s] values=%v error=[%v]", sql, values, err)
-				return false
-			} else {
-				affected, err := res.RowsAffected()
-				if err == nil && affected != 0 {
-					log.Debugf("DELETE Success [%s] values=%v", sql, values)
-				} else if err == nil && affected == 0 {
-					log.Errorf("Entry not found [%s] values=%v. Nothing to delete.", sql, values)
-					return false
-				} else {
-					log.Errorf("DELETE Failed [%s] values=%v error=[%v]", sql, values, err)
-					return false
-				}
-			}
+		affected, err := res.RowsAffected()
+		if err == nil && affected != 0 {
+			log.Debugf("DELETE Success [%s] values=%v", sql, values)
+		} else if err == nil && affected == 0 {
+			log.Errorf("Entry not found [%s] values=%v. Nothing to delete.", sql, values)
+			return false
+		} else {
+			log.Errorf("DELETE Failed [%s] values=%v error=[%v]", sql, values, err)
+			return false
 		}
-		return true
+
 	}
+	return true
+
 }
 
 // Syntax "DELETE FROM Obj WHERE key1=$1 AND key2=$2 ... ;"
diff --git a/listener.go b/listener.go
index aa3cfd2..2a8b492 100644
--- a/listener.go
+++ b/listener.go
@@ -58,7 +58,10 @@
 		log.Panicf("Unable to read database: %s", err.Error())
 	}
 	apidClusters.Next()
-	apidClusters.Scan(&numApidClusters)
+	err = apidClusters.Scan(&numApidClusters)
+	if err != nil {
+		log.Panicf("Unable to read database: %s", err.Error())
+	}
 
 	if numApidClusters != 1 {
 		log.Panic("Illegal state for apid_cluster. Must be a single row.")
diff --git a/listener_test.go b/listener_test.go
index 2c9c1c6..d424a0b 100644
--- a/listener_test.go
+++ b/listener_test.go
@@ -15,15 +15,11 @@
 	var createTestDb = func(sqlfile string, dbId string) common.Snapshot {
 		initDb(sqlfile, "./mockdb.sqlite3")
 		file, err := os.Open("./mockdb.sqlite3")
-		if err != nil {
-			Fail("Failed to open mock db for test")
-		}
+		Expect(err).ShouldNot(HaveOccurred())
 
 		s := common.Snapshot{}
 		err = processSnapshotServerFileResponse(dbId, file, &s)
-		if err != nil {
-			Fail("Error processing test snapshots")
-		}
+		Expect(err).ShouldNot(HaveOccurred())
 		return s
 	}
 
