diff --git a/src/database/config.c b/src/database/config.c
index cf4b2eefa9a6e4642639883fe0f435560e01f806..4dc40d1bdbd46e0a4d3e71dbfe05ce7111362e10 100644
--- a/src/database/config.c
+++ b/src/database/config.c
@@ -1,6 +1,7 @@
 #define _POSIX_C_SOURCE 200809L
 
 #include <lektor/database.h>
+#include <lektor/macro.h>
 
 #include <limits.h>
 #include <stdio.h>
@@ -17,11 +18,7 @@ database_config_set(sqlite3 *db, const char *section, const char *key, const cha
     bool ret = false;
     int code;
 
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_config_set: Failed to prepare statement: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if (sqlite3_bind_text(stmt, 1, section, -1, 0) != SQLITE_OK ||
         sqlite3_bind_text(stmt, 2, key, -1, 0) != SQLITE_OK     ||
@@ -54,14 +51,9 @@ database_config_get_text(sqlite3 *db, const char *section, const char *key, char
         " WHERE section = ? AND key = ?;\n";
     sqlite3_stmt *stmt = 0;
     bool ret = false;
-    int code;
     char *row;
 
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_config_get_text: Failed to prepare statement: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if (sqlite3_bind_text(stmt, 1, section, -1, 0) != SQLITE_OK ||
         sqlite3_bind_text(stmt, 2, key, -1, 0) != SQLITE_OK) {
@@ -70,9 +62,7 @@ database_config_get_text(sqlite3 *db, const char *section, const char *key, char
         goto error;
     }
 
-    code = sqlite3_step(stmt);
-
-    if (code != SQLITE_ROW) {
+    if (sqlite3_step(stmt) != SQLITE_ROW) {
         fprintf(stderr, " ! database_config_get_text: Failed to insert or replace: %s\n",
                 sqlite3_errmsg(db));
         goto error;
@@ -96,13 +86,8 @@ database_config_exists(sqlite3 *db, const char *section, const char *key)
         " WHERE section = ? AND key = ?;\n";
     sqlite3_stmt *stmt = 0;
     bool ret = false;
-    int code;
 
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_config_exists: Failed to prepare statement: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if (sqlite3_bind_text(stmt, 1, section, -1, 0) != SQLITE_OK ||
         sqlite3_bind_text(stmt, 2, key, -1, 0) != SQLITE_OK) {
@@ -111,9 +96,7 @@ database_config_exists(sqlite3 *db, const char *section, const char *key)
         goto error;
     }
 
-    code = sqlite3_step(stmt);
-
-    if (code != SQLITE_ROW) {
+    if (sqlite3_step(stmt) != SQLITE_ROW) {
         fprintf(stderr, " ! database_config_exists: No rows: %s\n",
                 sqlite3_errmsg(db));
         goto error;
@@ -134,13 +117,8 @@ database_config_get_int(sqlite3 *db, const char *section, const char *key, int *
         " WHERE section = ? AND key = ?;\n";
     sqlite3_stmt *stmt = 0;
     bool ret = false;
-    int code;
 
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_config_get_int: Failed to prepare statement: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if (sqlite3_bind_text(stmt, 1, section, -1, 0) != SQLITE_OK ||
         sqlite3_bind_text(stmt, 2, key, -1, 0) != SQLITE_OK) {
@@ -149,9 +127,7 @@ database_config_get_int(sqlite3 *db, const char *section, const char *key, int *
         goto error;
     }
 
-    code = sqlite3_step(stmt);
-
-    if (code != SQLITE_ROW) {
+    if (sqlite3_step(stmt) != SQLITE_ROW) {
         fprintf(stderr, " ! database_config_get_int: Failed to insert or replace: %s\n",
                 sqlite3_errmsg(db));
         goto error;
@@ -179,12 +155,7 @@ database_config_queue(sqlite3 *db, const char *option, int value)
         value = 100;
 
     snprintf(SQL_STMT, PATH_MAX, SQL_STMT_TMP, option);
-
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_config: Failed to prepare statement: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if (sqlite3_bind_int(stmt, 1, value) != SQLITE_OK)
         goto error;
@@ -230,24 +201,15 @@ database_get_config(sqlite3 *db, const char *option, int *value)
     char SQL_STMT[PATH_MAX];
     sqlite3_stmt *stmt = 0;
     bool ret = false;
-    int code;
 
     snprintf(SQL_STMT, PATH_MAX, SQL_STMT_TMP, option);
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_get_config: Failed to prepare statement: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
-
-    code = sqlite3_step(stmt);
-
-    if (code != SQLITE_ROW)
+    if (sqlite3_step(stmt) != SQLITE_ROW)
         goto error;
 
     *value = sqlite3_column_int(stmt, 0);
     ret = true;
-
 error:
     sqlite3_finalize(stmt);
     return ret;
diff --git a/src/database/find.c b/src/database/find.c
index c70669b8f36cd621a4554a917ff38f8f41a1c323..d49dce80d65e05334372a68c50a3172dbf76f722 100644
--- a/src/database/find.c
+++ b/src/database/find.c
@@ -1,6 +1,9 @@
+#define _POSIX_C_SOURCE 200809L
+
 #include <lektor/database.h>
+#include <lektor/macro.h>
 
-#include <linux/limits.h>
+#include <limits.h>
 #include <stdio.h>
 #include <string.h>
 
@@ -23,11 +26,7 @@ database_search_init(sqlite3 *db, char *col_name, char *rgx, sqlite3_stmt **ret)
 
     memset(SQL_STMT, 0, PATH_MAX);
     snprintf(SQL_STMT, PATH_MAX, SQL_STMT_TEMPLATE, col_name);
-
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, ret, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_search_init: Failed to prepare statement: %s\n", sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, *ret, SQL_STMT, error);
 
     if (sqlite3_bind_text(*ret, 1, rgx, -1, 0) != SQLITE_OK) {
         fprintf(stderr, " ! database_search_init: Failed to bind regex on column %s: %s\n",
diff --git a/src/database/open.c b/src/database/open.c
index 2797b6bfabe50f03f74fbf45829f569ea515b1c9..2e10b1946a615f943e12f772026568fc2d5d3d46 100644
--- a/src/database/open.c
+++ b/src/database/open.c
@@ -138,14 +138,9 @@ __is_attached(sqlite3 *db, const char *name)
 {
     static const char *SQL_STMT = "SELECT name FROM pragma_database_list WHERE name = ?;\n";
     sqlite3_stmt *stmt = 0;
-    int code = 0;
     bool ret = false;
 
-    if (SQLITE_OK != sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0)) {
-        fprintf(stderr, " . __is_attached: Failed to prepare statement: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if (SQLITE_OK != sqlite3_bind_text(stmt, 1, name, -1, 0)) {
         fprintf(stderr, " . __is_attached: Failed to bind name: %s\n",
@@ -153,8 +148,7 @@ __is_attached(sqlite3 *db, const char *name)
         goto error;
     }
 
-    code = sqlite3_step(stmt);
-    if (code == SQLITE_ROW)
+    if (sqlite3_step(stmt) == SQLITE_ROW)
         ret = true;
 
 error:
diff --git a/src/database/playlist.c b/src/database/playlist.c
index 9616ba1d2754beb382753221a861aa9cefcece59..65f3a34d606dd4d9ebb8d1fef779899743b525ac 100644
--- a/src/database/playlist.c
+++ b/src/database/playlist.c
@@ -16,23 +16,17 @@ database_plt_create(sqlite3 *db, const char *name)
         "INSERT INTO playlist (name, last_update) VALUES (?, strftime('%s', 'now'));";
     sqlite3_stmt *stmt = NULL;
     bool sta = false;
-    int code;
 
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_plt_create: failed to prepare sqlite3 stmt statement: %s\n", sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if (sqlite3_bind_text(stmt, 1, name, -1, 0) != SQLITE_OK) {
         fprintf(stderr, " ! database_plt_create: failed to bind playlist name: %s\n", sqlite3_errmsg(db));
         goto error;
     }
 
-    code = sqlite3_step(stmt);
-
-    if (code != SQLITE_DONE) {
-        fprintf(stderr, " ! database_plt_create: expected SQLITE_DONE (%d) but got %d in step: %s\n",
-                SQLITE_DONE, code, sqlite3_errmsg(db));
+    if (sqlite3_step(stmt) != SQLITE_DONE) {
+        fprintf(stderr, " ! database_plt_create: expected SQLITE_DONE in step: %s\n",
+                sqlite3_errmsg(db));
         goto error;
     }
 
@@ -50,21 +44,17 @@ database_plt_remove(sqlite3 *db, const char *name)
         "DELETE FROM playlist WHERE name = ?;";
     sqlite3_stmt *stmt = NULL;
     bool sta = false;
-    int code;
 
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_plt_remove: failed to prepare sqlite3 stmt statement: %s\n", sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if (sqlite3_bind_text(stmt, 1, name, -1, 0) != SQLITE_OK) {
         fprintf(stderr, " ! database_plt_remove: failed to bind playlist name: %s\n", sqlite3_errmsg(db));
         goto error;
     }
 
-    if ((code = sqlite3_step(stmt)) != SQLITE_DONE) {
-        fprintf(stderr, " ! database_plt_remove: expected SQLITE_DONE (%d) but got %d in step: %s\n",
-                SQLITE_DONE, code, sqlite3_errmsg(db));
+    if (sqlite3_step(stmt) != SQLITE_DONE) {
+        fprintf(stderr, " ! database_plt_remove: expected SQLITE_DONE in step: %s\n",
+                sqlite3_errmsg(db));
         goto error;
     }
 
@@ -81,13 +71,8 @@ database_plt_remove_pos(sqlite3 *db, const char *name, int pos)
         "DELETE FROM kara_playlist WHERE playlist_id = (SELECT id FROM playlist WHERE name = ? LIMIT 1) and kara_id = ?;";
     sqlite3_stmt *stmt = NULL;
     bool sta = false;
-    int code;
 
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_plt_remove_pos: failed to prepare sqlite3 stmt statement: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if (sqlite3_bind_text(stmt, 1, name, -1, 0) != SQLITE_OK ||
         sqlite3_bind_int(stmt, 2, pos) != SQLITE_OK) {
@@ -95,9 +80,9 @@ database_plt_remove_pos(sqlite3 *db, const char *name, int pos)
         goto error;
     }
 
-    if ((code = sqlite3_step(stmt)) != SQLITE_OK) {
-        fprintf(stderr, " ! database_plt_remove_pos: expected SQLITE_DONE (%d) but got %d in step: %s\n",
-                SQLITE_DONE, code, sqlite3_errmsg(db));
+    if (sqlite3_step(stmt) != SQLITE_OK) {
+        fprintf(stderr, " ! database_plt_remove_pos: expected SQLITE_DONE in step: %s\n",
+                sqlite3_errmsg(db));
         goto error;
     }
 
@@ -114,21 +99,17 @@ database_plt_clear(sqlite3 *db, const char *name)
         "DELETE FROM kara_playlist WHERE playlist_id = (SELECT id FROM playlist WHERE name = ?);";
     sqlite3_stmt *stmt = NULL;
     bool sta = false;
-    int code;
 
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_plt_clear: failed to prepare sqlite3 stmt statement: %s\n", sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if (sqlite3_bind_text(stmt, 1, name, -1, 0) != SQLITE_OK) {
         fprintf(stderr, " ! database_plt_clear: failed to bind playlist name: %s\n", sqlite3_errmsg(db));
         goto error;
     }
 
-    if ((code = sqlite3_step(stmt)) != SQLITE_OK) {
-        fprintf(stderr, " ! database_plt_clear: expected SQLITE_DONE (%d) but got %d in step: %s\n",
-                SQLITE_DONE, code, sqlite3_errmsg(db));
+    if (sqlite3_step(stmt) != SQLITE_OK) {
+        fprintf(stderr, " ! database_plt_clear: expected SQLITE_DONE in step: %s\n",
+                sqlite3_errmsg(db));
         goto error;
     }
 
@@ -145,12 +126,8 @@ database_plt_rename(sqlite3 *db, const char *old_name, const char *new_name)
         "UPDATE playlist SET name = ? WHERE name = ?;";
     sqlite3_stmt *stmt = NULL;
     bool sta = false;
-    int code;
 
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_plt_rename: failed to prepare sqlite3 stmt statement: %s\n", sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if (sqlite3_bind_text(stmt, 1, new_name, -1, 0) != SQLITE_OK ||
         sqlite3_bind_text(stmt, 2, old_name, -1, 0) != SQLITE_OK) {
@@ -158,9 +135,9 @@ database_plt_rename(sqlite3 *db, const char *old_name, const char *new_name)
         goto error;
     }
 
-    if ((code = sqlite3_step(stmt)) != SQLITE_OK) {
-        fprintf(stderr, " ! database_plt_rename: expected SQLITE_DONE (%d) but got %d in step: %s\n",
-                SQLITE_DONE, code, sqlite3_errmsg(db));
+    if (sqlite3_step(stmt) != SQLITE_OK) {
+        fprintf(stderr, " ! database_plt_rename: expected SQLITE_DONE in step: %s\n",
+                sqlite3_errmsg(db));
         goto error;
     }
 
@@ -259,10 +236,9 @@ database_plt_add_uri(sqlite3 *db, const char *name, struct lkt_uri_t *uri)
         "  FROM kara, plt_id "
         "  WHERE kara.%s LIKE ? "
         "  ORDER BY RANDOM();";
-    char SQL_STMT[1024];
+    char SQL_STMT[1024], sta = false;
     const char *column;
     sqlite3_stmt *stmt;
-    int code, sta = false;
 
     switch (uri->type) {
     case uri_type:
@@ -287,11 +263,7 @@ database_plt_add_uri(sqlite3 *db, const char *name, struct lkt_uri_t *uri)
 
     snprintf(SQL_STMT, 1024, SQL, column);
 
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_plt_add_uri: failed to prepare sqlite3 stmt statement: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if (sqlite3_bind_text(stmt, 1, name, -1, 0) != SQLITE_OK ||
         sqlite3_bind_text(stmt, 2, uri->value, -1, 0) != SQLITE_OK) {
@@ -299,11 +271,9 @@ database_plt_add_uri(sqlite3 *db, const char *name, struct lkt_uri_t *uri)
         goto error;
     }
 
-    code = sqlite3_step(stmt);
-
-    if (code != SQLITE_DONE) {
-        fprintf(stderr, " ! database_plt_add_uri: expected SQLITE_DONE (%d) but got %d in step: %s\n",
-                SQLITE_DONE, code, sqlite3_errmsg(db));
+    if (sqlite3_step(stmt) != SQLITE_DONE) {
+        fprintf(stderr, " ! database_plt_add_uri: expected SQLITE_DONE in step: %s\n",
+                sqlite3_errmsg(db));
         goto error;
     }
 
diff --git a/src/database/queue.c b/src/database/queue.c
index c45973de02d9901952c6ae6c9a0638f6077fe480..b552143b0bea0c4724da03774ad957b8341ba22e 100644
--- a/src/database/queue.c
+++ b/src/database/queue.c
@@ -61,13 +61,12 @@ database_queue_current_kara(sqlite3 *db, struct kara_metadata *res)
         " JOIN queue ON queue.kara_id = kara.id"
         " JOIN queue_state ON queue_state.current = queue.position";
     sqlite3_stmt *stmt = 0;
-    int code = -1;
+    int ret = false;
 
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     memset(res, 0, sizeof(struct kara_metadata));
-    code = sqlite3_step(stmt);
 
-    if (code == SQLITE_ROW) {
+    if (sqlite3_step(stmt) == SQLITE_ROW) {
         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);
@@ -75,18 +74,16 @@ database_queue_current_kara(sqlite3 *db, struct kara_metadata *res)
         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);
         res->song_number = sqlite3_column_int(stmt, 6);
-        code = 0;
     } else {
-        fprintf(stderr,
-                " ! database_queue_current_kara: failed, expected SQLITE_ROW (%d), got %d\n",
-                SQLITE_ROW,
-                code);
-        code = -1;
+        fprintf(stderr, " ! database_queue_current_kara: failed: %s\n",
+                sqlite3_errmsg(db));
+        goto error;
     }
 
+    ret = true;
 error:
     sqlite3_finalize(stmt);
-    return code == 0;
+    return ret;
 }
 
 static bool
@@ -461,7 +458,6 @@ database_queue_prev(sqlite3 *db, char filepath[PATH_MAX])
         }
     }
 
-
     else if (code == SQLITE_DONE) {
         fprintf(stderr, " * database_queue_prev: Failed to get previous, no setting current to NULL\n");
         goto error;
diff --git a/src/database/update.c b/src/database/update.c
index 6320bb5a421745e775aed42fdb55072cc0fd4ce0..17a46a12372b1e9887452d7f3d0e680e002b9a25 100644
--- a/src/database/update.c
+++ b/src/database/update.c
@@ -2,6 +2,7 @@
 #define _DEFAULT_SOURCE
 
 #include <lektor/database.h>
+#include <lektor/macro.h>
 #include <stdbool.h>
 #include <sqlite3.h>
 #include <stdio.h>
@@ -43,10 +44,7 @@ database_add_kara(sqlite3 *db, const char *filename)
         return false;
     }
 
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_add_kara: Failed to prepare sqlite3 stmt statement: %s\n", sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if ((sqlite3_bind_text(stmt, 1, data.song_name, -1, 0) != SQLITE_OK)    ||
         (sqlite3_bind_text(stmt, 2, data.source_name, -1, 0) != SQLITE_OK)  ||
@@ -63,9 +61,7 @@ database_add_kara(sqlite3 *db, const char *filename)
         goto error;
     }
 
-    code = sqlite3_step(stmt);
-
-    if (code != SQLITE_DONE) {
+    if (sqlite3_step(stmt) != SQLITE_DONE) {
         fprintf(stderr,
                 " ! database_add_kara: expected SQLITE_DONE after execution of stmt statement for kara %s: %s\n",
                 filename,
@@ -108,10 +104,7 @@ database_update_add(sqlite3 *db, const char *kara_path, struct kara_metadata *md
 
     /* From here we initialize the sqlite stmt. */
 
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_update_add: Failed to prepare sqlite3 stmt statement: %s\n", sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if ((sqlite3_bind_text(stmt, 1, mdt->song_name, -1, 0) != SQLITE_OK)    ||
         (sqlite3_bind_text(stmt, 2, mdt->source_name, -1, 0) != SQLITE_OK)  ||
@@ -130,13 +123,9 @@ database_update_add(sqlite3 *db, const char *kara_path, struct kara_metadata *md
         goto error;
     }
 
-    code = sqlite3_step(stmt);
-
-    if (code != SQLITE_DONE) {
-        fprintf(stderr,
-                " ! database_add_kara: expected sqlite_done after execution of stmt statement for kara %s: %s\n",
-                kara_path,
-                sqlite3_errmsg(db));
+    if (sqlite3_step(stmt)!= SQLITE_DONE) {
+        fprintf(stderr, " ! database_add_kara: expected sqlite_done after execution of stmt "
+                "statement for kara %s: %s\n", kara_path, sqlite3_errmsg(db));
         goto error;
     }
 
diff --git a/src/database/user.c b/src/database/user.c
index 9ac954db857128ab989b9d4ecc10f99880afe2cf..6d5399ab66a028dc9f57b2a2c7c82f42aa4cc36a 100644
--- a/src/database/user.c
+++ b/src/database/user.c
@@ -1,6 +1,7 @@
 #define _POSIX_C_SOURCE 200809L
 
 #include <lektor/database.h>
+#include <lektor/macro.h>
 #include <stdio.h>
 
 bool
@@ -10,11 +11,7 @@ database_user_authentificate(sqlite3 *db, const char *password)
     sqlite3_stmt *stmt = 0;
     bool ret = false;
 
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_user_authentificate: Failed to prepare statement: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if (sqlite3_bind_text(stmt, 1, password, -1, 0) != SQLITE_OK) {
         fprintf(stderr, " ! database_user_authentificate: Failed to bind password: %s\n",
@@ -43,11 +40,7 @@ database_user_add(sqlite3 *db, const char *username, const char *password)
     sqlite3_stmt *stmt = 0;
     bool ret = false;
 
-    if (sqlite3_prepare_v2(db, SQL_STMT, -1, &stmt, 0) != SQLITE_OK) {
-        fprintf(stderr, " ! database_user_add: Failed to prepare statement: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_PREPARE(db, stmt, SQL_STMT, error);
 
     if (sqlite3_bind_text(stmt, 1, username, -1, 0) != SQLITE_OK &&
         sqlite3_bind_text(stmt, 2, password, -1, 0) != SQLITE_OK) {