diff --git a/inc/lektor/common.h b/inc/lektor/common.h
index eb1f91cc1544104be12df5acbb480b111463ab27..d49085cd46c9f0cfa8900f7a84ff58c505769090 100644
--- a/inc/lektor/common.h
+++ b/inc/lektor/common.h
@@ -50,12 +50,12 @@ extern EXIT_FUNCTION ___not_implemented(const char *func, char *file, int line);
 #define NOTHING                       /* Usefull to return nothing in previous macros */
 
 #define STRTOL_ERROR(integer) (errno == ERANGE || (errno != 0 && (integer) == 0))
-#define STRTOL(ret, str, endptr, err_flag)                      \
-    {                                                          \
-        err_flag = 0;                                           \
-        errno    = 0;                                           \
-        ret      = str == NULL ? 0 : strtol(str, &(endptr), 0); \
-        err_flag = errno != 0 || endptr == str;                 \
+#define STRTOL(ret, str, endptr, err_flag)                            \
+    {                                                                 \
+        (err_flag) = 0;                                               \
+        errno      = 0;                                               \
+        (ret)      = ((str) == NULL) ? 0 : strtol(str, &(endptr), 0); \
+        err_flag   = errno != 0 || endptr == str;                     \
     }
 
 /* Get a generic function pointer from any function pointer. */
@@ -216,7 +216,7 @@ char *safe_strncpy(char *dest, const char *src, size_t n);
 #define LKT_ALLOC(___struct___)        (___struct___ *)safe_malloc(sizeof(___struct___))
 #define LKT_ALLOC_STRUCT(___struct___) LKT_ALLOC(struct ___struct___)
 #define LKT_ALLOC_ARRAY(___struct___, ___count___) \
-    (___struct___ *)safe_malloc(sizeof(___struct___) * (___count___))
+    (___struct___ *)safe_malloc(sizeof(___struct___) * (size_t)(___count___))
 #define LKT_ALLOC_STRUCT_ARRAY(___struct___, ___count___) \
     LKT_ALLOC_ARRAY(struct ___struct___, ___count___)
 
diff --git a/inc/lektor/queue.h b/inc/lektor/queue.h
index 9b0729645a3599bad604cc2bad2403a5a1168665..2c2a0715caf537ff7f012bfb59f300ec9409f746 100644
--- a/inc/lektor/queue.h
+++ b/inc/lektor/queue.h
@@ -159,7 +159,7 @@ lkt_queue_handle(struct queue *queue)
     lkt_event ret = { 0 };
     if (!queue || !queue->last)
         goto end;
-    if (!(queue->contents[0].type & (unsigned int) queue->available) && queue->contents[0].type) {
+    if (!(queue->contents[0].type & (unsigned int)queue->available) && queue->contents[0].type) {
         LOG_WARN("QUEUE", "Event %d is not available", queue->contents[0].type);
         goto end;
     }
diff --git a/src/base/cmd.c b/src/base/cmd.c
index a481504d4ed051a6494f79ab9a0080109725d7c3..f0799c5003cbcef8e23e588f2ad06c31e80f2fc4 100644
--- a/src/base/cmd.c
+++ b/src/base/cmd.c
@@ -142,9 +142,11 @@ cmd_parse(struct cmd_opt *opts, int argc, const char **argv)
         goto not_found;
 
     /* This call should exit. */
-    struct cmd_args arguments = CMD_ARGS_NEXT_FROM(argc, argv);
-    call[1](&arguments);
-    abort();
+    {
+        struct cmd_args arguments = CMD_ARGS_NEXT_FROM(argc, argv);
+        call[1](&arguments);
+        abort();
+    }
 
 not_found:
     /* The default function */
diff --git a/src/base/commands.c b/src/base/commands.c
index 758d52d7b09bd691e4e723281da5249ea288d2d1..1198cc73eab9b7f0ae180ce07ea102db3a821067 100644
--- a/src/base/commands.c
+++ b/src/base/commands.c
@@ -23,7 +23,7 @@ command_restart(struct lkt_state *srv, size_t c, char UNUSED *__argv[LKT_MESSAGE
 
     database_queue_state(srv->db, &sta);
     env_set(LKT_ENV_RESTART, "1");
-    int len = long_length(LONG_MAX);
+    size_t len = (size_t)long_length(LONG_MAX);
     if (len > 0) {
         char *pos = LKT_ALLOC_ARRAY(char, len);
         safe_snprintf(pos, len, "%d", sta.current);
@@ -82,7 +82,7 @@ command_config(struct lkt_state *srv, size_t c, char UNUSED *argv[LKT_MESSAGE_AR
     struct lkt_message *out;
     char db_file[LKT_LINE_MAX];
     memset(db_file, 0, sizeof(db_file));
-    database_config_get(srv->db, "database", "db_path", db_file, LKT_LINE_MAX);
+    database_config_get_text(srv->db, "database", "db_path", db_file, LKT_LINE_MAX);
     out = lkt_message_new_fmt("max_clients: %ld\n"
                               "db_file: %s\n"
                               "music_directory: %s\n",
@@ -277,7 +277,7 @@ __play_that_file(struct lkt_state *win, int pos)
 bool
 command_play(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
 {
-    char *endptr, err;
+    char *endptr = NULL, err;
     long pos = 1;
     struct lkt_queue_state queue_state;
 
@@ -301,7 +301,7 @@ command_play(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
     srv->mpd_idle_events |= MPD_IDLE_PLAYER;
 
     /* Hooks */
-    if (__play_that_file(srv, pos)) {
+    if (__play_that_file(srv, (int)pos)) {
         config_handle_hook(srv->db, "queue_begin");
         config_handle_hook(srv->db, "kara_load");
         return true;
@@ -320,8 +320,9 @@ command_dump(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
 bool
 command_playid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
 {
-    char *endptr, err;
+    char *endptr = NULL;
     int pos = 0;
+    char err;
     long id;
 
     /* Argument handle. */
@@ -373,7 +374,7 @@ command_addid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
     RETURN_UNLESS(args, "Invalid argument", false);
     bool error = false;
     FOR_EACH_ARGUMENT (i, args) {
-        error |= (!database_queue_add_id(srv->db, strtol(args[i], NULL, 0), 1));
+        error |= (!database_queue_add_id(srv->db, (int)strtol(args[i], NULL, 0), 1));
     }
     srv->mpd_idle_events |= MPD_IDLE_PLAYLIST;
     return !error;
@@ -440,7 +441,7 @@ command_del(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
               false);
 
     srv->mpd_idle_events |= MPD_IDLE_PLAYLIST;
-    return database_queue_del_pos(srv->db, pos);
+    return database_queue_del_pos(srv->db, (int)pos);
 }
 
 bool
@@ -458,14 +459,14 @@ command_delid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
     RETURN_IF(id == (long)uri && !__skip_current(srv), "Failed to skip current kara", false);
 
     srv->mpd_idle_events |= MPD_IDLE_PLAYLIST;
-    return database_queue_del_id(srv->db, id);
+    return database_queue_del_id(srv->db, (int)id);
 }
 
 bool
 command_move(struct lkt_state UNUSED *srv, char *args[LKT_MESSAGE_ARGS_MAX])
 {
     long from, to;
-    char *endptr, err;
+    char *endptr = NULL, err;
 
     RETURN_UNLESS(args && args[0] && args[1], "Invalid argument", false);
 
@@ -478,7 +479,7 @@ command_move(struct lkt_state UNUSED *srv, char *args[LKT_MESSAGE_ARGS_MAX])
     RETURN_IF(err, "STRTOL failed", false);
 
     srv->mpd_idle_events |= MPD_IDLE_PLAYLIST;
-    return database_queue_move(srv->db, from, to);
+    return database_queue_move(srv->db, (int)from, (int)to);
 }
 
 static bool
@@ -512,8 +513,8 @@ bool
 command_swapid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
 {
     RETURN_UNLESS(args && args[0] && args[1], "Invalid argument", false);
-    int from = database_queue_probe_id(srv->db, strtol(args[0], NULL, 0));
-    int to   = database_queue_probe_id(srv->db, strtol(args[1], NULL, 0));
+    int from = database_queue_probe_id(srv->db, (int)strtol(args[0], NULL, 0));
+    int to   = database_queue_probe_id(srv->db, (int)strtol(args[1], NULL, 0));
     return __swap_positions(srv, from, to);
 }
 
@@ -533,7 +534,7 @@ command_swap(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
     STRTOL(to, args[1], endptr, err);
     RETURN_IF(err, "STRTOL failed", false);
 
-    return __swap_positions(srv, from, to);
+    return __swap_positions(srv, (int)from, (int)to);
 }
 
 bool
@@ -595,7 +596,7 @@ command_noidle(struct lkt_state *srv, size_t c, char UNUSED *args[LKT_MESSAGE_AR
 }
 
 /* Functions for the searchadd and the search mpd commands */
-bool
+PRIVATE_FUNCTION bool
 lkt_callback_send_row_v1(void *_args, int pos_len, int pos, int id, int id_len, const char *sql_row)
 {
     struct lkt_callback *args = (struct lkt_callback *)_args;
@@ -605,14 +606,14 @@ lkt_callback_send_row_v1(void *_args, int pos_len, int pos, int id, int id_len,
     return true;
 }
 
-bool
+PRIVATE_FUNCTION bool
 lkt_callback_send_row_v2(struct lkt_state *srv, size_t c, int id, int id_len, const char *sql_row)
 {
     lkt_state_send(srv, c, lkt_message_new_fmt("%*d %s\n", id_len, id, sql_row));
     return true;
 }
 
-bool
+PRIVATE_FUNCTION bool
 lkt_callback_send_list_plts(struct lkt_state *srv, size_t c, const char *plt_name)
 {
     /* If the playlist is named OK or ACK... */
@@ -624,23 +625,25 @@ static bool
 command_findid(struct lkt_state *srv, size_t c, char *id_str)
 {
     uint64_t kara_duration;
-    struct kara_metadata kara = {};
+    struct kara_metadata kara;
     char filepath[PATH_MAX]   = { 0 };
     long id                   = strtol(id_str, NULL, 0); /* XXX: Must be valid here */
     int s = 0, h = 0, m = 0;
 
-    if (!database_kara_by_id(srv->db, id, &kara, filepath)) {
+    memset(&kara, 0, sizeof(kara));
+
+    if (!database_kara_by_id(srv->db, (int)id, &kara, filepath)) {
         LOG_ERROR("COMMAND", "Can't get a kara with id %ld", id);
         return false;
     }
 
-    if (!database_get_kara_mtime_id(srv->db, id, &kara_duration)) {
+    if (!database_get_kara_mtime_id(srv->db, (int)id, &kara_duration)) {
         LOG_WARN("COMMAND", "Can't get duration for kara %ld", id);
         kara_duration = 0;
     }
 
     if (kara_duration < (uint64_t)INT_MAX) {
-        s = kara_duration;
+        s = (int)kara_duration;
         h = s / 3600;
         s = s % 3600;
         m = s / 60;
@@ -665,7 +668,7 @@ command_findid(struct lkt_state *srv, size_t c, char *id_str)
 static inline bool
 __iter_search(struct lkt_search *search)
 {
-    int count;
+    size_t count;
     for (count = 0; database_search_iter(search); ++count)
         continue;
 
@@ -673,7 +676,7 @@ __iter_search(struct lkt_search *search)
         struct lkt_state *srv = database_search_get_srv(search);
         size_t client         = database_search_get_client(search);
         size_t continuation   = database_search_get_continuation(search);
-        lkt_set_continuation(srv, client, continuation + count);
+        lkt_set_continuation(srv, client, (int)(continuation + count));
     }
 
     else
@@ -686,10 +689,10 @@ bool
 command_find(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX], long continuation,
              database_search_init_func init)
 {
-    int count;
+    long count;
     struct lkt_uri find_uri = { .type = URI_NULL };
     struct lkt_search *search =
-        database_search_new(srv, c, continuation, FUNCTION_POINTER(lkt_callback_send_row_v2));
+        database_search_new(srv, c, (int)continuation, FUNCTION_POINTER(lkt_callback_send_row_v2));
     database_search_set_uri(search, &find_uri);
     database_search_set_name(search, args[0]);
 
@@ -743,7 +746,8 @@ command_set_playback_option(struct lkt_state *srv, size_t UNUSED c, LKT_PLAYBACK
 {
     RETURN_UNLESS(srv, "Invalid argument", false);
     long val;
-    char *endptr, ret = false;
+    char *endptr = NULL;
+    char ret = false;
 
     if (args == NULL || args[0] == NULL)
         val = 0;
@@ -758,24 +762,23 @@ command_set_playback_option(struct lkt_state *srv, size_t UNUSED c, LKT_PLAYBACK
             val = 100;
     }
 
-    switch (opt) {
-    case LKT_PLAYBACK_OPTION_RANDOM: ret = database_config_queue(srv->db, "random", val); break;
-
-    case LKT_PLAYBACK_OPTION_SINGLE: ret = database_config_queue(srv->db, "single", val); break;
-
-    case LKT_PLAYBACK_OPTION_CONSUME: ret = database_config_queue(srv->db, "consume", val); break;
+    const int val_int = (int)val;
 
-    case LKT_PLAYBACK_OPTION_REPEAT: ret = database_config_queue(srv->db, "repeat", val); break;
+    switch (opt) {
+    case LKT_PLAYBACK_OPTION_RANDOM: ret = database_config_queue(srv->db, "random", val_int); break;
+    case LKT_PLAYBACK_OPTION_SINGLE: ret = database_config_queue(srv->db, "single", val_int); break;
+    case LKT_PLAYBACK_OPTION_CONSUME: ret = database_config_queue(srv->db, "consume", val_int); break;
+    case LKT_PLAYBACK_OPTION_REPEAT: ret = database_config_queue(srv->db, "repeat", val_int); break;
 
     case LKT_PLAYBACK_OPTION_VOLUME:
-        ret = database_config_queue(srv->db, "volume", val);
-        LOG_INFO("COMMAND", "Set volume to %ld", val);
-        ret &= !MOD_CALL(srv->window_mod, "set_volume", val);
+        ret = database_config_queue(srv->db, "volume", val_int);
+        LOG_INFO("COMMAND", "Set volume to %ld", val_int);
+        ret &= !MOD_CALL(srv->window_mod, "set_volume", val_int);
         srv->mpd_idle_events |= MPD_IDLE_MIXER;
         break;
 
     case LKT_PLAYBACK_OPTION_NONE:
-    default: break;
+        break;
     }
 
     if (ret)
@@ -799,7 +802,7 @@ command_set_pos(struct lkt_state *srv, int index)
 bool
 command_seek(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
 {
-    int pos, seconds, err_flag = 0;
+    long pos, seconds, err_flag = 0;
     char *endptr = NULL;
     RETURN_UNLESS(args && args[0] && args[1], "Invalid arguments", false);
 
@@ -809,7 +812,7 @@ command_seek(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
     STRTOL(seconds, args[1], endptr, err_flag);
     RETURN_IF(err_flag, "Failed to get a number!", false);
 
-    RETURN_UNLESS(command_set_pos(srv, pos), "Failed to get to the right file", false);
+    RETURN_UNLESS(command_set_pos(srv, (int)pos), "Failed to get to the right file", false);
     srv->mpd_idle_events |= MPD_IDLE_PLAYER;
     return !MOD_CALL(srv->window_mod, "set_position", seconds);
 }
@@ -817,8 +820,9 @@ command_seek(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
 bool
 command_seekid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
 {
-    int id, seconds, err_flag = 0, position;
+    long id, seconds, err_flag = 0;
     char *endptr = NULL;
+    int position;
     RETURN_UNLESS(args && args[0] && args[1], "Invalid arguments", false);
 
     STRTOL(id, args[0], endptr, err_flag);
@@ -827,12 +831,12 @@ command_seekid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX])
     STRTOL(seconds, args[1], endptr, err_flag);
     RETURN_IF(err_flag, "Failed to get a number!", false);
 
-    RETURN_UNLESS(database_get_kara_position(srv->db, id, &position), "Can't find kara in queue",
+    RETURN_UNLESS(database_get_kara_position(srv->db, (int)id, &position), "Can't find kara in queue",
                   false);
 
     srv->mpd_idle_events |= MPD_IDLE_PLAYER;
-    RETURN_UNLESS(command_set_pos(srv, position), "Failed to set position to right kara", false);
-    return !MOD_CALL(srv->window_mod, "set_position", seconds);
+    RETURN_UNLESS(command_set_pos(srv, (int)position), "Failed to set position to right kara", false);
+    return !MOD_CALL(srv->window_mod, "set_position", (int)seconds);
 }
 
 bool
diff --git a/src/base/common.c b/src/base/common.c
index 30595bb77fdc711c10c0004caecc76fb44728707..45e0a6fcb1471828e4c5e7177fa9fa7a5f8dbf1d 100644
--- a/src/base/common.c
+++ b/src/base/common.c
@@ -15,12 +15,12 @@ ___lkt_abort(void)
 
 /* Assert function */
 
-static void
+PRIVATE_FUNCTION void
 ___no_assert(const char UNUSED *f, int UNUSED l, const char UNUSED *fn, const char UNUSED *m)
 {
 }
 
-EXIT_FUNCTION
+PRIVATE_FUNCTION EXIT_FUNCTION
 ___yes_assert(const char *file, int line, const char *func, const char *msg)
 {
     LOG_ERROR("ASSERT", "Assertion failed: %s:%s:%d: %s", file, func, line, msg);
@@ -48,7 +48,12 @@ void
 lkt_set_log_level(LOG_LEVEL lvl)
 {
     assert(lvl != ___LAST_UNUSED_LOG_LEVEL);
-    ___log_level = lvl;
+    if (lvl <= LOG_LEVEL_ERROR)
+        ___log_level = LOG_LEVEL_ERROR;
+    else if (lvl >= LOG_LEVEL_DEBUG)
+        ___log_level = LOG_LEVEL_DEBUG;
+    else
+        ___log_level = lvl;
 }
 
 LOG_LEVEL
diff --git a/src/base/config.c b/src/base/config.c
index b715c6b1944b564ed98968f8f5e719eea4c76e62..eaa1159c2c04c9b7f5c7fdda83e5e33260435444 100644
--- a/src/base/config.c
+++ b/src/base/config.c
@@ -58,7 +58,7 @@ __set_log_level(const char *name, const char *level)
     else if (STR_MATCH(level, "debug"))
         lkt_set_log_level(LOG_LEVEL_DEBUG);
     else
-        lkt_set_log_level(strtol(level, NULL, 0));
+        lkt_set_log_level((LOG_LEVEL)(int)strtol(level, NULL, 0));
 
     LOG_INFO("CONFIG", "Log level set to %d", lkt_get_log_level());
 }
@@ -94,9 +94,9 @@ ini_parse(const char *path, lkt_db *db)
             end = &start[1 + strcspn(start + 1, "]")];
             if (end[0] == ']') {
                 end[0] = '\0';
-                len    = strlen(&start[1]);
+                len    = (int)strlen(&start[1]);
                 len    = MIN(len + 1, LKT_LINE_MAX);
-                memcpy(section, &start[1], len);
+                memcpy(section, &start[1], (size_t)len);
                 section[LKT_LINE_MAX - 1] = '\0';
             }
 
diff --git a/src/base/json.c b/src/base/json.c
index cf69ecd9f96c7d7fb76f12fbfeeab3a4add9105b..700ef60a0a0f9457f2893b254157dcca339625d9 100644
--- a/src/base/json.c
+++ b/src/base/json.c
@@ -24,7 +24,7 @@
                 }                                                               \
                 break;                                                          \
             }                                                                   \
-            len      = (end - str);                                             \
+            len      = (size_t)(end - str);                                     \
             is_paren = 1;                                                       \
         } else                                                                  \
             len = strcspn(str, __JSON_SPACE __JSON_END);                        \
@@ -53,7 +53,7 @@
                 }                                                     \
                 break;                                                \
             }                                                         \
-            len      = (end - str);                                   \
+            len      = (size_t)(end - str);                           \
             is_paren = 1;                                             \
         } else                                                        \
             len = strcspn(str, __JSON_SPACE __JSON_BEGIN __JSON_END); \
@@ -121,14 +121,14 @@ __encode_codepoint(char p[4], int32_t codepoint)
     }
 
     if (n == 1)
-        p[0] = codepoint;
+        p[0] = (char)codepoint;
 
     else {
         for (i = n - 1; i > 0; i--) {
-            p[i] = 0x80 | (0x3f & codepoint);
+            p[i] = (char)(0x80 | (0x3f & codepoint));
             codepoint >>= 6;
         }
-        p[0] = (0xf00 >> n) | codepoint;
+        p[0] = (char)((0xf00 >> n) | codepoint);
     }
 
     return n;
@@ -169,7 +169,7 @@ __decode_json(char *string, size_t len)
             }
             size = 6; /* \u + 4 hex digits */
             __hex_val(&offset[2], &codepoint);
-            written = __encode_codepoint(offset, codepoint);
+            written = __encode_codepoint(offset, (int32_t)codepoint);
             break;
 
         /* Oups */
@@ -180,7 +180,8 @@ __decode_json(char *string, size_t len)
 
         /* Now move the rest of the string of (size - written) characters*/
         if (written != size) {
-            memmove(&offset[written], &offset[size], (string_end - &offset[size]) * sizeof(char));
+            memmove(&offset[written], &offset[size],
+                    (size_t)(string_end - &offset[size]) * sizeof(char));
             string_end -= (size - written);
             string_end[0] = '\0';
         }
@@ -233,7 +234,7 @@ json_parse(const char *str, int asked_level, json_parse_callback call, void *use
         if (level <= 0)
             return 0;
     }
-    return 1;
+    LOG_UNREACHABLE;
 }
 LKT_POP
 
@@ -270,5 +271,5 @@ json_parse_get_count(const char *str, int asked_level)
         if (level <= 0)
             return ret_len;
     }
-    return -1;
+    LOG_UNREACHABLE;
 }
diff --git a/src/base/launch.c b/src/base/launch.c
index a83ac4f4f8b9b558a9fd9c87059be3509b41e847..dd34c736079f0293be88ea1c1caa8ea04485a481 100644
--- a/src/base/launch.c
+++ b/src/base/launch.c
@@ -5,6 +5,7 @@
 #include <lektor/common.h>
 #include <lektor/database.h>
 #include <lektor/config.h>
+#include <lektor/launch.h>
 
 #include <wait.h>
 #include <signal.h>
diff --git a/src/base/segv.c b/src/base/segv.c
index 9304ef80e89c2c58c7ee94946eec2757e1ab198f..0c1ad1d7b7df9207822140d87e7eac8236b1a18d 100644
--- a/src/base/segv.c
+++ b/src/base/segv.c
@@ -3,6 +3,7 @@
 /* Try to print the backtrace when a segfault occures if possible */
 
 #include <lektor/common.h>
+#include <lektor/segv.h>
 #include <execinfo.h>
 #include <signal.h>
 
diff --git a/src/base/uri.c b/src/base/uri.c
index 1d73bec1ba10e3a73337326bb11d942cbe31774e..2876834d1ac3a6d9005669d4bd3ba9ae181f449d 100644
--- a/src/base/uri.c
+++ b/src/base/uri.c
@@ -48,7 +48,8 @@ __prefix(char *str, struct lkt_uri *ret)
         return NULL;
 
     /* No place for the '://' separator */
-    if (len - (val - str) < 3)
+    assert((val - str) >= 0);
+    if (len - (size_t)(val - str) < 3)
         return NULL;
 
     val += 3;
@@ -66,7 +67,7 @@ lkt_uri_from_single(struct lkt_uri *ret, char *const str)
 
     if (ret->type == URI_ID) {
         errno   = 0;
-        ret->id = strtol(ret->value, NULL, 0); /* Override */
+        ret->id = (size_t)strtol(ret->value, NULL, 0); /* Override */
         if (errno != 0)
             return false;
         ret->is_int = true;
@@ -133,7 +134,10 @@ __lkt_to_str(struct lkt_uri *uri, char *ret, size_t len)
     case URI_AUTHOR: safe_snprintf(ret, len, "author=%s", (char *)uri->value); break;
     case URI_CATEGORY: safe_snprintf(ret, len, "cat=%s", (char *)uri->value); break;
     case URI_QUERY: safe_snprintf(ret, len, "search=%s", (char *)uri->value); break;
-    default:
+
+    case URI_NULL:
+    case URI_PLAYLIST:
+    case URI_LANGUAGE:
         LOG_WARN("URI",
                  "type %d may not be supported by kurisu, "
                  "generate an error",
diff --git a/src/database/cache.c b/src/database/cache.c
index 7e06ce51c39f5cbcafe7293688cc72a16e22a35d..f35453f05b8e91b24c51e20e2056ee8e45d17251 100644
--- a/src/database/cache.c
+++ b/src/database/cache.c
@@ -145,12 +145,12 @@ database_cache_kara(lkt_db *db, int id)
         sqlite3_stmt *stmt = NULL;                                                                 \
         /* Update the disk cache */                                                                \
         SQLITE_PREPARE(db, stmt, "UPDATE kara SET cached_" #what " = ? WHERE id = ?;", error);     \
-        SQLITE_BIND_INT(db, stmt, 1, (int)what, error);                                                 \
+        SQLITE_BIND_INT(db, stmt, 1, (int)what, error);                                            \
         SQLITE_BIND_INT(db, stmt, 2, id, error);                                                   \
         SQLITE_STEP_OK(db, stmt, error);                                                           \
         /* Update the memory cache */                                                              \
         SQLITE_PREPARE(db, stmt, "UPDATE kara_cache SET " #what " = ? WHERE kara_id = ?;", error); \
-        SQLITE_BIND_INT(db, stmt, 1, (int)what, error);                                                 \
+        SQLITE_BIND_INT(db, stmt, 1, (int)what, error);                                            \
         SQLITE_BIND_INT(db, stmt, 2, id, error);                                                   \
         SQLITE_STEP_OK(db, stmt, error);                                                           \
         ret_code = true;                                                                           \
@@ -170,7 +170,7 @@ database_cache_kara(lkt_db *db, int id)
         SQLITE_PREPARE(db, stmt, "SELECT " #what " FROM kara_cache WHERE kara_id = ?;", error); \
         SQLITE_BIND_INT(db, stmt, 1, id, error);                                                \
         SQLITE_STEP_ROW(db, stmt, error);                                                       \
-        *what = (uint64_t)sqlite3_column_int64(stmt, 0);                                                  \
+        *what = (uint64_t)sqlite3_column_int64(stmt, 0);                                        \
         if ((*what) == 0 && !retry_once) {                                                      \
             database_cache_kara(db, id);                                                        \
             retry_once = true;                                                                  \
diff --git a/src/database/find.c b/src/database/find.c
index b4986c76d04413e565514d9eb0ea98ba64b4662b..dc0b1096303fd25faef8e89b9ddff55d069a64df 100644
--- a/src/database/find.c
+++ b/src/database/find.c
@@ -363,9 +363,9 @@ database_search_iter(struct lkt_search *item)
     case lkt_search_listplaylist:
         sql_row = sqlite3_column_chars(item->stmt, 0); /* Name */
         return ((lkt_search_listplaylist_func)item->call)(item->srv, item->c, sql_row);
-
     }
-    LOG_WARN("DB", "Search type %d is not implemented", item->type); goto end;
+    LOG_WARN("DB", "Search type %d is not implemented", item->type);
+    goto end;
 
 end:
     database_search_free(item);
diff --git a/src/main/luka.c b/src/main/luka.c
index 96587164ee4554bf8b9f11ca041ce8f962896895..5e5c994b7bec9e520ef8639337a2a91433bea936 100644
--- a/src/main/luka.c
+++ b/src/main/luka.c
@@ -67,12 +67,12 @@ ___setup(void)
             "Can't find a config file, did you run lektord at least once?");
     FAIL_IF(config_new(__db, path), "Failed to read the config");
 
-    database_config_get(__db, "database", "db_path", path, PATH_MAX);
+    database_config_get_text(__db, "database", "db_path", path, PATH_MAX);
     FAIL_UNLESS(database_open(__db, path, true), "Can't open database %s", path);
     FAIL_IF(atexit(___cleanup_db), "Failed to register cleanup function");
     LOG_INFO("SETUP", "Setup of database is OK");
 
-    database_config_get(__db, "repo", "module", path, PATH_MAX);
+    database_config_get_text(__db, "repo", "module", path, PATH_MAX);
     LOG_INFO("SETUP", "Try to import repo module from '%s'", path);
     reg_import(path, &__mod_repo.reg, &__mod_repo.handle);
     FAIL_IF(MOD_CALL(__mod_repo, "new", &__queue, &__db), "Failed to init repo module %s", path);
diff --git a/src/mkv/mkv.c b/src/mkv/mkv.c
index 3dbf8f8bcc6c931e4d51b0bae6061e282f3fe6d6..f95ea53a30bdfd306ad0709229b87c18c230fdf3 100644
--- a/src/mkv/mkv.c
+++ b/src/mkv/mkv.c
@@ -277,7 +277,7 @@ mkv_read_seek(struct bufferfd *bf, struct mkv_seek *res)
         if ((n = mkv_read_element_id(bf, &eid)) < 0)
             return -1;
 
-        data_len -= n;
+        data_len -= (uint64_t)n;
 
         if (eid == EBML_MKV_SEEK_ID) {
             uint8_t seek_id[4];
@@ -289,19 +289,19 @@ mkv_read_seek(struct bufferfd *bf, struct mkv_seek *res)
                 return -1;
 
             res->id = be_uint32_t(seek_id, elength);
-            data_len -= n + elength;
+            data_len -= (uint64_t)n + elength;
             got_id = 1;
         } else if (eid == EBML_MKV_SEEK_POS) {
             if ((n = mkv_read_uint(bf, &res->pos)) < 0)
                 return -1;
 
-            data_len -= n;
+            data_len -= (uint64_t)n;
             got_pos = 1;
         } else {
             if ((n = mkv_skip_element(bf)) < 0)
                 return -1;
 
-            data_len -= n;
+            data_len -= (uint64_t)n;
         }
     }
 
@@ -337,7 +337,7 @@ mkv_read_simple_tag(struct bufferfd *bf, struct mkv_simple_tag *res)
         if (n < 0)
             return -1;
 
-        data_len -= n;
+        data_len -= (uint64_t)n;
 
         if (eid == EBML_MKV_TAG_NAME)
             n = mkv_read_utf8(bf, LEKTOR_TAG_MAX, res->name);
@@ -349,7 +349,7 @@ mkv_read_simple_tag(struct bufferfd *bf, struct mkv_simple_tag *res)
         if (n < 0)
             return -1;
 
-        data_len -= (size_t)n < data_len ? (size_t)n : data_len;
+        data_len -= (uint64_t)n < data_len ? (uint64_t)n : data_len;
     }
 
     return consumed;
@@ -373,20 +373,20 @@ mkv_read_targets(struct bufferfd *bf, uint64_t *target_type_value)
         if ((n = mkv_read_element_id(bf, &eid)) < 0)
             return -1;
 
-        data_len -= n;
+        data_len -= (uint64_t)n;
 
         if (eid == EBML_MKV_TAG_TTV) {
             if ((n = mkv_read_uint(bf, target_type_value)) < 0)
                 return -1;
 
-            data_len -= n;
+            data_len -= (uint64_t)n;
             break;
         }
 
         if ((n = mkv_skip_element(bf)) < 0)
             return -1;
 
-        data_len -= (size_t)n < data_len ? (size_t)n : data_len;
+        data_len -= (uint64_t)n < data_len ? (uint64_t)n : data_len;
     }
 
     bufferfd_skip(bf, data_len);
@@ -418,7 +418,7 @@ mkv_read_tag(struct bufferfd *bf, struct mkv_tag *res)
         if ((n = mkv_read_element_id(bf, &eid)) < 0)
             return -1;
 
-        data_len -= n;
+        data_len -= (uint64_t)n;
 
         if (eid == EBML_MKV_TAG_TARGETS) {
             if ((n = mkv_read_targets(bf, &res->target_type_value)) < 0)
@@ -433,7 +433,7 @@ mkv_read_tag(struct bufferfd *bf, struct mkv_tag *res)
                 return -1;
         }
 
-        data_len -= n;
+        data_len -= (uint64_t)n;
     }
 
     bufferfd_skip(bf, data_len);
@@ -458,7 +458,7 @@ mkv_seek(struct bufferfd *bf, size_t header_len, size_t what)
         if ((n = mkv_read_element_id(bf, &eid)) < 0)
             return -1;
 
-        seekhead_len -= n;
+        seekhead_len -= (uint64_t)n;
 
         if (eid == EBML_MKV_SEEK)
             n = mkv_read_seek(bf, &s);
@@ -468,7 +468,7 @@ mkv_seek(struct bufferfd *bf, size_t header_len, size_t what)
         if (n < 0)
             return -1;
 
-        seekhead_len -= n;
+        seekhead_len -= (uint64_t)n;
 
         if (eid == EBML_MKV_SEEK && s.id == what)
             return bufferfd_seek(bf, s.pos + header_len);
@@ -531,13 +531,13 @@ kara_read_tags(struct bufferfd *bf, struct kara_metadata *dst)
         if ((n = mkv_read_element_id(bf, &eid)) < 0 || eid != EBML_MKV_TAG)
             return -1;
 
-        data_len -= n;
+        data_len -= (uint64_t)n;
 
         if ((n = mkv_read_tag(bf, &t)) < 0)
             return -1;
 
         kara_add_tag(dst, &t);
-        data_len -= n;
+        data_len -= (uint64_t)n;
     }
 
     return 0;
@@ -558,7 +558,7 @@ kara_read_segment_info(struct bufferfd *bf, double *len)
         if ((n = mkv_read_element_id(bf, &eid)) < 0)
             return -1;
 
-        data_len -= n;
+        data_len -= (uint64_t)n;
 
         if (eid == EBML_MKV_SEG_DURATION) {
             if ((n = mkv_read_float(bf, len)) < 0)
@@ -566,20 +566,10 @@ kara_read_segment_info(struct bufferfd *bf, double *len)
             LOG_DEBUG("MKV", "Got segment duration %f", *len);
         }
 
-#if 0
-        /* Dividing the EBML_MKV_SEG_DURATION by 10 should give the time in seconds */
-        uint64_t scale = 1;
-        else if (eid == EBML_MKV_SEG_TS_SCALE) {
-            if ((n = mkv_read_uint(bf, &scale)) < 0)
-                return -1;
-            LOG_DEBUG("MKV", "Got segment ts scale %zu", scale);
-        }
-#endif
-
         else if ((n = mkv_skip_element(bf)) < 0)
             return -1;
 
-        data_len -= n;
+        data_len -= (uint64_t)n;
     }
 
     *len /= 10; /* In s */
diff --git a/src/mkv/utils.c b/src/mkv/utils.c
index cec0b2b0df1ef3f9509f7bd5345013751144f5f2..b5a48feb181def4d648cc93456549efb908fffd0 100644
--- a/src/mkv/utils.c
+++ b/src/mkv/utils.c
@@ -8,7 +8,8 @@ mdtcat(struct kara_metadata *mdt, char **ret)
 {
     size_t size = strlen(mdt->song_name) + strlen(mdt->source_name) + strlen(mdt->category) +
                   strlen(mdt->language) + strlen(mdt->author_name) + strlen(mdt->song_type) +
-                  /* Null byte */ 1 + /* Separators */ 12 + 5 + (size_t)long_length(mdt->song_number);
+                  /* Null byte */ 1 + /* Separators */ 12 + 5 +
+                  (size_t)long_length(mdt->song_number);
     *ret = LKT_ALLOC_ARRAY(char, size);
     safe_snprintf(*ret, size, "%s - %s / %s - %s%d - %s [%s]", mdt->category, mdt->language,
                   mdt->source_name, mdt->song_type, mdt->song_number, mdt->song_name,
diff --git a/src/mkv/write.c b/src/mkv/write.c
index bb680d8af623ed13140fa2b7117ea7d1a2e89964..bc6b3ca540568d067c14a1bad412c4e655c8ddb7 100644
--- a/src/mkv/write.c
+++ b/src/mkv/write.c
@@ -135,10 +135,10 @@ metadata_from_path(char *const mkvfile, struct kara_metadata *meta)
     static regex_t regex;
     static int regex_init = 0;
     const size_t nmatch   = 10;
+    int sta               = false;
     regmatch_t pmatch[nmatch];
-    int reti, sta = false;
+    int ret;
     char msgbuf[LEKTOR_TAG_MAX];
-    char *endptr;
 
 #pragma message(TODO "Import the types and categories from the db")
     static const char *rgx = "^/(.+)/(vo|va|amv|cdg|autres|vtuber|vocaloid)/"
@@ -153,29 +153,29 @@ metadata_from_path(char *const mkvfile, struct kara_metadata *meta)
     memset(meta, 0, sizeof(struct kara_metadata));
     memset(msgbuf, 0, LEKTOR_TAG_MAX * sizeof(char));
 
-    reti = regexec(&regex, mkvfile, nmatch, pmatch, 0);
-    if (!reti) {
+    ret = regexec(&regex, mkvfile, nmatch, pmatch, 0);
+    if (!ret) {
         /* Match */
         // clang-format off
-        memcpy(meta->category,    mkvfile + pmatch[2].rm_so, pmatch[2].rm_eo - pmatch[2].rm_so);
-        memcpy(meta->language,    mkvfile + pmatch[3].rm_so, pmatch[3].rm_eo - pmatch[3].rm_so);
-        memcpy(meta->author_name, mkvfile + pmatch[4].rm_so, pmatch[4].rm_eo - pmatch[4].rm_so);
-        memcpy(meta->source_name, mkvfile + pmatch[5].rm_so, pmatch[5].rm_eo - pmatch[5].rm_so);
-        memcpy(meta->song_type,   mkvfile + pmatch[6].rm_so, pmatch[6].rm_eo - pmatch[6].rm_so);
-        memcpy(msgbuf,            mkvfile + pmatch[7].rm_so, pmatch[7].rm_eo - pmatch[7].rm_so);
-        memcpy(meta->song_name,   mkvfile + pmatch[8].rm_so, pmatch[8].rm_eo - pmatch[8].rm_so);
+        memcpy(meta->category,    mkvfile + pmatch[2].rm_so, (size_t)(pmatch[2].rm_eo - pmatch[2].rm_so));
+        memcpy(meta->language,    mkvfile + pmatch[3].rm_so, (size_t)(pmatch[3].rm_eo - pmatch[3].rm_so));
+        memcpy(meta->author_name, mkvfile + pmatch[4].rm_so, (size_t)(pmatch[4].rm_eo - pmatch[4].rm_so));
+        memcpy(meta->source_name, mkvfile + pmatch[5].rm_so, (size_t)(pmatch[5].rm_eo - pmatch[5].rm_so));
+        memcpy(meta->song_type,   mkvfile + pmatch[6].rm_so, (size_t)(pmatch[6].rm_eo - pmatch[6].rm_so));
+        memcpy(msgbuf,            mkvfile + pmatch[7].rm_so, (size_t)(pmatch[7].rm_eo - pmatch[7].rm_so));
+        memcpy(meta->song_name,   mkvfile + pmatch[8].rm_so, (size_t)(pmatch[8].rm_eo - pmatch[8].rm_so));
         // clang-format on
-    } else if (REG_NOMATCH == reti) {
+    } else if (REG_NOMATCH == ret) {
         LOG_ERROR("MKV", "No match for: %s", mkvfile);
         goto error;
     } else {
-        regerror(reti, &regex, msgbuf, sizeof(msgbuf));
+        regerror(ret, &regex, msgbuf, sizeof(msgbuf));
         LOG_ERROR("MKV", "Failed to execute regex: %s", msgbuf);
         goto error;
     }
 
-    STRTOL(meta->song_number, msgbuf, endptr, reti);
-    if (reti || meta->song_number <= 0)
+    ret = (int)strtol(msgbuf, NULL, 0);
+    if (ret || meta->song_number <= 0)
         meta->song_number = 1;
 
     sta = true;
diff --git a/src/module/module_repo.c b/src/module/module_repo.c
index 4c704f261b514c92b43709918adb5d861deaf9c6..ad8e1994a81bf5cbac39efcd2b57d7027baf2901 100644
--- a/src/module/module_repo.c
+++ b/src/module/module_repo.c
@@ -555,7 +555,7 @@ ___worker_rescan(void UNUSED *worker, void *___repo)
     char kara_prefix[LKT_LINE_MAX];
     lkt_queue_send(repo->queue, LKT_EVENT_DB_UPDATING, LKT_DB_UPDATING_PROGRESS);
 
-    if (!database_config_get(repo->db, "database", "kara_dir", kara_prefix, LKT_LINE_MAX)) {
+    if (!database_config_get_text(repo->db, "database", "kara_dir", kara_prefix, LKT_LINE_MAX)) {
         LOG_ERROR("REPO", "Failed to get kara prefix from config");
         return NULL;
     }
@@ -741,7 +741,7 @@ module_repo_new(struct module_repo_internal *repo_, struct queue *queue, lkt_db
         ++___curl_init;
 
     int obfuscate;
-    if (!database_config_get(db, "repo", "obfuscate", &obfuscate)) {
+    if (!database_config_get_int(db, "repo", "obfuscate", &obfuscate)) {
         LOG_ERROR("REPO", "Configuration invalid, but it should not be at this point");
         exit(EXIT_FAILURE);
     }
@@ -769,13 +769,13 @@ module_repo_new(struct module_repo_internal *repo_, struct queue *queue, lkt_db
     };
 
     /* Copies */
-    if (!database_config_get(db, "database", "kara_dir", repo.kara_dir, PATH_MAX) ||
-        !database_config_get(db, "repo", "name", repo.name, LKT_LINE_MAX) ||
-        !database_config_get(db, "repo", "url", repo.base_url, LKT_LINE_MAX) ||
-        !database_config_get(db, "repo", "id_json", repo.get_id_json, LKT_LINE_MAX) ||
-        !database_config_get(db, "repo", "id_kara", repo.get_id_file, LKT_LINE_MAX) ||
-        !database_config_get(db, "repo", "fav_json", repo.get_fav_json, LKT_LINE_MAX) ||
-        !database_config_get(db, "repo", "json", repo.get_all_json, LKT_LINE_MAX)) {
+    if (!database_config_get_text(db, "database", "kara_dir", repo.kara_dir, PATH_MAX) ||
+        !database_config_get_text(db, "repo", "name", repo.name, LKT_LINE_MAX) ||
+        !database_config_get_text(db, "repo", "url", repo.base_url, LKT_LINE_MAX) ||
+        !database_config_get_text(db, "repo", "id_json", repo.get_id_json, LKT_LINE_MAX) ||
+        !database_config_get_text(db, "repo", "id_kara", repo.get_id_file, LKT_LINE_MAX) ||
+        !database_config_get_text(db, "repo", "fav_json", repo.get_fav_json, LKT_LINE_MAX) ||
+        !database_config_get_text(db, "repo", "json", repo.get_all_json, LKT_LINE_MAX)) {
         LOG_ERROR("REPO", "Configuration invalid, but it should not be at this point");
         exit(EXIT_FAILURE);
     }
@@ -783,7 +783,7 @@ module_repo_new(struct module_repo_internal *repo_, struct queue *queue, lkt_db
 
     /* Init the worker only now ! */
     int workers_count;
-    if (!database_config_get(db, "repo", "workers_count", &workers_count))
+    if (!database_config_get_int(db, "repo", "workers_count", &workers_count))
         workers_count = 5;
     if (worker_pool_new(&repo_->workers, 10 /* Initial number of elements in the call queue */,
                         workers_count /* Number of worker threads */)) {
diff --git a/src/module/mpv.c b/src/module/mpv.c
index 9482de1c4fe6c15f90f9324cd54fa319a28a2c13..92032ef4b67852e92b910527dbeb67790790d8ca 100644
--- a/src/module/mpv.c
+++ b/src/module/mpv.c
@@ -31,7 +31,7 @@ lmpv_prepare(lkt_db *db)
         return NULL;                                                                             \
     }
 #define MPV_SET_FROM_INI(opt, section, key)                                     \
-    if (!database_config_get(db, section, key, ___opt, LKT_LINE_MAX)) {         \
+    if (!database_config_get_text(db, section, key, ___opt, LKT_LINE_MAX)) {         \
         LOG_WARN("WINDOW", "Failed to get option " key " in section " section); \
         return ctx;                                                             \
     }                                                                           \
@@ -39,7 +39,7 @@ lmpv_prepare(lkt_db *db)
 #define MPV_SET_OPTION_COND(opt, value, ini_section, ini_option, def)                \
     ({                                                                               \
         int ___cond;                                                                 \
-        if (!database_config_get(db, ini_section, ini_option, &___cond)) {           \
+        if (!database_config_get_int(db, ini_section, ini_option, &___cond)) {           \
             LOG_WARN("WINDOW", "Default [" ini_section "/" ini_option "] to " #def); \
             ___cond = (def);                                                         \
         }                                                                            \
diff --git a/src/net/command.c b/src/net/command.c
index 8109ddcbdcc8ff1ee61f0033b5b6dd43ca905d96..d216ec5ec3dbb584c24fea0fa65d3f77cf88b29d 100644
--- a/src/net/command.c
+++ b/src/net/command.c
@@ -31,7 +31,7 @@ lkt_command_parse(char *raw)
 
     /* Do we need the continuation? */
     if ((errno != 0) || (endptr == raw)) {
-        res.cont = 0;
+        res.cont          = 0;
         skip_continuation = true;
     }
 
diff --git a/src/net/listen.c b/src/net/listen.c
index ecce5166aefeaa1695d6651b2ea3c95e21766758..81d538f7e407feaa9e7514fd4b7a065d09451cf8 100644
--- a/src/net/listen.c
+++ b/src/net/listen.c
@@ -155,7 +155,7 @@ ___cmd_trie_print(struct cmd_trie_node *root, char *old_prefix, const size_t len
     for (size_t i = 0; i < CHARS_MAX; ++i) {
         /* Rec-call with new children */
         if (root->children[i] != NULL) {
-            prefix[length] = (char) i;
+            prefix[length] = (char)i;
             ___cmd_trie_print(root->children[i], prefix, length + 1);
         }
     }
@@ -803,7 +803,7 @@ handle_network_events(struct lkt_state *srv)
         if (n_in < 0)
             return -1;
         // Note from here it's safe to cast n_in to size_t or unsigned
-        size_t unsigned_n_in = (size_t)n_in;
+        size_t unsigned_n_in    = (size_t)n_in;
         struct lkt_message *msg = lkt_message_new_str("OK MPD " MPD_VERSION "\n");
         for (; unsigned_n_in; unsigned_n_in--) {
             memset(&srv->clients[srv->fds_len - unsigned_n_in - 1], 0, sizeof(struct lkt_client));