diff --git a/inc/lektor/database.h b/inc/lektor/database.h
index e28f3aa03597eeda732ce4f56040d9e2912424b6..501251d48d707bb8e3e38e53f51fdcf3d6876e95 100644
--- a/inc/lektor/database.h
+++ b/inc/lektor/database.h
@@ -50,14 +50,7 @@ bool database_update_add          (volatile sqlite3 *db, const char *kara_path,
 bool database_update_set_available(volatile sqlite3 *db, uint64_t id);
 
 /* Control the content of the queue. */
-bool database_queue_add_id      (volatile sqlite3 *db, int id,               int priority);
-bool database_queue_add_query   (volatile sqlite3 *db, const char *query,    int priority);
-bool database_queue_add_author  (volatile sqlite3 *db, const char *author,   int priority);
-bool database_queue_add_language(volatile sqlite3 *db, const char *author,   int priority);
-bool database_queue_add_category(volatile sqlite3 *db, const char *author,   int priority);
-bool database_queue_add_type    (volatile sqlite3 *db, const char *author,   int priority);
-bool database_queue_add_plt     (volatile sqlite3 *db, const char *plt_name, int priority);
-
+bool database_queue_add_uri(volatile sqlite3 *db, struct lkt_uri *uri, int priority);
 bool database_queue_del_id (volatile sqlite3 *db, int id);
 bool database_queue_del_pos(volatile sqlite3 *db, int pos);
 bool database_queue_clear  (volatile sqlite3 *db);
diff --git a/src/commands.c b/src/commands.c
index 957bd4e4ea72dbcaeb70407abc0698db48fa7fb8..2c8fc902008875e605bf27be68e8de5c4bf5824d 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -238,35 +238,7 @@ command_add(volatile sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_AR
     int ret, priority = 1;  /* To be modified according to the command (insert or add) later (TODO) */
     UNUSED(win);            /* No callbacks to the window for the moment */
     RETURN_UNLESS(lkt_uri_from(&uri, query), "Failed to parse query", false);
-
-    switch (uri.type) {
-    case uri_query:
-    case uri_fs:
-        ret = database_queue_add_query(db, uri.value, priority);
-        break;
-    case uri_id:
-        ret = database_queue_add_id(db, *(int *) uri.value, priority);
-        break;
-    case uri_type:
-        ret = database_queue_add_type(db, (char *) uri.value, priority);
-        break;
-    case uri_category:
-        ret = database_queue_add_category(db, (char *) uri.value, priority);
-        break;
-    case uri_language:
-        ret = database_queue_add_language(db, (char *) uri.value, priority);
-        break;
-    case uri_author:
-        ret = database_queue_add_author(db, (char *) uri.value, priority);
-        break;
-    case uri_playlist:
-        ret = database_queue_add_plt(db, (char *) uri.value, priority);
-        break;
-    default:
-        ret = false;
-        break;
-    }
-
+    ret = database_queue_add_uri(db, &uri, priority);
     lkt_uri_free(&uri);
     return ret;
 }
@@ -275,19 +247,17 @@ bool
 command_addid(volatile sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr)
 {
     UNUSED(win);
-    long id;
-    char *endptr, *id_str;
-    int priority = 1;
-
     RETURN_UNLESS(args, "Invalid argument", false);
-    id_str = args[0];
+    long id;
+    char *endptr, *id_str = args[0];
+    struct lkt_uri uri = { .type = uri_id };
     errno = 0;
     *watch_mask_ptr |= MPD_IDLE_PLAYLIST;
     id = strtol(id_str, &endptr, 10);
-    RETURN_IF((errno == ERANGE && (id == LONG_MAX || id == LONG_MIN)) || (errno != 0 && id == 0),
-              "Failed: strtol", false);
+    RETURN_IF((errno == ERANGE && (id == LONG_MAX || id == LONG_MIN)) || (errno != 0 && id == 0), "Failed: strtol", false);
+    uri.value = (void *) (size_t) id;
     RETURN_IF(endptr == args[0], "No digit found", false);
-    return database_queue_add_id(db, id, priority);
+    return database_queue_add_uri(db, &uri, 1);
 }
 
 inline bool
diff --git a/src/database/find.c b/src/database/find.c
index 91a290cd22f7fdd5b6522a95e85efc42d401e8c2..e868700f4f86cfedd56f9f13f0642a75c016d965 100644
--- a/src/database/find.c
+++ b/src/database/find.c
@@ -12,12 +12,12 @@ __init_search(volatile sqlite3 *db, struct lkt_search *ret)
 {
     UNUSED(db);
     switch (ret->type) {
-        case lkt_add_queue:
-            /* Use the add uri */
-            return false;
-        default:
-            LOG_WARN_SCT("DB", "Init for type %d is not implemented", ret->type);
-            return false;
+    case lkt_add_queue:
+        /* Use the add uri */
+        return false;
+    default:
+        LOG_WARN_SCT("DB", "Init for type %d is not implemented", ret->type);
+        return false;
     }
     return false;
 }
diff --git a/src/database/queue.c b/src/database/queue.c
index a8bf8a55a43b2bbc35a200e051b169aaaa37d76e..3fdd6af52e1d4ad6cae136b6e3f58e7ee35f1edb 100644
--- a/src/database/queue.c
+++ b/src/database/queue.c
@@ -239,6 +239,31 @@ error:
     return status;
 }
 
+bool
+database_queue_add_uri(volatile sqlite3 *db, struct lkt_uri *uri, int priority)
+{
+    switch (uri->type) {
+    case uri_query:
+    case uri_fs:
+        return database_queue_add_query(db, uri->value, priority);
+    case uri_id:
+        return database_queue_add_id(db, *(int *) uri->value, priority);
+    case uri_type:
+        return database_queue_add_type(db, (char *) uri->value, priority);
+    case uri_category:
+        return database_queue_add_category(db, (char *) uri->value, priority);
+    case uri_language:
+        return database_queue_add_language(db, (char *) uri->value, priority);
+    case uri_author:
+        return database_queue_add_author(db, (char *) uri->value, priority);
+    case uri_playlist:
+        return database_queue_add_plt(db, (char *) uri->value, priority);
+    default:
+        LOG_WARN_SCT("DB", "Add to queue for uri of type %d is not implemented", uri->type);
+        return false;
+    }
+}
+
 bool
 database_queue_del_id(volatile sqlite3 *db, int id)
 {