diff --git a/src/PaymentServer/Persistence.hs b/src/PaymentServer/Persistence.hs
index 963550f5c354714b0419959e3c807f9f15f5c9ee..bdc3eb04239c2c4d89ff3e1e0b6fa2085d2653f9 100644
--- a/src/PaymentServer/Persistence.hs
+++ b/src/PaymentServer/Persistence.hs
@@ -101,7 +101,7 @@ instance VoucherDatabase VoucherDatabaseState where
     let insertFn = (modifyIORef redeemed .) . Map.insert
     redeemVoucherHelper (unpaid, existingFingerprint) voucher fingerprint insertFn
 
-  redeemVoucher SQLiteDB { conn = conn } voucher fingerprint = do
+  redeemVoucher SQLiteDB { conn = conn } voucher fingerprint = Sqlite.withExclusiveTransaction conn $ do
     unpaid <- isVoucherUnpaid conn voucher
     existingFingerprint <- getVoucherFingerprint conn voucher
     let insertFn = insertVoucherAndFingerprint conn