diff --git a/src/database/queue.c b/src/database/queue.c
index 4f8a4e8d8feadffe7cbd18848614351d04fc7cba..473a03df24648a04240ef19495f9154657b746e8 100644
--- a/src/database/queue.c
+++ b/src/database/queue.c
@@ -307,15 +307,14 @@ bool
 database_queue_del_id(sqlite3 *db, int id)
 {
     static const char *SQL_TEMPLATE =
-        "WITH before (pos) AS (SELECT position FROM queue_ JOIN queue_state WHERE position < current)"
+        "WITH before(pos) AS (SELECT position FROM queue_ JOIN queue_state WHERE position < current ORDER BY position DESC LIMIT 1)"
         "UPDATE queue_state SET current = CASE"
-        " WHEN (SELECT pos FROM before) IS NULL THEN (SELECT pos FROM queue_ ORDER BY position DESC LIMIT 1)"
         " WHEN current IS NULL THEN NULL"
         " ELSE (SELECT pos FROM before)"
-        "END;"
+        "END WHERE current >= (SELECT position FROM queue_ WHERE kara_id = %d);"
         "DELETE FROM queue WHERE kara_id = %d;";
     char SQL[LKT_MAX_SQLITE_STATEMENT];
-    snprintf(SQL, LKT_MAX_SQLITE_STATEMENT - 1, SQL_TEMPLATE, id);
+    snprintf(SQL, LKT_MAX_SQLITE_STATEMENT - 1, SQL_TEMPLATE, id, id);
     SQL[LKT_MAX_SQLITE_STATEMENT - 1] = '\0';
     SQLITE_EXEC(db, SQL, error);
     return true;
diff --git a/src/main/lkt.c b/src/main/lkt.c
index d6b2e83ef9c689697c8c4d79e111a9737aefe2c7..d28fb1a93bfa1d9447b2cc41cf08b1a1b780c16d 100644
--- a/src/main/lkt.c
+++ b/src/main/lkt.c
@@ -117,6 +117,8 @@ lkt_valid_type(const char *type)
     return (STR_MATCH(type, "all")      ||
             STR_MATCH(type, "any")      ||
             STR_MATCH(type, "a")        ||
+            STR_MATCH(type, "id")       ||
+            STR_MATCH(type, "title")    ||
             STR_MATCH(type, "type")     ||
             STR_MATCH(type, "cat")      ||
             STR_MATCH(type, "category") ||