diff --git a/src/database/config.c b/src/database/config.c
index 60c59427d60ebee07a688a36882d9f37cfb6c279..c2802ffdc9ae32a7d2179d26c27013c3ebc11ab5 100644
--- a/src/database/config.c
+++ b/src/database/config.c
@@ -8,7 +8,7 @@
 #include <string.h>
 
 bool
-database_config_set(sqlite3 *db, const char *section, const char *key, const char *value)
+database_config_set(volatile sqlite3 *db, const char *section, const char *key, const char *value)
 {
     static const char *SQL_STMT =
         "INSERT OR REPLACE INTO"
@@ -26,7 +26,7 @@ database_config_set(sqlite3 *db, const char *section, const char *key, const cha
     code = sqlite3_step(stmt);
 
     if (code != SQLITE_OK && code != SQLITE_DONE) {
-        LOG_ERROR_SCT("DB", "Failed to insert or replace: %s", sqlite3_errmsg(db));
+        LOG_ERROR_SCT("DB", "Failed to insert or replace: %s", sqlite3_errmsg((sqlite3 *) db));
         goto error;
     }
 
@@ -37,7 +37,7 @@ error:
 }
 
 bool
-database_config_get_text(sqlite3 *db, const char *section, const char *key, char *value, size_t len)
+database_config_get_text(volatile sqlite3 *db, const char *section, const char *key, char *value, size_t len)
 {
     static const char *SQL_STMT =
         "SELECT value"
@@ -62,7 +62,7 @@ error:
 }
 
 bool
-database_config_exists(sqlite3 *db, const char *section, const char *key)
+database_config_exists(volatile sqlite3 *db, const char *section, const char *key)
 {
     static const char *SQL_STMT =
         "SELECT value"
@@ -83,7 +83,7 @@ error:
 }
 
 bool
-database_config_get_int(sqlite3 *db, const char *section, const char *key, int *value)
+database_config_get_int(volatile sqlite3 *db, const char *section, const char *key, int *value)
 {
     static const char *SQL_STMT =
         "SELECT CAST(value AS INTEGER)"
@@ -106,7 +106,7 @@ error:
 }
 
 bool
-database_config_queue(sqlite3 *db, const char *option, int value)
+database_config_queue(volatile sqlite3 *db, const char *option, int value)
 {
     static const char *SQL_STMT_TMP = "UPDATE queue_state SET %s = ? WHERE id = 42;";
     char SQL_STMT[LKT_MAX_SQLITE_STATEMENT];
@@ -136,7 +136,7 @@ error:
 }
 
 bool
-database_config_queue_default(sqlite3 *db)
+database_config_queue_default(volatile sqlite3 *db)
 {
     static const char *SQL_DEFAULT =
         "UPDATE queue_state SET"
@@ -155,7 +155,7 @@ error:
 }
 
 bool
-database_get_config(sqlite3 *db, const char *option, int *value)
+database_get_config(volatile sqlite3 *db, const char *option, int *value)
 {
     static const char *SQL_STMT_TMP = "SELECT %s FROM queue_state WHERE id = 42;";
     char SQL_STMT[LKT_MAX_SQLITE_STATEMENT];
diff --git a/src/database/find.c b/src/database/find.c
index e801b631e548c0ed88c097fa3928b848e32cfbc7..ffc4b43706745737dbf21e8289763ac18fdae11c 100644
--- a/src/database/find.c
+++ b/src/database/find.c
@@ -8,7 +8,7 @@
 #include <string.h>
 
 bool
-database_search_database_init(sqlite3 *db, char *col_name, char *rgx, struct lkt_search *ret)
+database_search_database_init(volatile sqlite3 *db, char *col_name, char *rgx, struct lkt_search *ret)
 {
     RETURN_UNLESS(ret, "Exit because return pointer is NULL", false);
     static const char *SQL_STMT_TEMPLATE =
@@ -34,7 +34,7 @@ error:
 
 
 bool
-database_search_queue_init(sqlite3 *db, char *col_name, char *rgx, struct lkt_search *ret)
+database_search_queue_init(volatile sqlite3 *db, char *col_name, char *rgx, struct lkt_search *ret)
 {
     RETURN_UNLESS(ret, "Exit because return pointer is NULL", false);
     static const char *SQL_STMT_TEMPLATE =
@@ -89,7 +89,7 @@ database_search_iter(struct lkt_search *item)
     }
 
 error:
-    LOG_ERROR_SCT("DB", "sqlite3_step failed: %s", sqlite3_errmsg(item->db));
+    LOG_ERROR_SCT("DB", "sqlite3_step failed: %s", sqlite3_errmsg((sqlite3 *) item->db));
 error_or_done:
     sqlite3_finalize(item->stmt);
     return false;
diff --git a/src/database/open.c b/src/database/open.c
index 61414c90395852fbf6838cd4428b46f8a7428688..dfc470ee46d78c0fdea3151cc90342f8621e0862 100644
--- a/src/database/open.c
+++ b/src/database/open.c
@@ -54,7 +54,7 @@ is_sql_str_invalid(const char *str)
 }
 
 bool
-database_new(sqlite3 **db)
+database_new(volatile sqlite3 **db)
 {
     static int flags = SQLITE_OPEN_READWRITE    |   /* Open in RW mode              */
                        SQLITE_OPEN_SHAREDCACHE  |   /* hHared cache for databases   */
@@ -63,7 +63,7 @@ database_new(sqlite3 **db)
     RETURN_IF(SQLITE_OK != sqlite3_enable_shared_cache(1), "Failed to enable shared cache", false);
     RETURN_IF(sqlite3_soft_heap_limit64(HEAP_LIMIT_SOFT) < 0, "Failed to set soft heap limit", false);
     RETURN_IF(sqlite3_hard_heap_limit64(HEAP_LIMIT_HARD) < 0, "Failed to set soft heap limit", false);
-    RETURN_IF(SQLITE_OK != sqlite3_open_v2(":memory:", db, flags, NULL), "Failed to open :memory:", false);
+    RETURN_IF(SQLITE_OK != sqlite3_open_v2(":memory:", (sqlite3 **) db, flags, NULL), "Failed to open :memory:", false);
     SQLITE_EXEC(*db, SQL_MEM_SCHEM, err_not_init);
     return true;
 err_not_init:
@@ -72,7 +72,7 @@ err_not_init:
 }
 
 static inline bool
-__attach(sqlite3 *db, const char *name, const char *path)
+__attach(volatile sqlite3 *db, const char *name, const char *path)
 {
     static const char SQL_ATTACH_TEMPLATE[] = "ATTACH '%s' AS '%s';";
     char SQL_ATTACH[LKT_MAX_SQLITE_STATEMENT];
@@ -88,7 +88,7 @@ err_no_attach:
 }
 
 static inline bool
-__detach(sqlite3 *db, const char *name)
+__detach(volatile sqlite3 *db, const char *name)
 {
     static const char SQL_DETACH_TEMPLATE[] = "DETACH '%s';\n";
     char SQL_DETACH[LKT_MAX_SQLITE_STATEMENT];
@@ -104,7 +104,7 @@ err_no_detach:
 }
 
 static inline bool
-__is_attached(sqlite3 *db, const char *name)
+__is_attached(volatile sqlite3 *db, const char *name)
 {
     static const char *SQL_STMT = "SELECT name FROM pragma_database_list WHERE name = ?;\n";
     sqlite3_stmt *stmt = 0;
@@ -120,7 +120,7 @@ error:
 }
 
 bool
-database_open(sqlite3 *db, const char *dbpath)
+database_open(volatile sqlite3 *db, const char *dbpath)
 {
     if (is_sql_str_invalid(dbpath)) {
         LOG_ERROR("The database path '%s' is invalid", dbpath);
@@ -130,7 +130,7 @@ database_open(sqlite3 *db, const char *dbpath)
 }
 
 bool
-database_attach(sqlite3 *db, const char *name, const char *dbpath)
+database_attach(volatile sqlite3 *db, const char *name, const char *dbpath)
 {
     RETURN_UNLESS(strcasecmp(PROTECTED_DATABASE, name), " The database "PROTECTED_DATABASE
                   " is protected, can't attach a database with the same name", false);
@@ -155,7 +155,7 @@ database_attach(sqlite3 *db, const char *name, const char *dbpath)
 }
 
 bool
-database_detach(sqlite3 *db, const char *name)
+database_detach(volatile sqlite3 *db, const char *name)
 {
     RETURN_UNLESS(strcasecmp(PROTECTED_DATABASE, name), " The database "PROTECTED_DATABASE
                   " is protected, can't detach it", false);
diff --git a/src/database/playlist.c b/src/database/playlist.c
index 086f580bd911e19526e4bb4ad3b248e918995323..0dbb4ac59036762122a1fa11bf38f90e1b430624 100644
--- a/src/database/playlist.c
+++ b/src/database/playlist.c
@@ -11,7 +11,7 @@ extern int
 is_sql_str_invalid(const char *str);
 
 bool
-database_plt_create(sqlite3 *db, const char *name)
+database_plt_create(volatile sqlite3 *db, const char *name)
 {
     static const char *SQL_STMT =
         "INSERT INTO playlist (name, last_update) VALUES (?, strftime('%s', 'now'));";
@@ -27,7 +27,7 @@ error:
 }
 
 bool
-database_plt_remove(sqlite3 *db, const char *name)
+database_plt_remove(volatile sqlite3 *db, const char *name)
 {
     static const char *SQL_STMT = "DELETE FROM playlist WHERE name = ?;";
     sqlite3_stmt *stmt = NULL;
@@ -42,7 +42,7 @@ error:
 }
 
 bool
-database_plt_remove_pos(sqlite3 *db, const char *name, int pos)
+database_plt_remove_pos(volatile sqlite3 *db, const char *name, int pos)
 {
     static const char *SQL_STMT =
         "DELETE FROM kara_playlist "
@@ -60,7 +60,7 @@ error:
 }
 
 bool
-database_plt_clear(sqlite3 *db, const char *name)
+database_plt_clear(volatile sqlite3 *db, const char *name)
 {
     static const char *SQL_STMT =
         "DELETE FROM kara_playlist WHERE playlist_id = (SELECT id FROM playlist WHERE name = ?);";
@@ -76,7 +76,7 @@ error:
 }
 
 bool
-database_plt_rename(sqlite3 *db, const char *old_name, const char *new_name)
+database_plt_rename(volatile sqlite3 *db, const char *old_name, const char *new_name)
 {
     static const char *SQL_STMT = "UPDATE playlist SET name = ? WHERE name = ?;";
     sqlite3_stmt *stmt = NULL;
@@ -92,7 +92,7 @@ error:
 }
 
 bool
-database_plt_export(sqlite3 *db, const char *name)
+database_plt_export(volatile sqlite3 *db, const char *name)
 {
     static const char *SQL_SCHEM =
         "CREATE TABLE IF NOT EXISTS %s.content"
@@ -115,7 +115,7 @@ database_plt_export(sqlite3 *db, const char *name)
     code = sqlite3_step(stmt);
 
     if (code != SQLITE_DONE && code != SQLITE_OK) {
-        LOG_ERROR_SCT("DB", "Failed to create schema: %s", sqlite3_errmsg(db));
+        LOG_ERROR_SCT("DB", "Failed to create schema: %s", sqlite3_errmsg((sqlite3 *) db));
         goto error;
     }
 
@@ -126,7 +126,7 @@ error:
 }
 
 bool
-database_plt_import(sqlite3 *db, const char *name)
+database_plt_import(volatile sqlite3 *db, const char *name)
 {
     static const char *SQL_SCHEM =
         "INSERT OR IGNORE INTO kara_playlist (kara_id, playlist_id)"
@@ -151,7 +151,7 @@ error:
 }
 
 bool
-database_plt_add_uri(sqlite3 *db, const char *name, struct lkt_uri *uri)
+database_plt_add_uri(volatile sqlite3 *db, const char *name, struct lkt_uri *uri)
 {
     static const char *SQL =
         "WITH plt_id(id) AS (SELECT playlist.id AS id FROM playlist WHERE name COLLATE nocase = ?) "
diff --git a/src/database/queue.c b/src/database/queue.c
index 341455f016c363839f23ba996643ef70a84ef045..7adbac37caf29a97d7c426ef2ca4af91bf2c7cc2 100644
--- a/src/database/queue.c
+++ b/src/database/queue.c
@@ -11,7 +11,7 @@
 extern int is_sql_str_invalid(const char *);
 
 bool
-database_queue_state(sqlite3 *db, struct lkt_queue_state *res)
+database_queue_state(volatile sqlite3 *db, struct lkt_queue_state *res)
 {
     static const char *SQL_STMT =
         "SELECT"
@@ -49,7 +49,7 @@ error:
 }
 
 bool
-database_queue_current_kara(sqlite3 *db, struct kara_metadata *res, int *id)
+database_queue_current_kara(volatile sqlite3 *db, struct kara_metadata *res, int *id)
 {
     static const char *SQL_STMT =
         "SELECT song_name, source_name, category, language, author_name, song_type, song_number, kara_id"
@@ -66,12 +66,12 @@ database_queue_current_kara(sqlite3 *db, struct kara_metadata *res, int *id)
        Most of the time it won't be NULL. */
     if (!res)
         goto no_metadata;
-    strncpy(res->song_name, (const char *) sqlite3_column_text(stmt, 0), LEKTOR_TAG_MAX - 1);
+    strncpy(res->song_name,   (const char *) sqlite3_column_text(stmt, 0), LEKTOR_TAG_MAX - 1);
     strncpy(res->source_name, (const char *) sqlite3_column_text(stmt, 1), LEKTOR_TAG_MAX - 1);
-    strncpy(res->category, (const char *) sqlite3_column_text(stmt, 2), LEKTOR_TAG_MAX - 1);
-    strncpy(res->language, (const char *) sqlite3_column_text(stmt, 3), LEKTOR_TAG_MAX - 1);
+    strncpy(res->category,    (const char *) sqlite3_column_text(stmt, 2), LEKTOR_TAG_MAX - 1);
+    strncpy(res->language,    (const char *) sqlite3_column_text(stmt, 3), LEKTOR_TAG_MAX - 1);
     strncpy(res->author_name, (const char *) sqlite3_column_text(stmt, 4), LEKTOR_TAG_MAX - 1);
-    strncpy(res->song_type, (const char *) sqlite3_column_text(stmt, 5), LEKTOR_TAG_MAX - 1);
+    strncpy(res->song_type,   (const char *) sqlite3_column_text(stmt, 5), LEKTOR_TAG_MAX - 1);
     res->song_number = sqlite3_column_int(stmt, 6);
 no_metadata:
     /* Most of the time this will be NULL. */
@@ -85,7 +85,7 @@ error:
 }
 
 static bool
-queue_add_with_col_like_str(sqlite3 *db, const char *col, const char *val, int priority)
+queue_add_with_col_like_str(volatile sqlite3 *db, const char *col, const char *val, int priority)
 {
     RETURN_IF(is_sql_str_invalid(col), "Column name is invalid", false);
 
@@ -112,7 +112,7 @@ error:
 }
 
 static bool
-queue_insert_with_col_like_str(sqlite3 *db, const char *col, const char *val, int pos)
+queue_insert_with_col_like_str(volatile sqlite3 *db, const char *col, const char *val, int pos)
 {
     RETURN_IF(is_sql_str_invalid(col), "Column name is invalid", false);
 
@@ -156,7 +156,7 @@ error:
 }
 
 bool
-database_queue_insert_query(sqlite3 *db, const char *query, int pos)
+database_queue_insert_query(volatile sqlite3 *db, const char *query, int pos)
 {
     bool status = queue_insert_with_col_like_str(db, LKT_DATABASE_KARA_ALL, query, pos);
     LOG_INFO("%s '%s' at %d", status ? "Successfull add query" : "Failed add query", query, pos);
@@ -164,7 +164,7 @@ database_queue_insert_query(sqlite3 *db, const char *query, int pos)
 }
 
 bool
-database_queue_add_plt(sqlite3 *db, const char *plt_name, int priority)
+database_queue_add_plt(volatile sqlite3 *db, const char *plt_name, int priority)
 {
     static const char *SQL_STMT =
         "INSERT INTO queue (kara_id, priority) "
@@ -187,7 +187,7 @@ error:
 }
 
 bool
-database_queue_add_query(sqlite3 *db, const char *query, int priority)
+database_queue_add_query(volatile sqlite3 *db, const char *query, int priority)
 {
     bool status = queue_add_with_col_like_str(db, LKT_DATABASE_KARA_ALL, query, priority);
     LOG_INFO("%s '%s' with prio %d", status ? "Successfull add query" : "Failed add query", query, priority);
@@ -195,7 +195,7 @@ database_queue_add_query(sqlite3 *db, const char *query, int priority)
 }
 
 bool
-database_queue_add_author(sqlite3 *db, const char *author, int priority)
+database_queue_add_author(volatile sqlite3 *db, const char *author, int priority)
 {
     bool status = queue_add_with_col_like_str(db, LKT_DATABASE_NAME_KAUTHOR, author, priority);
     LOG_INFO("%s '%s'", status ? "Successfull add author" : "Failed add author", author);
@@ -203,7 +203,7 @@ database_queue_add_author(sqlite3 *db, const char *author, int priority)
 }
 
 bool
-database_queue_add_language(sqlite3 *db, const char *language, int priority)
+database_queue_add_language(volatile sqlite3 *db, const char *language, int priority)
 {
     bool status = queue_add_with_col_like_str(db, LKT_DATABASE_NAME_KLANG, language, priority);
     LOG_INFO("%s '%s'", status ? "Successfull add language" : "Failed add language", language);
@@ -211,7 +211,7 @@ database_queue_add_language(sqlite3 *db, const char *language, int priority)
 }
 
 bool
-database_queue_add_category(sqlite3 *db, const char *cat, int priority)
+database_queue_add_category(volatile sqlite3 *db, const char *cat, int priority)
 {
     bool status = queue_add_with_col_like_str(db, LKT_DATABASE_NAME_KCAT, cat, priority);
     LOG_INFO("%s '%s'", status ? "Successfull add category" : "Failed add category", cat);
@@ -219,7 +219,7 @@ database_queue_add_category(sqlite3 *db, const char *cat, int priority)
 }
 
 bool
-database_queue_add_type(sqlite3 *db, const char *type, int priority)
+database_queue_add_type(volatile sqlite3 *db, const char *type, int priority)
 {
     bool status = queue_add_with_col_like_str(db, LKT_DATABASE_NAME_KTYPE, type, priority);
     LOG_INFO("%s '%s'", status ? "Successfull add type" : "Failed add type", type);
@@ -227,7 +227,7 @@ database_queue_add_type(sqlite3 *db, const char *type, int priority)
 }
 
 bool
-database_queue_add_id(sqlite3 *db, int id, int priority)
+database_queue_add_id(volatile sqlite3 *db, int id, int priority)
 {
     static const char *SQL_STMT = "INSERT INTO queue (kara_id, priority) VALUES (?,?);";
     bool status = false;
@@ -243,7 +243,7 @@ error:
 }
 
 bool
-database_queue_del_id(sqlite3 *db, int id)
+database_queue_del_id(volatile sqlite3 *db, int id)
 {
     static const char *SQL_TEMPLATE =
         "BEGIN TRANSACTION;"
@@ -264,7 +264,7 @@ error:
 }
 
 bool
-database_queue_next(sqlite3 *db, char filepath[PATH_MAX])
+database_queue_next(volatile sqlite3 *db, char filepath[PATH_MAX])
 {
     static const char *SQL_STMT =
         "SELECT file_path, position, RANDOM()"
@@ -305,7 +305,7 @@ database_queue_next(sqlite3 *db, char filepath[PATH_MAX])
     }
 
     else {
-        LOG_ERROR_SCT("DB", "Failed to fetch next kara: %s", sqlite3_errmsg(db));
+        LOG_ERROR_SCT("DB", "Failed to fetch next kara: %s", sqlite3_errmsg((sqlite3 *) db));
         goto error;
     }
 
@@ -317,7 +317,7 @@ error:
 }
 
 bool
-database_queue_toggle_pause(sqlite3 *db)
+database_queue_toggle_pause(volatile sqlite3 *db)
 {
     static const char *SQL_STMT = "UPDATE queue_state SET paused = 1 - paused";
     SQLITE_EXEC(db, SQL_STMT, error);
@@ -327,7 +327,7 @@ error:
 }
 
 bool
-database_queue_prev(sqlite3 *db, char filepath[PATH_MAX])
+database_queue_prev(volatile sqlite3 *db, char filepath[PATH_MAX])
 {
     static const char *SQL_STMT =
         "SELECT file_path, position "
@@ -365,7 +365,7 @@ database_queue_prev(sqlite3 *db, char filepath[PATH_MAX])
     }
 
     else {
-        LOG_ERROR_SCT("DB", "Failed to fetch prev kara: %s", sqlite3_errmsg(db));
+        LOG_ERROR_SCT("DB", "Failed to fetch prev kara: %s", sqlite3_errmsg((sqlite3 *) db));
         goto error;
     }
 
@@ -377,7 +377,7 @@ error:
 }
 
 bool
-database_queue_clear(sqlite3 *db)
+database_queue_clear(volatile sqlite3 *db)
 {
     static const char *SQL_STMT =
         "BEGIN TRANSACTION;"
@@ -392,7 +392,7 @@ error:
 }
 
 bool
-database_queue_crop(sqlite3 *db)
+database_queue_crop(volatile sqlite3 *db)
 {
     static const char *SQL_STMT =
         "DELETE FROM queue WHERE queue.kara_id <> (SELECT current FROM queue_state LIMIT 1);";
@@ -403,7 +403,7 @@ error:
 }
 
 bool
-database_queue_move(sqlite3 *db, int from, int to)
+database_queue_move(volatile sqlite3 *db, int from, int to)
 {
     /* stmt arguments in order:
      * 1. to
@@ -438,7 +438,7 @@ error:
 }
 
 bool
-database_queue_play(sqlite3 *db, int pos)
+database_queue_play(volatile sqlite3 *db, int pos)
 {
     static const char *SQL_STMT =
         "UPDATE queue_state SET current = ?, paused = 0"
@@ -453,7 +453,7 @@ database_queue_play(sqlite3 *db, int pos)
     code = sqlite3_step(stmt);
 
     if (code != SQLITE_OK && code != SQLITE_DONE) {
-        LOG_ERROR_SCT("DB", "Failed to update queue_state: %s", sqlite3_errmsg(db));
+        LOG_ERROR_SCT("DB", "Failed to update queue_state: %s", sqlite3_errmsg((sqlite3 *) db));
         goto error;
     }
 
@@ -463,7 +463,7 @@ error:
 }
 
 bool
-database_queue_stop(sqlite3 *db)
+database_queue_stop(volatile sqlite3 *db)
 {
     static const char *SQL_STMT = "UPDATE queue_state SET current = NULL;";
     SQLITE_EXEC(db, SQL_STMT, error);
@@ -473,7 +473,7 @@ error:
 }
 
 bool
-database_queue_set_current_index(sqlite3 *db, int idx)
+database_queue_set_current_index(volatile sqlite3 *db, int idx)
 {
     static const char *SQL_GET_TEMPLATE = "UPDATE queue_state SET current = %d;";
     char SQL_GET[LKT_MAX_SQLITE_STATEMENT];
@@ -493,7 +493,7 @@ error:
 }
 
 bool
-database_queue_get_current_file(sqlite3 *db, char filepath[PATH_MAX])
+database_queue_get_current_file(volatile sqlite3 *db, char filepath[PATH_MAX])
 {
     static const char *SQL_STMT =
         "SELECT file_path"
@@ -514,7 +514,7 @@ database_queue_get_current_file(sqlite3 *db, char filepath[PATH_MAX])
         strncpy(filepath, (const char *) sqlite3_column_text(stmt, 0), PATH_MAX);
 
     else {
-        LOG_ERROR_SCT("DB", "Failed to fetch prev kara: %s", sqlite3_errmsg(db));
+        LOG_ERROR_SCT("DB", "Failed to fetch prev kara: %s", sqlite3_errmsg((sqlite3 *) db));
         goto error;
     }
 
@@ -525,7 +525,7 @@ error:
 }
 
 bool
-database_queue_set_paused(sqlite3 *db, bool paused)
+database_queue_set_paused(volatile sqlite3 *db, bool paused)
 {
     const char *SQL = paused ? "UPDATE queue_state SET paused = 1;" : "UPDATE queue_state SET paused = 0;";
     SQLITE_EXEC(db, SQL, error);
@@ -535,7 +535,7 @@ error:
 }
 
 bool
-database_queue_shuffle(sqlite3 *db)
+database_queue_shuffle(volatile sqlite3 *db)
 {
     const char *SQL =
         "BEGIN TRANSACTION;"
@@ -591,7 +591,7 @@ error:
 }
 
 bool
-database_queue_list(sqlite3 *db, size_t from, size_t to, struct lkt_callback *callback)
+database_queue_list(volatile sqlite3 *db, size_t from, size_t to, struct lkt_callback *callback)
 {
     const char *SQL_STMT =
         "WITH content AS ("
@@ -640,7 +640,7 @@ error:
 }
 
 bool
-database_queue_seekid(sqlite3 *db, int id, int *out_pos)
+database_queue_seekid(volatile sqlite3 *db, int id, int *out_pos)
 {
     static const char *SQL_STMT = "SELECT position FROM queue_ WHERE kara_id = ? LIMIT 1";
     int ret;
diff --git a/src/database/stickers.c b/src/database/stickers.c
index 1b4c023b00baf88ff10bbe0f93e4a7fd1332c435..e2fc96ee246307692c49f3f56c9c3f4c4c522ce3 100644
--- a/src/database/stickers.c
+++ b/src/database/stickers.c
@@ -8,7 +8,7 @@
 #include <stdio.h>
 
 bool
-database_sticker_create(sqlite3 *db, const char *name)
+database_sticker_create(volatile sqlite3 *db, const char *name)
 {
     static const char *INSERT =
         "WITH id_max (id) AS (SELECT MAX(id) FROM 'stickers')"
@@ -30,7 +30,7 @@ error:
 }
 
 bool
-database_sticker_delete(sqlite3 *db, const char *name)
+database_sticker_delete(volatile sqlite3 *db, const char *name)
 {
     static const char *INSERT = "DELETE FROM 'stickers' WHERE name = ?;";
     sqlite3_stmt *stmt;
@@ -46,7 +46,7 @@ error:
 }
 
 bool
-database_sticker_list(sqlite3 *db, const char *type, struct sticker_callback *call)
+database_sticker_list(volatile sqlite3 *db, const char *type, struct sticker_callback *call)
 {
     const char *SQL = NULL;
     int ret = false, uri, value;
@@ -106,7 +106,7 @@ error:
 }
 
 bool
-database_sticker_set(sqlite3 *db, const char *type, const char *name, int uri, int value)
+database_sticker_set(volatile sqlite3 *db, const char *type, const char *name, int uri, int value)
 {
     const char *SQL = NULL;
     sqlite3_stmt *stmt;
@@ -147,7 +147,7 @@ error:
 }
 
 bool
-database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, struct sticker_callback *call)
+database_sticker_get(volatile sqlite3 *db, const char *type, const char *name, int uri, struct sticker_callback *call)
 {
     const char *SQL = NULL;
     sqlite3_stmt *stmt;
@@ -199,7 +199,7 @@ error:
 }
 
 bool
-database_sticker_delete_specify(sqlite3 *db, const char *type, int uri, const char *name)
+database_sticker_delete_specify(volatile sqlite3 *db, const char *type, int uri, const char *name)
 {
     char SQL[LKT_MAX_SQLITE_STATEMENT];
     sqlite3_stmt *stmt;
diff --git a/src/database/user.c b/src/database/user.c
index 11936d7492527e567ad371ad362987e18f093161..ab347f401611a764df89a91429c9ecd3cca6ba7b 100644
--- a/src/database/user.c
+++ b/src/database/user.c
@@ -5,7 +5,7 @@
 #include <stdio.h>
 
 bool
-database_user_authentificate(sqlite3 *db, const char *password)
+database_user_authentificate(volatile sqlite3 *db, const char *password)
 {
     static const char *SQL_STMT = "SELECT username FROM users WHERE password = ?";
     sqlite3_stmt *stmt = 0;
@@ -21,7 +21,7 @@ error:
 }
 
 bool
-database_user_add(sqlite3 *db, const char *username, const char *password)
+database_user_add(volatile sqlite3 *db, const char *username, const char *password)
 {
     static const char *SQL_STMT = "INSERT INTO users (username, password) VALUES (?, ?)";
     sqlite3_stmt *stmt = 0;
diff --git a/src/main/lktadm.c b/src/main/lktadm.c
index 352d21ed5ecb5a572a712216dec9d5b13264bc3f..84a2de4a56232a28e5539cbbafdbd489ba5ac3ee 100644
--- a/src/main/lktadm.c
+++ b/src/main/lktadm.c
@@ -41,7 +41,7 @@ static char kara_dir[PATH_MAX], db_path[PATH_MAX], mkvpropedit[PATH_MAX], sqlite
 void
 open_db(void)
 {
-    if (!database_new(&db))
+    if (!database_new((volatile sqlite3 **) &db))
         fail("Failed to init memory db");
 
     if (config_open(db))
diff --git a/src/net/listen.c b/src/net/listen.c
index 690c1844c6111d77864a47a7a01d5fd648c59a14..372b307a9d8d7d9d0be5b26638f7878296ed6451 100644
--- a/src/net/listen.c
+++ b/src/net/listen.c
@@ -702,26 +702,26 @@ lkt_listen(void)
     memset(&srv, 0, sizeof(struct lkt_state));
 
     /* Initialize the system. */
-    RETURN_UNLESS(database_new((sqlite3 **) &srv.db), "Failed to initialize the memory database", 1);
+    RETURN_UNLESS(database_new(&srv.db), "Failed to initialize the memory database", 1);
     RETURN_IF(config_detect_file(conf_file, PATH_MAX), "Failed to find a config file", 1);
-    RETURN_IF(config_new((sqlite3 *) srv.db, conf_file), "Failed to read configuration file", 1);
+    RETURN_IF(config_new(srv.db, conf_file), "Failed to read configuration file", 1);
 
     /* Finish to initialize. */
-    RETURN_UNLESS(database_config_get_text((sqlite3 *) srv.db, "database", "db_path", db_path, PATH_MAX), "Cfg error", 2);
-    RETURN_UNLESS(database_open((sqlite3 *) srv.db, db_path), "Can't open database", 1);
+    RETURN_UNLESS(database_config_get_text(srv.db, "database", "db_path", db_path, PATH_MAX), "Cfg error", 2);
+    RETURN_UNLESS(database_open(srv.db, db_path), "Can't open database", 1);
 
     /* Read the configuration. */
-    RETURN_UNLESS(database_config_get_int( (sqlite3 *) srv.db, "player",   "autoclear", &autoclear),               "Cfg error", 2);
-    RETURN_UNLESS(database_config_get_text((sqlite3 *) srv.db, "database", "kara_dir",  kara_dir, PATH_MAX),       "Cfg error", 2);
-    RETURN_UNLESS(database_config_get_text((sqlite3 *) srv.db, "server",   "host",      host, HOST_NAME_MAX),      "Cfg error", 2);
-    RETURN_UNLESS(database_config_get_text((sqlite3 *) srv.db, "server",   "port",      port, 5),                  "Cfg error", 2);
-    RETURN_UNLESS(database_config_get_text((sqlite3 *) srv.db, "player",   "module",    player_mod, INI_MAX_LINE), "Cfg error", 2);
+    RETURN_UNLESS(database_config_get_int (srv.db, "player",   "autoclear", &autoclear),               "Cfg error", 2);
+    RETURN_UNLESS(database_config_get_text(srv.db, "database", "kara_dir",  kara_dir, PATH_MAX),       "Cfg error", 2);
+    RETURN_UNLESS(database_config_get_text(srv.db, "server",   "host",      host, HOST_NAME_MAX),      "Cfg error", 2);
+    RETURN_UNLESS(database_config_get_text(srv.db, "server",   "port",      port, 5),                  "Cfg error", 2);
+    RETURN_UNLESS(database_config_get_text(srv.db, "player",   "module",    player_mod, INI_MAX_LINE), "Cfg error", 2);
 
     if (kara_dir[strlen(kara_dir) - 1] != '/')
         strncat(kara_dir, "/", PATH_MAX - 1);
 
     srv.kara_prefix = kara_dir;
-    database_config_queue_default((sqlite3 *) srv.db);
+    database_config_queue_default(srv.db);
 
     srv.fds_max = 16;
     srv.fds     = calloc(srv.fds_max, sizeof(struct pollfd));
@@ -735,9 +735,9 @@ lkt_listen(void)
     srv.fds_len = 1;
 
     if (autoclear)
-        database_queue_clear((sqlite3 *) srv.db);
+        database_queue_clear(srv.db);
 
-    RETURN_UNLESS(load_module_by_name((sqlite3 *) srv.db, player_mod, &srv.win), "Can't load module", 3);
+    RETURN_UNLESS(load_module_by_name(srv.db, player_mod, &srv.win), "Can't load module", 3);
     RETURN_UNLESS(srv.win.new(&srv.win), "Can't create window", 3);
     srv.win.attach(&srv.win, &srv);
     RETURN_IF(repo_new(&srv.repo, "kurisu", "https://kurisu.iiens.net", srv.db), "Failed to create repo", 4);
@@ -747,7 +747,7 @@ lkt_listen(void)
             break;
         if (handle_idle_events(&srv) < 0)
             break;
-        srv.win.handle_events(&srv.win, (sqlite3 *) srv.db, (enum mpd_idle_flag *) &srv.mpd_idle_events);
+        srv.win.handle_events(&srv.win, srv.db, &srv.mpd_idle_events);
     }
 
     srv.win.free(&srv.win);