diff --git a/goatherd.go b/goatherd.go
index dc3ee6d6d8dc81e8b9a81e2da35d5be6303e9388..e702293ef0db179b964117ed238934a052bc2f04 100644
--- a/goatherd.go
+++ b/goatherd.go
@@ -164,8 +164,10 @@ func get_otp(tx *sql.Tx, name string) (*hotp.HOTP, error) {
 }
 
 func transaction_failed(err error) bool {
-    // XXX: check type first?
-    return err == sqlite3.ErrBusy
+    if err, ok := err.(sqlite3.Error); ok {
+        return err.Code == sqlite3.ErrLocked || err.Code == sqlite3.ErrBusy
+    }
+    return false
 }
 
 // Retrieve secret and count for given username and try to find a match within