diff --git a/inc/lektor/internal/dbmacro.h b/inc/lektor/internal/dbmacro.h
index a95710b0ee41ecef40ede8217e2afa5b86f98a8f..e93d539b1ae5264b27d0d40ab311831adfe0b4e2 100644
--- a/inc/lektor/internal/dbmacro.h
+++ b/inc/lektor/internal/dbmacro.h
@@ -73,9 +73,11 @@
 
 #define SQLITE_BEGIN_TRANSATION(db, error) SQLITE_EXEC(db, "BEGIN TRANSATION;", error)
 #define SQLITE_END_TRANSATION(db, error)   SQLITE_EXEC(db, "END TRANSATION;", error)
-#define SQLITE_DO_ROLLBACK(db)                \
-    LOG_WARN("DB-DEBUG", "DO ROLLBACK \\o/"); \
-    sqlite3_exec((sqlite3 *)db, "ROLLBACK TRANSACTION;\n", NULL, NULL, NULL);
+#define SQLITE_DO_ROLLBACK(db)                                                    \
+    {                                                                             \
+        LOG_WARN("DB-DEBUG", "DO ROLLBACK \\o/");                                 \
+        sqlite3_exec((sqlite3 *)db, "ROLLBACK TRANSACTION;\n", NULL, NULL, NULL); \
+    }
 
 #define sqlite3_column_chars (const char *)sqlite3_column_text
 
diff --git a/src/database/queue.c b/src/database/queue.c
index 1601eb2ecfb99ee6334ca85ad17e5e9df0959f63..f92eb02b348cd4027df0f1093816184e3f4aede1 100644
--- a/src/database/queue.c
+++ b/src/database/queue.c
@@ -608,17 +608,18 @@ database_queue_prev(lkt_db *db, char filepath[PATH_MAX])
         "  END"
         "  ORDER BY position DESC LIMIT 1;";
     char SQL_UPDATE[LKT_MAX_SQLITE_STATEMENT];
-    bool status        = false;
-    int code           = SQLITE_OK, id;
+    int code           = SQLITE_OK;
     sqlite3_stmt *stmt = NULL;
 
+    SQLITE_BEGIN_TRANSATION(db, error_failed_to_begin_transaction);
+
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     code = sqlite3_step(stmt);
 
     if (code == SQLITE_ROW) {
-        id = MAX(1, sqlite3_column_int(stmt, 1));
-        safe_snprintf(SQL_UPDATE, LKT_MAX_SQLITE_STATEMENT, "UPDATE queue_state SET current = %d;",
-                      id);
+        int id                             = MAX(1, sqlite3_column_int(stmt, 1));
+        static const char *SQL_TMPL_UPDATE = "UPDATE queue_state SET current = %d;";
+        safe_snprintf(SQL_UPDATE, LKT_MAX_SQLITE_STATEMENT, SQL_TMPL_UPDATE, id);
 
         if (filepath != NULL)
             strncpy(filepath, sqlite3_column_chars(stmt, 0), PATH_MAX - 1);
@@ -639,10 +640,19 @@ database_queue_prev(lkt_db *db, char filepath[PATH_MAX])
     }
 
     SQLITE_EXEC(db, SQL_UPDATE, error);
-    status = true;
+    unless (___database_back_propagate_priority(db))
+        goto error;
+    sqlite3_finalize(stmt);
+    SQLITE_END_TRANSATION(db, error);
+    return true;
+
 error:
+    SQLITE_DO_ROLLBACK(db);
     sqlite3_finalize(stmt);
-    return status;
+    return false;
+
+error_failed_to_begin_transaction:
+    return false;
 }
 
 bool