diff --git a/inc/lektor/database.h b/inc/lektor/database.h
index 3f71c30166205875a7203290c5a28941169f8caa..26cda41e959334bbe603534fb9fc30ab745e58b3 100644
--- a/inc/lektor/database.h
+++ b/inc/lektor/database.h
@@ -74,7 +74,7 @@ bool database_queue_play(sqlite3 *db, int pos);
 bool database_queue_stop(sqlite3 *db);
 
 /* A search callback to be called after each matched row */
-typedef bool (*database_search_callback_t)(void *args, int id, const char *sql_row);
+typedef bool (*database_search_callback_t)(void *args, int id, int id_len, const char *sql_row);
 
 /* List the content of the queue */
 bool database_queue_list_from(sqlite3 *db, unsigned int count, void *args,
diff --git a/src/commands.c b/src/commands.c
index 0e1bcb8795503a8d1885ff4df14db0bbc6f2199c..9ba427ff8d5edcc1e0db3bcedcf5d85c2c15c5b7 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -554,38 +554,40 @@ struct _client_trace_t {
 };
 
 static bool
-lkt_callback_print_row_v1(void *args, int id, const char *sql_row)
+lkt_callback_print_row_v1(void *args, int id, int id_len, const char *sql_row)
 {
-    printf(" . from client %ld:\t%d:%s\n", ((struct _client_trace_t *) args)->c,
-           id, sql_row);
+    printf(" . from client %ld:\t%*d:%s\n", ((struct _client_trace_t *) args)->c,
+           id_len, id, sql_row);
     return true;
 }
 
 static bool
-lkt_callback_none(void *args, int id, const char *sql_row)
+lkt_callback_none(void *args, int id, int id_len, const char *sql_row)
 {
     (void) args;
     (void) id;
+    (void) id_len;
     (void) sql_row;
     return true;
 }
 
 static bool
-lkt_callback_send_row_v1(void *_args, int id, const char *sql_row)
+lkt_callback_send_row_v1(void *_args, int id, int id_len, const char *sql_row)
 {
     struct _client_trace_t *args = (struct _client_trace_t *) _args;
     struct lkt_message *out;
 
     out = lkt_message_new();
-    out->data_len = snprintf(out->data, LKT_MESSAGE_MAX, "%d\t%s\n", id, sql_row);
+    out->data_len = snprintf(out->data, LKT_MESSAGE_MAX, "%*d %s\n", id_len, id, sql_row);
     lkt_state_send(args->srv, args->c, out);
     return true;
 }
 
 static bool
-lkt_callback_insert_v1(void *_args, int id, const char *sql_row)
+lkt_callback_insert_v1(void *_args, int id, int id_len, const char *sql_row)
 {
     (void) sql_row;
+    (void) id_len;
     struct _client_trace_t *args = (struct _client_trace_t *) _args;
     return database_queue_add_id(args->srv->db, id, 5);
 }
@@ -634,7 +636,9 @@ command_find(struct lkt_state *srv,
     // Select the right column //
     mpd_tag = cmd_args[0];
 
-    if (!strcasecmp("any", mpd_tag) || !strcasecmp("all", mpd_tag))
+    if (!strcasecmp("any", mpd_tag) ||
+        !strcasecmp("all", mpd_tag) ||
+        !strcasecmp("a", mpd_tag))
         col_name = LKT_DATABASE_KARA_COLUMNT_ANY;
     else if (!strcasecmp("author", mpd_tag))
         col_name = LKT_DATABASE_NAME_KAUTHOR;
diff --git a/src/database/find.c b/src/database/find.c
index 074229701f3f8f1c5a7ed6d62c3f444548c32023..f9c8a62d20e01b826b0a36f23dc5b21e2c8fa043 100644
--- a/src/database/find.c
+++ b/src/database/find.c
@@ -16,10 +16,11 @@ database_search_init(sqlite3 *db, char *col_name, char *rgx, sqlite3_stmt **ret)
     }
 
     static const char *SQL_STMT_TEMPLATE =
-        "SELECT "
-        "  kara.id AS id, "
-        "  string AS any_col"
-        "FROM kara WHERE %s LIKE ?;";
+        "WITH content AS ("
+        " SELECT kara.id AS id, string AS any_col, LENGTH(CAST(kara.id AS TEXT)) AS len"
+        " FROM kara WHERE %s LIKE ?)"
+        "SELECT id, any_col, (SELECT MAX(len) FROM content)"
+        "FROM content;";
     char SQL_STMT[LKT_MAX_SQLITE_STATEMENT];
 
     snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT_TEMPLATE, col_name);
@@ -41,7 +42,7 @@ database_search_iter(sqlite3 *db,
                      bool *need_free)
 {
     const char *sql_row;
-    int id, code;
+    int id, code, id_len;
 
     *need_free = true;
     code = sqlite3_step(item);
@@ -57,7 +58,8 @@ database_search_iter(sqlite3 *db,
     if (code == SQLITE_ROW) {
         id = sqlite3_column_int(item, 0);
         sql_row = (const char *) sqlite3_column_text(item, 1);
-        return callback(args, id, sql_row);
+        id_len = sqlite3_column_int(item, 2);
+        return callback(args, id, id_len, sql_row);
     }
 
     fprintf(stderr, " ! database_search_iter: sqlite3_step failed: %s\n", sqlite3_errmsg(db));
diff --git a/src/database/queue.c b/src/database/queue.c
index cf046b87260327bf240f98f29eff36f9e1c18f8c..6a486ae466cdb51658d2e1ad9c190460962507f8 100644
--- a/src/database/queue.c
+++ b/src/database/queue.c
@@ -685,12 +685,15 @@ database_queue_list_abs(sqlite3 *db, unsigned int from, unsigned int to, void *a
                         database_search_callback_t callback)
 {
     const char *SQL_STMT =
-        "SELECT kara.id, string"
+        "WITH content AS ("
+        " SELECT kara.id AS id, string, LENGTH(CAST(kara.id AS TEXT)) AS len"
         "  FROM queue_"
         "  JOIN kara ON kara_id = kara.id"
         "  WHERE position >= ? AND position <= ?"
-        "  ORDER BY position;";
-    int code, id;
+        "  GROUP BY position ORDER BY position)"
+        "SELECT id, string, (SELECT MAX(len) FROM content)"
+        " FROM content;";
+    int code, id, id_len;
     const char *row;
     bool ret = false;
     sqlite3_stmt *stmt;
@@ -706,7 +709,8 @@ database_queue_list_abs(sqlite3 *db, unsigned int from, unsigned int to, void *a
         if (code == SQLITE_ROW) {
             id = sqlite3_column_int(stmt, 0);
             row = (const char *) sqlite3_column_text(stmt, 1);
-            if (callback(args, id, row))
+            id_len = sqlite3_column_int(stmt, 2);
+            if (callback(args, id, id_len, row))
                 continue;
             else
                 break;
@@ -731,17 +735,19 @@ database_queue_list_from(sqlite3 *db, unsigned int count, void *args,
                          database_search_callback_t callback)
 {
     const char *SQL_TEMPLATE =
-        "SELECT kara.id, string"
+        "WITH content AS ("
+        " SELECT kara.id AS id, string, LENGTH(CAST(kara.id AS TEXT)) AS len"
         "  FROM queue_"
         "  JOIN queue_state ON queue_.position >= CASE"
         "    WHEN queue_state.current IS NULL THEN 1"
         "    ELSE queue_state.current END"
         "  JOIN kara ON kara_id = kara.id"
-        "  ORDER BY position"
-        "  LIMIT %d;";
+        "  GROUP BY position ORDER BY position LIMIT %d)"
+        "SELECT id, string, (SELECT MAX(len) FROM content)"
+        " FROM content;";
     static const int stmt_len = 512;
     char SQL_STMT[stmt_len];
-    int code, id;
+    int code, id, id_len;
     const char *row;
     bool ret = false;
     sqlite3_stmt *stmt;
@@ -756,7 +762,8 @@ database_queue_list_from(sqlite3 *db, unsigned int count, void *args,
         if (code == SQLITE_ROW) {
             id = sqlite3_column_int(stmt, 0);
             row = (const char *) sqlite3_column_text(stmt, 1);
-            if (callback(args, id, row))
+            id_len = sqlite3_column_int(stmt, 2);
+            if (callback(args, id, id_len, row))
                 continue;
             else
                 break;