diff --git a/PKGBUILD b/PKGBUILD
index c487010d7ff9c14f968afffc25661f213a152fa3..298803707ad273232e5b0f2cb0cbd891440dd055 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,6 +1,6 @@
 # Maintainer: Maël 'Kubat' MARTIN <mael.martin31@gmail.com>
 pkgname=lektor
-pkgver=mk7.818.a4f399d
+pkgver=mk7.957.7f1fbc7
 pkgrel=1
 pkgdesc="The lektor kara player, from the Bakaclub"
 arch=(x86_64 i686)
diff --git a/inc/lektor/database.h b/inc/lektor/database.h
index 080c507b0b88f84e734a54abe5a8c3fa6cd76863..87c63aa1f5fcfea8ec479d0fd679987b09402b90 100644
--- a/inc/lektor/database.h
+++ b/inc/lektor/database.h
@@ -55,6 +55,7 @@ void database_update_touch        (volatile sqlite3 *db, int id);
 
 /* Control the content of the queue. */
 bool database_queue_add_uri(volatile sqlite3 *db, struct lkt_uri *uri, int priority);
+bool database_queue_add_id(volatile sqlite3 *db, int id, 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/inc/lektor/uri.h b/inc/lektor/uri.h
index b9ab50874ab07d438ef3a30bc666c337a9f41348..c24f82ef38b92034bdc84f80e7bcb340fef0cba8 100644
--- a/inc/lektor/uri.h
+++ b/inc/lektor/uri.h
@@ -17,7 +17,11 @@ enum lkt_uri_type {
 
 struct lkt_uri {
     enum lkt_uri_type type;
-    void *value;
+    union {
+        void *value;
+        size_t id;
+    };
+
 
     bool _allocated;
 };
diff --git a/src/commands.c b/src/commands.c
index a4b34dba0172ee2f7eb35c07706c8e64f748f4b2..5d53ae23ea0f33641ac397d7bcd6aaa3e8876e30 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -247,7 +247,9 @@ command_stop(volatile sqlite3 *db, struct lkt_win *win, mpd_idle_flag *watch_mas
 }
 
 bool
-command_add(volatile sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr, int priority)
+command_add(volatile sqlite3 *db, struct lkt_win *win,
+            char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr,
+            int priority)
 {
     RETURN_UNLESS(args, "Invalid argument", false);
     *watch_mask_ptr |= MPD_IDLE_PLAYLIST;
@@ -264,18 +266,19 @@ command_add(volatile sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_AR
 }
 
 bool
-command_addid(volatile sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr)
+command_addid(volatile sqlite3 *db, struct lkt_win *win,
+              char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr)
 {
     UNUSED(win);
     RETURN_UNLESS(args, "Invalid argument", false);
-    long id;
-    char *endptr = NULL, err = 0;
+    errno = 0;
+    int i;
     struct lkt_uri uri = { .type = uri_id };
+    for (i = 0; (uri.id = strtol(args[i], NULL, 0)) && ! errno; ++i) {
+        errno |= database_queue_add_id(db, uri.id, 1);
+    }
     *watch_mask_ptr |= MPD_IDLE_PLAYLIST;
-    STRTOL(id, args[0], endptr, err);
-    RETURN_IF(err, "STRTOL failed", false);
-    uri.value = (void *) (size_t) id;
-    return database_queue_add_uri(db, &uri, 1);
+    return ! errno;
 }
 
 inline bool
diff --git a/src/database/queue.c b/src/database/queue.c
index e7815cd29e16dc1921275399283e9531bff09bcb..6c131af43e9d1d4355f8892993afe144dfbef209 100644
--- a/src/database/queue.c
+++ b/src/database/queue.c
@@ -266,7 +266,7 @@ database_queue_add_uri(volatile sqlite3 *db, struct lkt_uri *uri, int priority)
         return queue_add_with_col_like_str(db, LKT_DATABASE_KARA_ALL,
                                            uri->value, priority);
     case uri_id:
-        return database_queue_add_id(db, *(int *) uri->value, priority);
+        return database_queue_add_id(db, uri->id, priority);
     case uri_type:
         return queue_add_with_col_like_str(db, LKT_DATABASE_NAME_KTYPE,
                                            uri->value, priority);
diff --git a/src/mkv/mkv.c b/src/mkv/mkv.c
index ff5164427ff0220ce289e4a17e55088c6bd46452..d1384bc1d1888609c5b165f95dff1cf7e071d550 100644
--- a/src/mkv/mkv.c
+++ b/src/mkv/mkv.c
@@ -403,6 +403,8 @@ mkv_seek_tags(struct bufferfd *bf, size_t header_len)
 
     while (seekhead_len > 0) {
         struct mkv_seek s;
+        s.id = 0;
+        s.pos = 0;
         uint32_t eid;
         ssize_t n;
 
diff --git a/src/net/listen.c b/src/net/listen.c
index 4fe673c28a86f3bd0e0c0c2c079d714c823ee0fa..05110a2d59a968d6747e98ff6fb43eca4f769163 100644
--- a/src/net/listen.c
+++ b/src/net/listen.c
@@ -223,11 +223,11 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd)
             err = !command_help(srv, c);
 
         else if (STR_MATCH(cmd.name, "__insert"))
-            err = !command_add((sqlite3 *) srv->db, &srv->win, cmd.args, &srv->mpd_idle_events, 5);
+            err = ! command_add((sqlite3 *) srv->db, &srv->win, cmd.args, &srv->mpd_idle_events, 5);
         else if (STR_MATCH(cmd.name, "searchadd") || STR_MATCH(cmd.name, "findadd") || STR_MATCH(cmd.name, "add"))
-            err = !command_add((sqlite3 *) srv->db, &srv->win, cmd.args, &srv->mpd_idle_events, 1);
+            err = ! command_add((sqlite3 *) srv->db, &srv->win, cmd.args, &srv->mpd_idle_events, 1);
         else if (STR_MATCH(cmd.name, "addid"))
-            err = !command_addid((sqlite3 *) srv->db, &srv->win, cmd.args, &srv->mpd_idle_events);
+            err = ! command_addid((sqlite3 *) srv->db, &srv->win, cmd.args, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "deleteid"))
             err = ! (cmd.args[0] != NULL &&
                      command_delid((sqlite3 *) srv->db, &srv->win, cmd.args[0], &srv->mpd_idle_events));