diff --git a/src/knot/catalog/catalog_db.c b/src/knot/catalog/catalog_db.c
index 8d1e1912c8f50453828d6d59a220ab828b8489de..b483f4d09467859c1894a0b22a83b3ea77cebf28 100644
--- a/src/knot/catalog/catalog_db.c
+++ b/src/knot/catalog/catalog_db.c
@@ -157,7 +157,7 @@ void catalog_commit_cleanup(catalog_t *cat)
 	}
 }
 
-int catalog_deinit(catalog_t *cat)
+void catalog_deinit(catalog_t *cat)
 {
 	assert(cat->rw_txn == NULL);
 	if (cat->ro_txn != NULL) {
@@ -169,7 +169,6 @@ int catalog_deinit(catalog_t *cat)
 		free(cat->old_ro_txn);
 	}
 	knot_lmdb_deinit(&cat->db);
-	return KNOT_EOK;
 }
 
 int catalog_add(catalog_t *cat, const knot_dname_t *member,
diff --git a/src/knot/catalog/catalog_db.h b/src/knot/catalog/catalog_db.h
index 5f68088145ee93eee9201640c0e0fabf888f9dbf..69da1e4cf5a48f87bbe2948d9a327ba2846cd305 100644
--- a/src/knot/catalog/catalog_db.h
+++ b/src/knot/catalog/catalog_db.h
@@ -101,10 +101,8 @@ void catalog_commit_cleanup(catalog_t *cat);
  * \brief Close the catalog and de-init the structure.
  *
  * \param cat   Catalog to be closed.
- *
- * \return KNOT_E*
  */
-int catalog_deinit(catalog_t *cat);
+void catalog_deinit(catalog_t *cat);
 
 /*!
  * \brief Add a member zone to the catalog database.
diff --git a/src/utils/common/util_conf.c b/src/utils/common/util_conf.c
index 601bb14a8446475cd2fb74043be30c7852dfc7de..5a706538ab5fc15e33f505feed86320c694a06f4 100644
--- a/src/utils/common/util_conf.c
+++ b/src/utils/common/util_conf.c
@@ -33,6 +33,7 @@ int util_conf_init_confdb(const char *confdb)
 {
 	if (util_conf_initialized()) {
 		ERR("Configuration already initialized.\n");
+		util_conf_deinit();
 		return KNOT_ESEMCHECK;
 	}
 
@@ -125,5 +126,5 @@ void util_update_privileges(void)
 
 void util_conf_deinit(void)
 {
-	conf_free(conf());
+	conf_update(NULL, CONF_UPD_FNONE);
 }
diff --git a/src/utils/kcatalogprint/main.c b/src/utils/kcatalogprint/main.c
index fbd84478f16dd503b9d5f4ae93ef9e31bc53994c..e25ce5aace619b4d56502e3f1aad3494999c9631 100644
--- a/src/utils/kcatalogprint/main.c
+++ b/src/utils/kcatalogprint/main.c
@@ -93,28 +93,28 @@ int main(int argc, char *argv[])
 		switch (opt) {
 		case 'c':
 			if (util_conf_init_file(optarg) != KNOT_EOK) {
-				return EXIT_FAILURE;
+				goto failure;
 			}
 			break;
 		case 'C':
 			if (util_conf_init_confdb(optarg) != KNOT_EOK) {
-				return EXIT_FAILURE;
+				goto failure;
 			}
 			break;
 		case 'D':
 			if (util_conf_init_justdb("catalog-db", optarg) != KNOT_EOK) {
-				return EXIT_FAILURE;
+				goto failure;
 			}
 			break;
 		case 'h':
 			print_help();
-			return EXIT_SUCCESS;
+			goto success;
 		case 'V':
 			print_version(PROGRAM_NAME);
-			return EXIT_SUCCESS;
+			goto success;
 		default:
 			print_help();
-			return EXIT_FAILURE;
+			goto failure;
 		}
 	}
 
@@ -122,13 +122,13 @@ int main(int argc, char *argv[])
 	if (argc - optind > 0) {
 		fprintf(stderr, "Warning: obsolete parameter specified\n");
 		if (util_conf_init_justdb("catalog-db", argv[optind]) != KNOT_EOK) {
-			return EXIT_FAILURE;
+			goto failure;
 		}
 		optind++;
 	}
 
 	if (util_conf_init_default() != KNOT_EOK) {
-		return EXIT_FAILURE;
+		goto failure;
 	}
 
 	catalog_t c = { { 0 } };
@@ -137,9 +137,12 @@ int main(int argc, char *argv[])
 	catalog_init(&c, db, 0); // mapsize grows automatically
 	free(db);
 	catalog_print(&c);
-	if (catalog_deinit(&c) != KNOT_EOK) {
-		return EXIT_FAILURE;
-	}
+	catalog_deinit(&c);
 
+success:
+	util_conf_deinit();
 	return EXIT_SUCCESS;
+failure:
+	util_conf_deinit();
+	return EXIT_FAILURE;
 }
diff --git a/src/utils/keymgr/main.c b/src/utils/keymgr/main.c
index 5b67231b00f9bc7acb6e121908132ebc3a4e7678..0aede86b312a61047cedee0c5f228351d9ca6057 100644
--- a/src/utils/keymgr/main.c
+++ b/src/utils/keymgr/main.c
@@ -316,17 +316,17 @@ int main(int argc, char *argv[])
 		switch (opt) {
 		case 'c':
 			if (util_conf_init_file(optarg) != KNOT_EOK) {
-				return EXIT_FAILURE;
+				goto failure;
 			}
 			break;
 		case 'C':
 			if (util_conf_init_confdb(optarg) != KNOT_EOK) {
-				return EXIT_FAILURE;
+				goto failure;
 			}
 			break;
 		case 'D':
 			if (util_conf_init_justdb("kasp-db", optarg) != KNOT_EOK) {
-				return EXIT_FAILURE;
+				goto failure;
 			}
 			break;
 		case 't':
@@ -336,8 +336,9 @@ int main(int argc, char *argv[])
 			ret = keymgr_generate_tsig(optarg, (argc > optind ? argv[optind] : "hmac-sha256"), parm);
 			if (ret != KNOT_EOK) {
 				ERROR("failed to generate TSIG (%s)\n", knot_strerror(ret));
+				goto failure;
 			}
-			return (ret == KNOT_EOK ? EXIT_SUCCESS : EXIT_FAILURE);
+			goto success;
 		case 'l':
 			just_list = true;
 			break;
@@ -352,18 +353,18 @@ int main(int argc, char *argv[])
 			break;
 		case 'h':
 			print_help();
-			return EXIT_SUCCESS;
+			goto success;
 		case 'V':
 			print_version(PROGRAM_NAME);
-			return EXIT_SUCCESS;
+			goto success;
 		default:
 			print_help();
-			return EXIT_FAILURE;
+			goto failure;
 		}
 	}
 
 	if (util_conf_init_default() != KNOT_EOK) {
-		return EXIT_FAILURE;
+		goto failure;
 	}
 
 	util_update_privileges();
@@ -379,9 +380,15 @@ int main(int argc, char *argv[])
 	} else {
 		ret = key_command(argc, argv, optind, &kaspdb, &list_params);
 	}
-
 	knot_lmdb_deinit(&kaspdb);
-	util_conf_deinit();
+	if (ret != KNOT_EOK) {
+		goto failure;
+	}
 
-	return (ret == KNOT_EOK ? EXIT_SUCCESS : EXIT_FAILURE);
+success:
+	util_conf_deinit();
+	return EXIT_SUCCESS;
+failure:
+	util_conf_deinit();
+	return EXIT_FAILURE;
 }
diff --git a/src/utils/kjournalprint/main.c b/src/utils/kjournalprint/main.c
index f6c942df66d46c3dfef4c477db8aaf095bbc2875..1d55fa0cc59c2d7a8f12ad5ee1a481b1fe477b24 100644
--- a/src/utils/kjournalprint/main.c
+++ b/src/utils/kjournalprint/main.c
@@ -334,29 +334,29 @@ int main(int argc, char *argv[])
 		switch (opt) {
 		case 'c':
 			if (util_conf_init_file(optarg) != KNOT_EOK) {
-				return EXIT_FAILURE;
+				goto failure;
 			}
 			break;
 		case 'C':
 			if (util_conf_init_confdb(optarg) != KNOT_EOK) {
-				return EXIT_FAILURE;
+				goto failure;
 			}
 			break;
 		case 'D':
 			if (util_conf_init_justdb("journal-db", optarg) != KNOT_EOK) {
-				return EXIT_FAILURE;
+				goto failure;
 			}
 			break;
 		case 'l':
 			if (str_to_int(optarg, &params.limit, 0, INT_MAX) != KNOT_EOK) {
 				print_help();
-				return EXIT_FAILURE;
+				goto failure;
 			}
 			break;
 		case 's':
 			if (str_to_u32(optarg, &params.serial) != KNOT_EOK) {
 				print_help();
-				return EXIT_FAILURE;
+				goto failure;
 			}
 			params.from_serial = true;
 			break;
@@ -378,13 +378,13 @@ int main(int argc, char *argv[])
 			break;
 		case 'h':
 			print_help();
-			return EXIT_SUCCESS;
+			goto success;
 		case 'V':
 			print_version(PROGRAM_NAME);
-			return EXIT_SUCCESS;
+			goto success;
 		default:
 			print_help();
-			return EXIT_FAILURE;
+			goto failure;
 		}
 	}
 
@@ -392,13 +392,13 @@ int main(int argc, char *argv[])
 	if ((justlist && (argc - optind > 0)) || (!justlist && (argc - optind > 1))) {
 		fprintf(stderr, "Warning: obsolete parameter specified\n");
 		if (util_conf_init_justdb("journal-db", argv[optind]) != KNOT_EOK) {
-			return EXIT_FAILURE;
+			goto failure;
 		}
 		optind++;
 	}
 
 	if (util_conf_init_default() != KNOT_EOK) {
-		return EXIT_FAILURE;
+		goto failure;
 	}
 
 	char *db = conf_db(conf(), C_JOURNAL_DB);
@@ -411,22 +411,22 @@ int main(int argc, char *argv[])
 			printf("No zones in journal DB\n");
 			// FALLTHROUGH
 		case KNOT_EOK:
-			return EXIT_SUCCESS;
+			goto success;
 		case KNOT_ENODB:
 			fprintf(stderr, "The journal DB does not exist\n");
-			return EXIT_FAILURE;
+			goto failure;
 		case KNOT_EMALF:
 			fprintf(stderr, "The journal DB is broken\n");
-			return EXIT_FAILURE;
+			goto failure;
 		default:
 			fprintf(stderr, "Failed to load zone list (%s)\n", knot_strerror(ret));
-			return EXIT_FAILURE;
+			goto failure;
 		}
 	} else {
 		if (argc - optind != 1) {
 			print_help();
 			free(db);
-			return EXIT_FAILURE;
+			goto failure;
 		}
 		knot_dname_t *name = knot_dname_from_str_alloc(argv[optind]);
 		knot_dname_to_lower(name);
@@ -444,17 +444,22 @@ int main(int argc, char *argv[])
 			break;
 		case KNOT_ENODB:
 			fprintf(stderr, "The journal DB does not exist\n");
-			return EXIT_FAILURE;
+			goto failure;
 		case KNOT_EOUTOFZONE:
 			fprintf(stderr, "The specified journal DB does not contain the specified zone\n");
-			return EXIT_FAILURE;
+			goto failure;
 		case KNOT_EOK:
 			break;
 		default:
 			fprintf(stderr, "Failed to load changesets (%s)\n", knot_strerror(ret));
-			return EXIT_FAILURE;
+			goto failure;
 		}
 	}
 
+success:
+	util_conf_deinit();
 	return EXIT_SUCCESS;
+failure:
+	util_conf_deinit();
+	return EXIT_FAILURE;
 }