diff --git a/src/database/queue.c b/src/database/queue.c
index 6a486ae466cdb51658d2e1ad9c190460962507f8..e51b1ab2f2f9afe8539cda97880baa46c42f5eaf 100644
--- a/src/database/queue.c
+++ b/src/database/queue.c
@@ -306,15 +306,18 @@ error:
 static bool
 queue_rm_with_sql(sqlite3 *db, const char *sql, int arg)
 {
+    bool res = false;
     sqlite3_stmt *stmt = 0;
-    bool res = sqlite3_prepare_v2(db, sql, -1, &stmt, 0) == SQLITE_OK &&
-               sqlite3_bind_int(stmt, 1, arg) == SQLITE_OK &&
-               sqlite3_step(stmt) == SQLITE_DONE;
-
-    if (!res)
+    SQLITE_PREPARE(db, stmt, sql, err);
+    SQLITE_BIND_INT(db, stmt, 1, arg, err);
+    if (sqlite3_step(stmt) != SQLITE_DONE) {
         fprintf(stderr, " ! del_kara_with_sql: Failed to delete kara: %s\n",
                 sqlite3_errmsg(db));
+        goto err;
+    }
 
+    res = true;
+err:
     sqlite3_finalize(stmt);
     return res;
 }
@@ -322,8 +325,13 @@ queue_rm_with_sql(sqlite3 *db, const char *sql, int arg)
 bool
 database_queue_del_id(sqlite3 *db, int id)
 {
-    static const char *SQL_DEL_KARA = "DELETE FROM queue WHERE kara_id = ?";
-    return queue_rm_with_sql(db, SQL_DEL_KARA, id);
+    static const char *SQL_DEL_KARA = "DELETE FROM queue WHERE kara_id = ?;";
+    if (!queue_rm_with_sql(db, SQL_DEL_KARA, id))
+        return false;
+    SQLITE_EXEC(db, "UPDATE queue_state SET current = current - 1;", err);
+    return true;
+err:
+    return false;
 }
 
 bool
@@ -336,7 +344,12 @@ database_queue_del_pos(sqlite3 *db, int pos)
         "      FROM queue_"
         "      WHERE position = ?"
         "    );";
-    return queue_rm_with_sql(db, SQL_DEL_POS, pos);
+    if (!queue_rm_with_sql(db, SQL_DEL_POS, pos))
+        return false;
+    SQLITE_EXEC(db, "UPDATE queue_state SET current = current - 1;", err);
+    return true;
+err:
+    return false;
 }
 
 bool