diff --git a/inc/lektor/defines.h b/inc/lektor/defines.h
index c6eac5cdabfa5a5119f7f8be73bd1c53f2e2603c..84f263d6d7b056e62e29ae47aab22e002c22ddb3 100644
--- a/inc/lektor/defines.h
+++ b/inc/lektor/defines.h
@@ -13,6 +13,7 @@
 #define LKT_DATABASE_NAME_KAUTHOR_YEAR  "author_year"
 #define LKT_DATABASE_NAME_KLANG         "language"
 #define LKT_DATABASE_KARA_COLUMNT_ANY   "any_col"
+#define LKT_DATABASE_KARA_ALL           "string"
 
 #define LEKTOR_TAG_MAX 256
 
diff --git a/inc/lektor/macro.h b/inc/lektor/macro.h
index 5403ef8ce96f0ebf4efc9bc18e87c0aa8b056eec..4b93b9e4b726b41adb61babe3ec9d45f7c817085 100644
--- a/inc/lektor/macro.h
+++ b/inc/lektor/macro.h
@@ -28,6 +28,17 @@
         goto error;                                                     \
     }
 
+#define SQLITE_STEP(db, stmt, code, error)                              \
+    if (sqlite3_step(stmt) != code) {                                   \
+        fprintf(stderr, " ! %s: Failed to step and get a row: %s\n",    \
+                __func__, sqlite3_errmsg(db));                          \
+        goto error;                                                     \
+    }
+
+#define SQLITE_STEP_ROW(db, stmt, error)    SQLITE_STEP(db, stmt, SQLITE_ROW, error)
+#define SQLITE_STEP_DONE(db, stmt, error)   SQLITE_STEP(db, stmt, SQLITE_DONE, error)
+#define SQLITE_STEP_OK(db, stmt, error)     SQLITE_STEP(db, stmt, SQLITE_OK, error)
+
 #define SQLITE_DO_ROLLBACK(db)                                          \
     sqlite3_exec(db, "ROLLBACK TRANSACTION;\n", NULL, NULL, NULL);
 
diff --git a/src/database/config.c b/src/database/config.c
index 0b33b1517b43da01d74db8d6481fc8b5f62ccbe0..f1311d3c2cfeafd0e46f1a486939f50bbb3e0715 100644
--- a/src/database/config.c
+++ b/src/database/config.c
@@ -180,10 +180,7 @@ database_get_config(sqlite3 *db, const char *option, int *value)
     snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT_TMP, option);
     SQL_STMT[LKT_MAX_SQLITE_STATEMENT - 1] = 0;
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
-
-    if (sqlite3_step(stmt) != SQLITE_ROW)
-        goto error;
-
+    SQLITE_STEP_ROW(db, stmt, error);
     *value = sqlite3_column_int(stmt, 0);
     ret = true;
 error:
diff --git a/src/database/open.c b/src/database/open.c
index 662e6aa704229dde7fbaf2f814cb03856baa6c3b..424fe81006eeca8549e8523e0462982ee5ec3db5 100644
--- a/src/database/open.c
+++ b/src/database/open.c
@@ -126,10 +126,8 @@ __is_attached(sqlite3 *db, const char *name)
 
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, name, error);
-
-    if (sqlite3_step(stmt) == SQLITE_ROW)
-        ret = true;
-
+    SQLITE_STEP_ROW(db, stmt, error);
+    ret = true;
 error:
     sqlite3_finalize(stmt);
     return ret;
diff --git a/src/database/playlist.c b/src/database/playlist.c
index 7750a1b9796afe75563bb9e0ed8f9cd268a41078..07e3170aed33a82c0c5763a323afae37d0f2f48e 100644
--- a/src/database/playlist.c
+++ b/src/database/playlist.c
@@ -16,16 +16,9 @@ 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;
-
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, name, error);
-
-    if (sqlite3_step(stmt) != SQLITE_DONE) {
-        fprintf(stderr, " ! database_plt_create: expected SQLITE_DONE in step: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
-
+    SQLITE_STEP_DONE(db, stmt, error);
     sta = true;
     fprintf(stderr, " . database_plt_create: Created playlist %s\n", name);
 error:
@@ -36,20 +29,12 @@ error:
 bool
 database_plt_remove(sqlite3 *db, const char *name)
 {
-    static const char *SQL_STMT =
-        "DELETE FROM playlist WHERE name = ?;";
+    static const char *SQL_STMT = "DELETE FROM playlist WHERE name = ?;";
     sqlite3_stmt *stmt = NULL;
     bool sta = false;
-
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, name, error);
-
-    if (sqlite3_step(stmt) != SQLITE_DONE) {
-        fprintf(stderr, " ! database_plt_remove: expected SQLITE_DONE in step: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
-
+    SQLITE_STEP_DONE(db, stmt, error);
     sta = true;
 error:
     sqlite3_finalize(stmt);
@@ -60,20 +45,14 @@ bool
 database_plt_remove_pos(sqlite3 *db, const char *name, int pos)
 {
     static const char *SQL_STMT =
-        "DELETE FROM kara_playlist WHERE playlist_id = (SELECT id FROM playlist WHERE name = ? LIMIT 1) and kara_id = ?;";
+        "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;
-
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, name, error);
     SQLITE_BIND_INT(db, stmt, 2, pos, error);
-
-    if (sqlite3_step(stmt) != SQLITE_OK) {
-        fprintf(stderr, " ! database_plt_remove_pos: expected SQLITE_DONE in step: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
-
+    SQLITE_STEP_OK(db, stmt, error);
     sta = true;
 error:
     sqlite3_finalize(stmt);
@@ -87,16 +66,9 @@ 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;
-
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, name, error);
-
-    if (sqlite3_step(stmt) != SQLITE_OK) {
-        fprintf(stderr, " ! database_plt_clear: expected SQLITE_DONE in step: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
-
+    SQLITE_STEP_OK(db, stmt, error);
     sta = true;
 error:
     sqlite3_finalize(stmt);
@@ -106,21 +78,13 @@ error:
 bool
 database_plt_rename(sqlite3 *db, const char *old_name, const char *new_name)
 {
-    static const char *SQL_STMT =
-        "UPDATE playlist SET name = ? WHERE name = ?;";
+    static const char *SQL_STMT = "UPDATE playlist SET name = ? WHERE name = ?;";
     sqlite3_stmt *stmt = NULL;
     bool sta = false;
-
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, new_name, error);
     SQLITE_BIND_TEXT(db, stmt, 2, old_name, error);
-
-    if (sqlite3_step(stmt) != SQLITE_OK) {
-        fprintf(stderr, " ! database_plt_rename: expected SQLITE_DONE in step: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
-
+    SQLITE_STEP_OK(db, stmt, error);
     sta = true;
 error:
     sqlite3_finalize(stmt);
@@ -235,13 +199,7 @@ database_plt_add_uri(sqlite3 *db, const char *name, struct lkt_uri_t *uri)
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, name, error);
     SQLITE_BIND_TEXT(db, stmt, 2, (char *) uri->value, error);
-
-    if (sqlite3_step(stmt) != SQLITE_DONE) {
-        fprintf(stderr, " ! database_plt_add_uri: expected SQLITE_DONE in step: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
-
+    SQLITE_STEP_DONE(db, stmt, error);
     sta = true;
 error:
     sqlite3_finalize(stmt);
diff --git a/src/database/queue.c b/src/database/queue.c
index ecd45d86a6db8f679c6f1384a16b916433677998..cfb55e007b66132320e051d74dbfbb11a0367359 100644
--- a/src/database/queue.c
+++ b/src/database/queue.c
@@ -22,11 +22,7 @@ database_queue_state(sqlite3 *db, struct lkt_queue_state *res)
     bool ret = false;
 
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
-
-    if (sqlite3_step(stmt) != SQLITE_ROW) {
-        fprintf(stderr, " ! database_queue_state: queue_state has no row.\n");
-        goto error;
-    }
+    SQLITE_STEP_ROW(db, stmt, error);
 
     res->volume = sqlite3_column_int(stmt, 0);
     res->paused = sqlite3_column_int(stmt, 1);
@@ -64,28 +60,23 @@ database_queue_current_kara(sqlite3 *db, struct kara_metadata *res, int *id)
     int ret = false;
 
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
-
-    if (sqlite3_step(stmt) == SQLITE_ROW) {
-        /* Here use gotos because of optimisations done by compilators.
-           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->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->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);
+    SQLITE_STEP_ROW(db, stmt, error);
+
+    /* Here use gotos because of optimisations done by compilators.
+       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->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->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);
 no_metadata:
-        /* Most of the time this will be NULL. */
-        if (id && sqlite3_column_type(stmt, 7) != SQLITE_NULL)
-            *id = sqlite3_column_int(stmt, 7);
-    } else {
-        fprintf(stderr, " ! database_queue_current_kara: failed: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
+    /* Most of the time this will be NULL. */
+    if (id && sqlite3_column_type(stmt, 7) != SQLITE_NULL)
+        *id = sqlite3_column_int(stmt, 7);
 
     ret = true;
 error:
@@ -116,13 +107,7 @@ queue_add_with_col_like_str(sqlite3 *db, const char *col, const char *val, int p
     SQLITE_PREPARE(db, stmt, SQL, error);
     SQLITE_BIND_INT(db, stmt, 1, priority, error);
     SQLITE_BIND_TEXT(db, stmt, 2, val, error);
-
-    if (sqlite3_step(stmt) != SQLITE_DONE) {
-        fprintf(stderr, " ! queue_add_with_col_like_str: Failed to insert: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
-
+    SQLITE_STEP_DONE(db, stmt, error);
     status = true;
 error:
     sqlite3_finalize(stmt);
@@ -169,13 +154,7 @@ queue_insert_with_col_like_str(sqlite3 *db, const char *col, const char *val, in
     SQLITE_PREPARE(db, stmt, SQL, error);
     SQLITE_BIND_INT(db, stmt, 1, pos, error);
     SQLITE_BIND_TEXT(db, stmt, 2, val, error);
-
-    if (sqlite3_step(stmt) != SQLITE_DONE) {
-        fprintf(stderr, " ! queue_insert_with_col_like_str: Failed to insert: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
-
+    SQLITE_STEP_DONE(db, stmt, error);
     status = true;
 error:
     sqlite3_finalize(stmt);
@@ -185,13 +164,9 @@ error:
 bool
 database_queue_insert_query(sqlite3 *db, const char *query, int pos)
 {
-    bool status = queue_insert_with_col_like_str(db, "string", query, pos);
-
-    if (status)
-        fprintf(stderr, " * database_queue_insert_query: Successfull add for query '%s'\n", query);
-    else
-        fprintf(stderr, " ! database_queue_insert_query: Failed to add for query '%s'\n", query);
-
+    bool status = queue_insert_with_col_like_str(db, LKT_DATABASE_KARA_ALL, query, pos);
+    fprintf(stderr, " . %s: %s '%s'\n", __func__,
+            status ? "Successfull add query" : "Failed add query", query);
     return status;
 }
 
@@ -211,13 +186,7 @@ database_queue_add_plt(sqlite3 *db, const char *plt_name, int priority)
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_INT(db, stmt, 1, priority, error);
     SQLITE_BIND_TEXT(db, stmt, 2, plt_name, error);
-
-    if (sqlite3_step(stmt) != SQLITE_DONE) {
-        fprintf(stderr, " ! database_queue_add_plt: Failed to insert: %s\n",
-                sqlite3_errmsg(db));
-        goto error;
-    }
-
+    SQLITE_STEP_DONE(db, stmt, error);
     status = true;
 error:
     sqlite3_finalize(stmt);
@@ -227,66 +196,45 @@ error:
 bool
 database_queue_add_query(sqlite3 *db, const char *query, int priority)
 {
-    bool status = queue_add_with_col_like_str(db, "string", query, priority);
-
-    if (status)
-        fprintf(stderr, " * database_queue_add_query: Successfull add for query '%s'\n", query);
-    else
-        fprintf(stderr, " ! database_queue_add_query: Failed to add for query '%s'\n", query);
-
+    bool status = queue_add_with_col_like_str(db, LKT_DATABASE_KARA_ALL, query, priority);
+    fprintf(stderr, " . %s: %s '%s'\n", __func__,
+            status ? "Successfull add query" : "Failed add query", query);
     return status;
 }
 
 bool
 database_queue_add_author(sqlite3 *db, const char *author, int priority)
 {
-    bool status = queue_add_with_col_like_str(db, "author_name", author, priority);
-
-    if (status)
-        fprintf(stderr, " * database_queue_add_author: Successfull add for author '%s'\n", author);
-    else
-        fprintf(stderr, " ! database_queue_add_author: Failed to add for author '%s'\n", author);
-
+    bool status = queue_add_with_col_like_str(db, LKT_DATABASE_NAME_KAUTHOR, author, priority);
+    fprintf(stderr, " . %s: %s '%s'\n", __func__,
+            status ? "Successfull add author" : "Failed add author", author);
     return status;
 }
 
 bool
 database_queue_add_language(sqlite3 *db, const char *language, int priority)
 {
-    bool status = queue_add_with_col_like_str(db, "language", language, priority);
-
-    if (status)
-        fprintf(stderr, " * database_queue_add_language: Successfull add for language '%s'\n", language);
-    else
-        fprintf(stderr, " ! database_queue_add_language: Failed to add for language '%s'\n", language);
-
+    bool status = queue_add_with_col_like_str(db, LKT_DATABASE_NAME_KLANG, language, priority);
+    fprintf(stderr, " . %s: %s '%s'\n", __func__,
+            status ? "Successfull add language" : "Failed add language", language);
     return status;
 }
 
 bool
 database_queue_add_category(sqlite3 *db, const char *cat, int priority)
 {
-    bool status = queue_add_with_col_like_str(db, "song_type", cat, priority);
-
-    if (status)
-        fprintf(stderr, " * database_queue_add_category: Successfull add for category (lektor song_type) '%s'\n",
-                cat);
-    else
-        fprintf(stderr, " ! database_queue_add_category: Failed to add for category (lektor song_type) '%s'\n", cat);
-
+    bool status = queue_add_with_col_like_str(db, LKT_DATABASE_NAME_KCAT, cat, priority);
+    fprintf(stderr, " . %s: %s '%s'\n", __func__,
+            status ? "Successfull add category" : "Failed add category", cat);
     return status;
 }
 
 bool
 database_queue_add_type(sqlite3 *db, const char *type, int priority)
 {
-    bool status = queue_add_with_col_like_str(db, "category", type, priority);
-
-    if (status)
-        fprintf(stderr, " * database_queue_add_type: Successfull add for type (lektor category) '%s'\n", type);
-    else
-        fprintf(stderr, " ! database_queue_add_type: Failed to add for type (lektor category) '%s'\n", type);
-
+    bool status = queue_add_with_col_like_str(db, LKT_DATABASE_NAME_KTYPE, type, priority);
+    fprintf(stderr, " . %s: %s '%s'\n", __func__,
+            status ? "Successfull add type" : "Failed add type", type);
     return status;
 }
 
@@ -296,14 +244,10 @@ database_queue_add_id(sqlite3 *db, int id, int priority)
     static const char *SQL_STMT = "INSERT INTO queue (kara_id, priority) VALUES (?,?);";
     bool status = false;
     sqlite3_stmt *stmt = NULL;
-
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_INT(db, stmt, 1, id, error);
     SQLITE_BIND_INT(db, stmt, 2, priority, error);
-
-    if (sqlite3_step(stmt) != SQLITE_DONE)
-        goto error;
-
+    SQLITE_STEP_DONE(db, stmt, error);
     status = true;
 error:
     sqlite3_finalize(stmt);
@@ -600,13 +544,7 @@ error:
 bool
 database_queue_set_paused(sqlite3 *db, bool paused)
 {
-    const char *SQL;
-
-    if (paused)
-        SQL = "UPDATE queue_state SET paused = 1;";
-    else
-        SQL = "UPDATE queue_state SET paused = 0;";
-
+    const char *SQL = paused ? "UPDATE queue_state SET paused = 1;" : "UPDATE queue_state SET paused = 0;";
     SQLITE_EXEC(db, SQL, error);
     return true;
 error:
@@ -665,7 +603,6 @@ database_queue_shuffle(sqlite3 *db)
         "    ELSE NULL"
         "  END;"
         "COMMIT;";
-
     SQLITE_EXEC(db, SQL, error);
     return true;
 error:
@@ -731,10 +668,7 @@ database_queue_seekid(sqlite3 *db, int id, int *out_pos)
 
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_INT(db, stmt, 1, id, error);
-    if (SQLITE_ROW != sqlite3_step(stmt)) {
-        fprintf(stderr, "database_queue_seekid: Failed: %s\n", sqlite3_errmsg(db));
-        goto error;
-    }
+    SQLITE_STEP_ROW(db, stmt, error);
     *out_pos = sqlite3_column_int(stmt, 0);
     ret = true;
 error:
diff --git a/src/database/stickers.c b/src/database/stickers.c
index 1fd2b2375190587c35883a955087f3453a855313..b36b4c70fb9aa0456de8edb198db8a953fd74f31 100644
--- a/src/database/stickers.c
+++ b/src/database/stickers.c
@@ -29,13 +29,7 @@ database_sticker_create(sqlite3 *db, const char *name)
     SQLITE_PREPARE(db, stmt, INSERT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, name, error);
     SQLITE_BIND_TEXT(db, stmt, 2, name, error);
-
-    if (sqlite3_step(stmt) != SQLITE_OK) {
-        fprintf(stderr, " ! database_sticker_create: Failed to create sticker '%s': %s\n",
-                name, sqlite3_errmsg(db));
-        goto error;
-    }
-
+    SQLITE_STEP_OK(db, stmt, error);
     ret = true;
 error:
     sqlite3_finalize(stmt);
@@ -57,13 +51,7 @@ database_sticker_delete(sqlite3 *db, const char *name)
 
     SQLITE_PREPARE(db, stmt, INSERT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, name, error);
-
-    if (sqlite3_step(stmt) != SQLITE_OK) {
-        fprintf(stderr, " ! database_sticker_delete: Failed to delete sticker '%s': %s\n",
-                name, sqlite3_errmsg(db));
-        goto error;
-    }
-
+    SQLITE_STEP_OK(db, stmt, error);
     ret = true;
 error:
     sqlite3_finalize(stmt);
@@ -164,13 +152,7 @@ database_sticker_set(sqlite3 *db, const char *type, const char *name, int uri, i
     SQLITE_BIND_INT(db, stmt, 1, uri, error);
     SQLITE_BIND_INT(db, stmt, 2, value, error);
     SQLITE_BIND_TEXT(db, stmt, 3, name, error);
-
-    if (sqlite3_step(stmt) != SQLITE_OK) {
-        fprintf(stderr, " ! database_sticker_set: Failed to update or set sticker '%s' for "
-                "'%s' %d: %s\n", name, type, uri, sqlite3_errmsg(db));
-        goto error;
-    }
-
+    SQLITE_STEP_OK(db, stmt, error);
     ret = true;
 error:
     sqlite3_finalize(stmt);
@@ -262,10 +244,7 @@ database_sticker_delete_specify(sqlite3 *db, const char *type, int uri, const ch
     if (name)
         SQLITE_BIND_TEXT(db, stmt, 2, name, error);
 
-    if (! (ret = (sqlite3_step(stmt) == SQLITE_OK))) {
-        fprintf(stderr, " . database_sticker_delete_specify: Failed to delete sticker\n");
-        goto error;
-    }
+    SQLITE_STEP_OK(db, stmt, error);
     ret = true;
 error:
     sqlite3_finalize(stmt);
diff --git a/src/database/update.c b/src/database/update.c
index da52f2041a39e911427823b68ce88825351ca304..ae1c9c6dcd9c7cdf0c8fa2bba70a02c2c92030b7 100644
--- a/src/database/update.c
+++ b/src/database/update.c
@@ -61,14 +61,7 @@ database_add_kara(sqlite3 *db, const char *filename)
         goto error;
     }
 
-    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,
-                sqlite3_errmsg(db));
-        goto error;
-    }
-
+    SQLITE_STEP_DONE(db, stmt, error);
     status = true;
 error:
     sqlite3_finalize(stmt);
@@ -123,12 +116,7 @@ database_update_add(sqlite3 *db, const char *kara_path, struct kara_metadata *md
         goto error;
     }
 
-    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;
-    }
-
+    SQLITE_STEP_DONE(db, stmt, error);
     ret = true;
 error:
     sqlite3_finalize(stmt);
diff --git a/src/database/user.c b/src/database/user.c
index c7bf11ecfb67a3feca5fac056757a9c57670c2f0..38704430d4c7f979ddbff6989446caa320d3612d 100644
--- a/src/database/user.c
+++ b/src/database/user.c
@@ -10,18 +10,11 @@ database_user_authentificate(sqlite3 *db, const char *password)
     static const char *SQL_STMT = "SELECT username FROM users WHERE password = ?";
     sqlite3_stmt *stmt = 0;
     bool ret = false;
-
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, password, error);
-
-    if (sqlite3_step(stmt) != SQLITE_ROW) {
-        fprintf(stderr, " ! database_user_authentificate: No user found\n");
-        goto error;
-    }
-
+    SQLITE_STEP_ROW(db, stmt, error);
     fprintf(stderr, " * User authentification was successfull for user %s\n",
             sqlite3_column_text(stmt, 0));
-
     ret = true;
 error:
     sqlite3_finalize(stmt);
@@ -34,19 +27,11 @@ database_user_add(sqlite3 *db, const char *username, const char *password)
     static const char *SQL_STMT = "INSERT INTO users (username, password) VALUES (?, ?)";
     sqlite3_stmt *stmt = 0;
     bool ret = false;
-
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, username, error);
     SQLITE_BIND_TEXT(db, stmt, 2, password, error);
-
-    if (sqlite3_step(stmt) != SQLITE_OK) {
-        fprintf(stderr, " ! database_user_add: Failed to add user %s: %s\n",
-                username, sqlite3_errmsg(db));
-        goto error;
-    }
-
+    SQLITE_STEP_OK(db, stmt, error);
     fprintf(stderr, " * User %s added successfully\n", username);
-
     ret = true;
 error:
     sqlite3_finalize(stmt);