diff --git a/src/knot/journal/journal_basic.c b/src/knot/journal/journal_basic.c
index 8dc8d165faac4abedf158b5e193b534bd8bd74d1..9874574eab816ccd6bb35e6813dbb0f0ce7b2692 100644
--- a/src/knot/journal/journal_basic.c
+++ b/src/knot/journal/journal_basic.c
@@ -15,8 +15,6 @@
  */
 
 #include "knot/journal/journal_basic.h"
-
-#include "knot/conf/conf.h"
 #include "knot/journal/journal_metadata.h"
 #include "libknot/error.h"
 
@@ -64,18 +62,18 @@ bool journal_serial_to(knot_lmdb_txn_t *txn, bool zij, uint32_t serial,
 
 bool journal_allow_flush(zone_journal_t j)
 {
-	conf_val_t val = conf_zone_get(conf(), C_ZONEFILE_SYNC, j.zone);
+	conf_val_t val = conf_zone_get(j.conf, C_ZONEFILE_SYNC, j.zone);
 	return conf_int(&val) >= 0;
 }
 
 size_t journal_conf_max_usage(zone_journal_t j)
 {
-	conf_val_t val = conf_zone_get(conf(), C_JOURNAL_MAX_USAGE, j.zone);
+	conf_val_t val = conf_zone_get(j.conf, C_JOURNAL_MAX_USAGE, j.zone);
 	return conf_int(&val);
 }
 
 size_t journal_conf_max_changesets(zone_journal_t j)
 {
-	conf_val_t val = conf_zone_get(conf(), C_JOURNAL_MAX_DEPTH, j.zone);
+	conf_val_t val = conf_zone_get(j.conf, C_JOURNAL_MAX_DEPTH, j.zone);
 	return conf_int(&val);
 }
diff --git a/src/knot/journal/journal_basic.h b/src/knot/journal/journal_basic.h
index cacc2c0bbcb438ed0857dd1399da1093b9865903..02ca5ddf6498d82fefad8a1a56ddee24e42e3e10 100644
--- a/src/knot/journal/journal_basic.h
+++ b/src/knot/journal/journal_basic.h
@@ -1,4 +1,4 @@
-/*  Copyright (C) 2019 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
+/*  Copyright (C) 2021 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -16,7 +16,7 @@
 
 #pragma once
 
-#include "knot/conf/schema.h"
+#include "knot/conf/conf.h"
 #include "knot/journal/knot_lmdb.h"
 #include "knot/updates/changesets.h"
 #include "libknot/dname.h"
@@ -24,6 +24,7 @@
 typedef struct {
 	knot_lmdb_db_t *db;
 	const knot_dname_t *zone;
+	void *conf; // needed only for journal write operations
 } zone_journal_t;
 
 #define JOURNAL_CHUNK_MAX (70 * 1024)
diff --git a/src/knot/zone/zone.c b/src/knot/zone/zone.c
index 2574c5327bdcd24b76017a8ba4f5ed5226b49e8e..07958dda63463c56a48d2caf130874d34b0fbd91 100644
--- a/src/knot/zone/zone.c
+++ b/src/knot/zone/zone.c
@@ -1,4 +1,4 @@
-/*  Copyright (C) 2020 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
+/*  Copyright (C) 2021 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -257,14 +257,16 @@ int zone_change_store(conf_t *conf, zone_t *zone, changeset_t *change, changeset
 		return KNOT_EINVAL;
 	}
 
-	int ret = journal_insert(zone_journal(zone), change, extra);
+	zone_journal_t j = { zone->journaldb, zone->name, conf };
+
+	int ret = journal_insert(j, change, extra);
 	if (ret == KNOT_EBUSY) {
 		log_zone_notice(zone->name, "journal is full, flushing");
 
 		/* Transaction rolled back, journal released, we may flush. */
 		ret = flush_journal(conf, zone, true, false);
 		if (ret == KNOT_EOK) {
-			ret = journal_insert(zone_journal(zone), change, extra);
+			ret = journal_insert(j, change, extra);
 		}
 	}
 
@@ -286,7 +288,9 @@ int zone_in_journal_store(conf_t *conf, zone_t *zone, zone_contents_t *new_conte
 		return KNOT_EINVAL;
 	}
 
-	int ret = journal_insert_zone(zone_journal(zone), new_contents);
+	zone_journal_t j = { zone->journaldb, zone->name, conf };
+
+	int ret = journal_insert_zone(j, new_contents);
 	if (ret == KNOT_EOK) {
 		log_zone_info(zone->name, "zone stored to journal, serial %u",
 		              zone_contents_serial(new_contents));
diff --git a/src/knot/zone/zone.h b/src/knot/zone/zone.h
index 84eb706d6903edf9d58e48d49b05cc2bf421164d..0ea2a66dfdea30ebb000239cf5a2fc6ba5cd3ab4 100644
--- a/src/knot/zone/zone.h
+++ b/src/knot/zone/zone.h
@@ -141,9 +141,12 @@ void zone_reset(conf_t *conf, zone_t *zone);
  */
 void zone_control_clear(zone_t *zone);
 
+/*!
+ * \brief Only for RO journal operations.
+ */
 inline static zone_journal_t zone_journal(zone_t *zone)
 {
-	zone_journal_t j = { zone->journaldb, zone->name };
+	zone_journal_t j = { zone->journaldb, zone->name, NULL };
 	return j;
 }
 
diff --git a/tests/knot/test_journal.c b/tests/knot/test_journal.c
index 18ffd21259cade29028ac3935ae40496c7242f47..3e2025cb3684576474e3690e6b0aa5694fc6b84b 100644
--- a/tests/knot/test_journal.c
+++ b/tests/knot/test_journal.c
@@ -31,7 +31,6 @@
 #include "libknot/libknot.h"
 #include "knot/zone/zone.h"
 #include "knot/zone/zone-diff.h"
-#include "libknot/rrtype/soa.h"
 #include "test_conf.h"
 
 #define RAND_RR_LABEL 16
@@ -58,6 +57,7 @@ static void set_conf(int zonefile_sync, size_t journal_usage, const knot_dname_t
 	         zonefile_sync, journal_usage);
 	_unused_ int ret = test_conf(conf_str, NULL);
 	assert(ret == KNOT_EOK);
+	jj.conf = conf();
 }
 
 static void unset_conf(void)
@@ -457,7 +457,7 @@ static void test_size_control(const knot_dname_t *zone1, const knot_dname_t *zon
 {
 	set_conf(-1, 100 * 1024, zone1);
 
-	zone_journal_t jj2 = { &jdb, zone2 };
+	zone_journal_t jj2 = { &jdb, zone2, conf() };
 	changeset_t *small_ch2 = changeset_new(zone2);
 	init_random_changeset(small_ch2, 1, 2, 100, zone2, false);
 	int ret = journal_insert(jj2, small_ch2, NULL);