diff --git a/inc/common/macro.h b/inc/common/macro.h
index ff1accded7f4f0f320713404dd4a457b2d10e226..5fa3a11342add3c059335e351af3c138e4e75578 100644
--- a/inc/common/macro.h
+++ b/inc/common/macro.h
@@ -142,20 +142,20 @@ typedef volatile enum {
         goto goto_label;                                                        \
     }
 
-#define SQLITE_BIND_TEXT(db, stmt, pos, text, error)                \
+#define SQLITE_BIND_TEXT(db, stmt, pos, text, error) {              \
     if (sqlite3_bind_text(stmt, pos, text, -1, 0) != SQLITE_OK) {   \
         LOG_ERROR("DB", "Failed to bind text %s at pos %d: %s",     \
                       (const char *) text, pos,                     \
                       sqlite3_errmsg((sqlite3 *) db));              \
         goto error;                                                 \
-    }
+    }}
 
-#define SQLITE_BIND_INT(db, stmt, pos, integer, error)              \
+#define SQLITE_BIND_INT(db, stmt, pos, integer, error) {            \
     if (sqlite3_bind_int(stmt, pos, integer) != SQLITE_OK) {        \
         LOG_ERROR("DB", "Failed to bind int %d at pos %d: %s",      \
                       integer, pos, sqlite3_errmsg((sqlite3 *) db));\
         goto error;                                                 \
-    }
+    }}
 
 #define SQLITE_STEP(db, stmt, code, error)                          \
     if (sqlite3_step(stmt) != code) {                               \
diff --git a/inc/lektor/uri.h b/inc/lektor/uri.h
index 513091d46033659ff7a896d8ce2e7bca934efb29..f18e476272de2bdb261a678c198f09dbf0c0f3f5 100644
--- a/inc/lektor/uri.h
+++ b/inc/lektor/uri.h
@@ -22,6 +22,7 @@ struct lkt_uri {
         size_t id;
     };
     bool _allocated;
+    bool is_int;
 };
 
 /* Create and delete URIs */
diff --git a/src/database/find.c b/src/database/find.c
index 7e2f5befe2b926367b3c40f0d5ab28fa538de4ab..4ec182a564105e5251696e5fdae7945616e1cd8d 100644
--- a/src/database/find.c
+++ b/src/database/find.c
@@ -31,7 +31,13 @@ database_search_database_init(volatile sqlite3 *db, struct lkt_search *ret)
     safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL_STMT_TEMPLATE,
                   ret->ka_uri.column_name, ret->msg_count, ret->continuation);
     SQLITE_PREPARE(db, ret->stmt, SQL_STMT, error);
-    SQLITE_BIND_TEXT(db, ret->stmt, 1, ret->ka_uri.value, error);
+    if (!ret->ka_uri.is_int) {
+        SQLITE_BIND_TEXT(db, ret->stmt, 1, ret->ka_uri.value, error);
+        LOG_DEBUG("DB", "%s", "Uri was a text");
+    } else {
+        SQLITE_BIND_INT(db, ret->stmt, 1, (int) ret->ka_uri.id, error);
+        LOG_DEBUG("DB", "%s", "Uri was a size_t");
+    }
     ret->db = db;
     return true;
 error:
@@ -60,7 +66,13 @@ database_search_playlist_init(volatile sqlite3 *db, struct lkt_search *ret)
                   ret->ka_uri.column_name, ret->msg_count, ret->continuation);
     SQLITE_PREPARE(db, ret->stmt, SQL_STMT, error);
     SQLITE_BIND_TEXT(db, ret->stmt, 1, ret->plt_name, error);
-    SQLITE_BIND_TEXT(db, ret->stmt, 2, ret->ka_uri.value, error);
+    if (!ret->ka_uri.is_int) {
+        SQLITE_BIND_TEXT(db, ret->stmt, 2, ret->ka_uri.value, error);
+        LOG_DEBUG("DB", "%s", "Uri was a text");
+    } else {
+        SQLITE_BIND_INT(db, ret->stmt, 2, (int) ret->ka_uri.id, error);
+        LOG_DEBUG("DB", "%s", "Uri was a size_t");
+    }
     ret->db = db;
     return true;
 error:
@@ -134,7 +146,13 @@ database_search_queue_init(volatile sqlite3 *db, struct lkt_search *ret)
     safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL_STMT_TEMPLATE,
                   ret->ka_uri.column_name, ret->msg_count, ret->continuation);
     SQLITE_PREPARE(db, ret->stmt, SQL_STMT, error);
-    SQLITE_BIND_TEXT(db, ret->stmt, 1, ret->ka_uri.value, error);
+    if (!ret->ka_uri.is_int) {
+        SQLITE_BIND_TEXT(db, ret->stmt, 1, ret->ka_uri.value, error);
+        LOG_DEBUG("DB", "%s", "Uri was a text");
+    } else {
+        SQLITE_BIND_INT(db, ret->stmt, 1, (int) ret->ka_uri.id, error);
+        LOG_DEBUG("DB", "%s", "Uri was a size_t");
+    }
     ret->db = db;
     return true;
 error:
diff --git a/src/uri.c b/src/uri.c
index 82364fc9eed7ba45aaf6318122fd34b9a17fc618..eaf64887a11c1a402e42baec6da808fee1191add 100644
--- a/src/uri.c
+++ b/src/uri.c
@@ -68,11 +68,14 @@ lkt_uri_from(struct lkt_uri *ret, char *const str)
     if (NULL == __prefix(str, ret))
         return false;
 
+    ret->is_int = false;
+
     if (ret->type == uri_id) {
         errno = 0;
-        ret->id = strtol(ret->value, NULL, 10);  /* Override */
+        ret->id = strtol(ret->value, NULL, 0);  /* Override */
         if (errno != 0)
             return false;
+        ret->is_int = true;
     }
 
     ret->_allocated = false;