diff --git a/src/common/namedb/namedb.h b/src/common/namedb/namedb.h
index e3017079b772f4433eda44b18a78c111df929f28..f9444076d8d3eabb1514615b2acc5ff14820cac2 100644
--- a/src/common/namedb/namedb.h
+++ b/src/common/namedb/namedb.h
@@ -42,7 +42,7 @@ struct namedb_api {
 
 	/* Context operations */
 
-	knot_namedb_t *(*init)(const char *config, mm_ctx_t *mm);
+	int (*init)(const char *config, knot_namedb_t **db, mm_ctx_t *mm);
 	void (*deinit)(knot_namedb_t *db);
 
 	/* Transactions */
diff --git a/src/common/namedb/namedb_lmdb.c b/src/common/namedb/namedb_lmdb.c
index 88867aec7c1f029d5f1290e3d640cd7b35fe0b00..92bdfe6a078cb7fa17a6696eb1d26fb0713ad327 100644
--- a/src/common/namedb/namedb_lmdb.c
+++ b/src/common/namedb/namedb_lmdb.c
@@ -105,22 +105,24 @@ static void dbase_close(struct lmdb_env *env)
 	mdb_env_close(env->env);
 }
 
-static knot_namedb_t *init(const char *config, mm_ctx_t *mm)
+static int init(const char *config, knot_namedb_t **db_ptr, mm_ctx_t *mm)
 {
 	struct lmdb_env *env = mm_alloc(mm, sizeof(struct lmdb_env));
 	if (env == NULL) {
-		return NULL;
+		return KNOT_ENOMEM;
 	}
 	memset(env, 0, sizeof(struct lmdb_env));
 
 	int ret = dbase_open(env, config);
 	if (ret != 0) {
 		mm_free(mm, env);
-		return NULL;
+		return KNOT_ERROR;
 	}
 
 	env->pool = mm;
-	return env;
+	*db_ptr = env;
+
+	return KNOT_EOK;
 }
 
 static void deinit(knot_namedb_t *db)
diff --git a/src/common/namedb/namedb_trie.c b/src/common/namedb/namedb_trie.c
index 9cdc5710567c877c466fdccc4e9854d2b385a8b4..9a23b8e8b8620ebb1ca697139a18f3bd9ac31bb6 100644
--- a/src/common/namedb/namedb_trie.c
+++ b/src/common/namedb/namedb_trie.c
@@ -18,9 +18,20 @@
 #include "common-knot/hattrie/hat-trie.h"
 #include "libknot/errcode.h"
 
-static knot_namedb_t *init(const char *handle, mm_ctx_t *mm)
+static int init(const char *config, knot_namedb_t **db, mm_ctx_t *mm)
 {
-	return hattrie_create_n(TRIE_BUCKET_SIZE, mm);
+	if (config != NULL || db == NULL) {
+		return KNOT_EINVAL;
+	}
+
+	hattrie_t *trie = hattrie_create_n(TRIE_BUCKET_SIZE, mm);
+	if (!trie) {
+		return KNOT_ENOMEM;
+	}
+
+	*db = trie;
+
+	return KNOT_EOK;
 }
 
 static void deinit(knot_namedb_t *db)
diff --git a/tests/namedb.c b/tests/namedb.c
index b6cb17152ae1dc30004a639fa05eddbf39de2d3b..e452f98254c29db1da6d44e0e6a1e3bdf59316f4 100644
--- a/tests/namedb.c
+++ b/tests/namedb.c
@@ -56,12 +56,13 @@ static void namedb_test_set(unsigned nkeys, char **keys, char *dbid,
 	}
 
 	/* Create database */
-	knot_namedb_t *db = api->init(dbid, pool);
-	ok(db != NULL, "%s: create", api->name);
+	knot_namedb_t *db = NULL;
+	int ret = api->init(dbid, &db, pool);
+	ok(ret == KNOT_EOK && db != NULL, "%s: create", api->name);
 
 	/* Start WR transaction. */
 	knot_txn_t txn;
-	int ret = api->txn_begin(db, &txn, 0);
+	ret = api->txn_begin(db, &txn, 0);
 	ok(ret == KNOT_EOK, "%s: txn_begin(WR)", api->name);
 
 	/* Insert keys */
@@ -169,7 +170,7 @@ int main(int argc, char *argv[])
 
 	/* Execute test set for all backends. */
 	namedb_test_set(nkeys, keys, dbid, namedb_lmdb_api(), &pool);
-	namedb_test_set(nkeys, keys, dbid, namedb_trie_api(), &pool);
+	namedb_test_set(nkeys, keys, NULL, namedb_trie_api(), &pool);
 
 	/* Cleanup */
 	mp_delete(pool.ctx);