diff --git a/src/PaymentServer/Persistence.hs b/src/PaymentServer/Persistence.hs
index 1b5ee93eda8fc9c50595d6764645b185ce79597c..478821e790fd69516905ebf51167b9003e913fb5 100644
--- a/src/PaymentServer/Persistence.hs
+++ b/src/PaymentServer/Persistence.hs
@@ -452,14 +452,14 @@ upgradeSchema targetVersion conn = do
       case compareVersion targetVersion currentVersion of
         Lesser -> return $ Left DatabaseSchemaTooNew
         Equal -> return $ Right ()
-        Greater -> runUpgrades currentVersion
+        Greater -> runUpgrades currentVersion targetVersion
 
   where
-    runUpgrades :: Int -> IO (Either UpgradeError ())
-    runUpgrades currentVersion =
+    runUpgrades :: Int -> Int -> IO (Either UpgradeError ())
+    runUpgrades currentVersion targetVersion =
       let
         upgrades :: [[Sqlite.Query]]
-        upgrades = drop currentVersion updateVersions
+        upgrades = drop currentVersion $ take targetVersion updateVersions
 
         oneStep :: [Sqlite.Query] -> IO [()]
         oneStep = mapM $ Sqlite.execute_ conn
diff --git a/test/Persistence.hs b/test/Persistence.hs
index 37f4c8e7bffa205e8fcd7dcb70fc035ffac781d6..f5af37807dfa6a015c5759580c07218400d48f43 100644
--- a/test/Persistence.hs
+++ b/test/Persistence.hs
@@ -247,4 +247,28 @@ sqlite3DatabaseSchemaTests =
       let expected = Right latestVersion
       actual <- readVersion conn
       assertEqual "The recorded schema version should be the latest value" expected actual
+
+  , testCase "identify version 0" $
+    -- readVersion identifies an empty database schema as version 0
+    Sqlite.withConnection ":memory:" $ \conn -> do
+      let expected = Right 0
+      actual <- readVersion conn
+      assertEqual "An empty database schema is version 0" expected actual
+
+  , testCase "identify version 1" $
+    -- readVersion identifies schema version 1
+    Sqlite.withConnection ":memory:" $ \conn -> do
+      upgradeSchema 1 conn
+      let expected = Right 1
+      actual <- readVersion conn
+      assertEqual "readVersion identifies database schema version 1" expected actual
+
+  , testCase "identify version 2" $
+    -- readVersion identifies schema version 1
+    Sqlite.withConnection ":memory:" $ \conn -> do
+      upgradeSchema 2 conn
+      let expected = Right 2
+      actual <- readVersion conn
+      assertEqual "readVersion identifies database schema version 2" expected actual
+
   ]