diff --git a/scripts/rrset-deep-free-remove-arg.cocci b/scripts/rrset-deep-free-remove-arg.cocci
new file mode 100644
index 0000000000000000000000000000000000000000..4a63a511500feff0c40b2b2d9ff1ceacd054ba45
--- /dev/null
+++ b/scripts/rrset-deep-free-remove-arg.cocci
@@ -0,0 +1,15 @@
+//
+// Remove third argument from knot_rrset_deep_free{,no_sig}() calls
+//
+
+@@
+expression E1, E2, E3;
+@@
+(
+ knot_rrset_deep_free
+|
+ knot_rrset_deep_free_no_sig
+)
+ (E1, E2
+- , E3
+ )
diff --git a/src/knot/ctl/knotc_main.c b/src/knot/ctl/knotc_main.c
index f72c2cc095c2f59d9205cbcd410d16084bee5262..6b5bb79422edf7868676526b4c3db61c557dc2d2 100644
--- a/src/knot/ctl/knotc_main.c
+++ b/src/knot/ctl/knotc_main.c
@@ -222,7 +222,7 @@ static int cmd_remote(const char *cmd, uint16_t rrt, int argc, char *argv[])
 	}
 
 	if (knot_packet_to_wire(qr, &buf, &buflen) != KNOT_EOK) {
-		knot_rrset_deep_free(&rr, 1, 1);
+		knot_rrset_deep_free(&rr, 1);
 		knot_packet_free(&qr);
 		return 1;
 	}
@@ -258,7 +258,7 @@ static int cmd_remote(const char *cmd, uint16_t rrt, int argc, char *argv[])
 
 	/* Cleanup. */
 	if (rc == 0) printf("\n");
-	knot_rrset_deep_free(&rr, 1, 1);
+	knot_rrset_deep_free(&rr, 1);
 
 	/* Close connection. */
 	socket_close(s);
diff --git a/src/knot/ctl/remote.c b/src/knot/ctl/remote.c
index c948701f2bce14a5664688f29c7e875fefc172cb..1c703291ea536b76e5f8302be65059ace647041a 100644
--- a/src/knot/ctl/remote.c
+++ b/src/knot/ctl/remote.c
@@ -533,13 +533,13 @@ static int remote_send_chunk(int c, knot_packet_t *pkt, const char* d,
 	size_t rrlen = rlen;
 	ret = knot_rrset_to_wire(rr, rwire + len, &rrlen, rlen, &rr_count, NULL);
 	if (ret != KNOT_EOK) {
-		knot_rrset_deep_free(&rr, 1, 1);
+		knot_rrset_deep_free(&rr, 1);
 		return ret;
 	}
 	knot_wire_set_nscount(rwire, rr_count);
 	len += rrlen;
 	rlen -= rrlen;
-	knot_rrset_deep_free(&rr, 1, 1);
+	knot_rrset_deep_free(&rr, 1);
 
 	if (len > 0) {
 		return tcp_send(c, rwire, len);
diff --git a/src/knot/server/zones.c b/src/knot/server/zones.c
index 80999c3080313a8c37b9868116ecffa0aeb9e6e1..b757f9b18ccba3500bdc31d88bd2bf311bcb8d35 100644
--- a/src/knot/server/zones.c
+++ b/src/knot/server/zones.c
@@ -782,7 +782,7 @@ int zones_changesets_from_binary(knot_changesets_t *chgsets)
 				} else {
 					/* Final SOA. */
 					dbg_xfr_verb("xfr: extra SOA\n");
-					knot_rrset_deep_free(&rrset, 1, 1);
+					knot_rrset_deep_free(&rrset, 1);
 					break;
 				}
 			} else {
@@ -1083,7 +1083,7 @@ static void zones_free_merged_changesets(knot_changesets_t *diff_chs,
 			 * thus must be freed
 			 */
 			knot_rrset_deep_free_no_sig(
-			  &(knot_changesets_get_last(sec_chs)->soa_from), 1, 1);
+			  &(knot_changesets_get_last(sec_chs)->soa_from), 1);
 
 			// Reset sec_chs' chngeset list, else we'd double free.
 			init_list(&sec_chs->sets);
diff --git a/src/knot/zone/zone-load.c b/src/knot/zone/zone-load.c
index b26252cc142b85dd618bb4e18d7ee322a4fa8f79..7622a7eac855be06e79ef72fc3fe24b9fc83156e 100644
--- a/src/knot/zone/zone-load.c
+++ b/src/knot/zone/zone-load.c
@@ -144,7 +144,7 @@ static int find_rrset_for_rrsig_in_node(knot_zone_contents_t *zone,
 		return KNOT_EINVAL;
 	} else if (ret > 0) {
 		/* Merged, free data + owner, but not DNAMEs inside RDATA. */
-		knot_rrset_deep_free(&rrsig, 1, 0);
+		knot_rrset_deep_free(&rrsig, 1);
 	}
 	assert(tmp_rrset->rrsigs != NULL);
 
@@ -303,7 +303,7 @@ static void process_rr(const scanner_t *scanner)
 			} else {
 				log_zone_warning("encountered identical "
 				                 "extra SOA record\n");
-				knot_rrset_deep_free(&current_rrset, 1, 1);
+				knot_rrset_deep_free(&current_rrset, 1);
 				parser->ret = KNOT_EOK;
 				return;
 			}
@@ -452,7 +452,7 @@ static void process_rr(const scanner_t *scanner)
 		parser->ret = ret;
 		return;
 	} else if (ret > 0) {
-		knot_rrset_deep_free(&current_rrset, 1, 0);
+		knot_rrset_deep_free(&current_rrset, 1);
 	}
 	assert(parser->current_zone && node);
 	/* Do mandatory semantic checks. */
diff --git a/src/libknot/dnssec/sig0.c b/src/libknot/dnssec/sig0.c
index e0df8952bb0441f6548b08e3a14bb2916f14e5a1..42eb93830fb0b24a264ed53120e94d6773bcdff6 100644
--- a/src/libknot/dnssec/sig0.c
+++ b/src/libknot/dnssec/sig0.c
@@ -191,7 +191,7 @@ int knot_sig0_sign(uint8_t *wire, size_t *wire_size, size_t wire_max_size,
 
 	uint8_t *sig_rdata = sig0_create_rdata(sig_rrset, key);
 	if (!sig_rdata) {
-		knot_rrset_deep_free(&sig_rrset, 1, 0);
+		knot_rrset_deep_free(&sig_rrset, 1);
 		return KNOT_ENOMEM;
 	}
 
@@ -207,7 +207,7 @@ int knot_sig0_sign(uint8_t *wire, size_t *wire_size, size_t wire_max_size,
 	int result = knot_rrset_to_wire(sig_rrset, wire_end, &wire_sig_size,
 	                                wire_avail_size, &written_rr_count,
 	                                NULL);
-	knot_rrset_deep_free(&sig_rrset, 1, 0);
+	knot_rrset_deep_free(&sig_rrset, 1);
 	if (result != KNOT_EOK) {
 		return result;
 	}
diff --git a/src/libknot/dnssec/zone-nsec.c b/src/libknot/dnssec/zone-nsec.c
index 2d22beafa6fe6b9c20477fa887a1f0490d26b744..2b5a929bd1e330990fdb11d9dc3e1ae7ccfb085a 100644
--- a/src/libknot/dnssec/zone-nsec.c
+++ b/src/libknot/dnssec/zone-nsec.c
@@ -140,8 +140,8 @@ static int changeset_remove_nsec(const knot_rrset_t *oldrr,
 	result = knot_changeset_add_rrset(changeset, old_nsec,
 	                                  KNOT_CHANGESET_REMOVE);
 	if (result != KNOT_EOK) {
-		knot_rrset_deep_free(&old_nsec, 1, 1);
-		knot_rrset_deep_free(&old_rrsigs, 1, 1);
+		knot_rrset_deep_free(&old_nsec, 1);
+		knot_rrset_deep_free(&old_rrsigs, 1);
 		return result;
 	}
 
@@ -149,7 +149,7 @@ static int changeset_remove_nsec(const knot_rrset_t *oldrr,
 		result = knot_changeset_add_rrset(changeset, old_rrsigs,
 		                                  KNOT_CHANGESET_REMOVE);
 		if (result != KNOT_EOK) {
-			knot_rrset_deep_free(&old_rrsigs, 1, 1);
+			knot_rrset_deep_free(&old_rrsigs, 1);
 			return result;
 		}
 	}
@@ -264,7 +264,7 @@ static int connect_nsec_nodes(knot_node_t *a, knot_node_t *b, void *d)
 		                     KNOT_RRSET_COMPARE_WHOLE)) {
 			// current NSEC is valid, do nothing
 			dbg_dnssec_detail("NSECs equal.\n");
-			knot_rrset_deep_free(&new_nsec, 1, 1);
+			knot_rrset_deep_free(&new_nsec, 1);
 			return KNOT_EOK;
 		}
 
@@ -274,7 +274,7 @@ static int connect_nsec_nodes(knot_node_t *a, knot_node_t *b, void *d)
 		knot_node_set_replaced_nsec(a);
 		ret = changeset_remove_nsec(old_nsec, data->changeset);
 		if (ret != KNOT_EOK) {
-			knot_rrset_deep_free(&new_nsec, 1, 1);
+			knot_rrset_deep_free(&new_nsec, 1);
 			return ret;
 		}
 	}
@@ -774,7 +774,7 @@ static void free_nsec3_tree(knot_zone_tree_t *nodes)
 			// referenced RRSIGs from old NSEC3 tree
 			node->rrset_tree[i]->rrsigs = NULL;
 			// newly allocated NSEC3 nodes
-			knot_rrset_deep_free(&node->rrset_tree[i], 1, 1);
+			knot_rrset_deep_free(&node->rrset_tree[i], 1);
 		}
 
 		knot_node_free(&node);
diff --git a/src/libknot/dnssec/zone-sign.c b/src/libknot/dnssec/zone-sign.c
index 388f675840a576a6cedf399e02e1aa460e2edcc7..07a5a6c828e2df1ee3fa8e9676e05e37bbb5c3ac 100644
--- a/src/libknot/dnssec/zone-sign.c
+++ b/src/libknot/dnssec/zone-sign.c
@@ -226,8 +226,7 @@ static int remove_expired_rrsigs(const knot_rrset_t *covered,
 
 	if (to_remove != NULL && result != KNOT_EOK) {
 		int free_owners = true;
-		int free_rdata_dnames = true;
-		knot_rrset_deep_free(&to_remove, free_owners, free_rdata_dnames);
+		knot_rrset_deep_free(&to_remove, free_owners);
 	}
 
 	return result;
@@ -289,8 +288,7 @@ static int add_missing_rrsigs(const knot_rrset_t *covered,
 
 	if (to_add != NULL && result != KNOT_EOK) {
 		int free_owners = true;
-		int free_rdata_dnames = true;
-		knot_rrset_deep_free(&to_add, free_owners, free_rdata_dnames);
+		knot_rrset_deep_free(&to_add, free_owners);
 	}
 
 	return result;
@@ -746,7 +744,7 @@ done:
 	}
 
 	if (to_remove != NULL && result != KNOT_EOK) {
-		knot_rrset_deep_free(&to_remove, 1, 1);
+		knot_rrset_deep_free(&to_remove, 1);
 	}
 
 	return result;
@@ -824,7 +822,7 @@ static int add_missing_dnskeys(const knot_rrset_t *soa,
 	}
 
 	if (to_add != NULL && result != KNOT_EOK) {
-		knot_rrset_deep_free(&to_add, 1, 1);
+		knot_rrset_deep_free(&to_add, 1);
 	}
 
 	return result;
@@ -887,7 +885,7 @@ static int update_dnskeys_rrsigs(const knot_rrset_t *dnskeys,
 
 fail:
 
-	knot_rrset_deep_free(&new_dnskeys, 1, 1);
+	knot_rrset_deep_free(&new_dnskeys, 1);
 
 	return result;
 }
@@ -1073,7 +1071,7 @@ int knot_zone_sign_update_soa(const knot_rrset_t *soa,
 		result = knot_changeset_add_rrset(changeset, soa_copy,
 		                                  KNOT_CHANGESET_REMOVE);
 		if (result != KNOT_EOK) {
-			knot_rrset_deep_free(&soa_copy, 1, 1);
+			knot_rrset_deep_free(&soa_copy, 1);
 			return result;
 		}
 	}
@@ -1090,7 +1088,7 @@ int knot_zone_sign_update_soa(const knot_rrset_t *soa,
 
 	result = knot_rrset_deep_copy_no_sig(soa, &soa_to);
 	if (result != KNOT_EOK) {
-		knot_rrset_deep_free(&soa_from, 1, 1);
+		knot_rrset_deep_free(&soa_from, 1);
 		return result;
 	}
 
@@ -1100,8 +1098,8 @@ int knot_zone_sign_update_soa(const knot_rrset_t *soa,
 
 	result = add_missing_rrsigs(soa_to, NULL, zone_keys, policy, changeset);
 	if (result != KNOT_EOK) {
-		knot_rrset_deep_free(&soa_from, 1, 1);
-		knot_rrset_deep_free(&soa_to, 1, 1);
+		knot_rrset_deep_free(&soa_from, 1);
+		knot_rrset_deep_free(&soa_to, 1);
 		return result;
 	}
 
diff --git a/src/libknot/nameserver/chaos.c b/src/libknot/nameserver/chaos.c
index 2577de500d79c944f38c1884ce87764a03350c1c..44ca6adb7af9597ba37a8a822008acd3ba4f0a22 100644
--- a/src/libknot/nameserver/chaos.c
+++ b/src/libknot/nameserver/chaos.c
@@ -73,7 +73,7 @@ static knot_rrset_t *create_txt_rrset(const knot_dname_t *owner,
 
 	uint8_t *rdata = knot_rrset_create_rdata(rrset, response_len + 1);
 	if (!rdata) {
-		knot_rrset_deep_free(&rrset, 1, 0);
+		knot_rrset_deep_free(&rrset, 1);
 		return NULL;
 	}
 
@@ -103,17 +103,17 @@ static int answer_txt(knot_nameserver_t *nameserver, knot_packet_t *response,
 
 	int result = knot_response_add_rrset_answer(response, rrset, 1, 0, 0);
 	if (result != KNOT_EOK) {
-		knot_rrset_deep_free(&rrset, 1, 0);
+		knot_rrset_deep_free(&rrset, 1);
 		return KNOT_RCODE_SERVFAIL;
 	}
 
 	result = ns_response_to_wire(response, response_wire, response_size);
 	if (result != KNOT_EOK) {
-		knot_rrset_deep_free(&rrset, 1, 0);
+		knot_rrset_deep_free(&rrset, 1);
 		return KNOT_RCODE_SERVFAIL;
 	}
 
-	knot_rrset_deep_free(&rrset, 1, 0);
+	knot_rrset_deep_free(&rrset, 1);
 	knot_response_set_rcode(response, KNOT_RCODE_NOERROR);
 
 	return KNOT_RCODE_NOERROR;
diff --git a/src/libknot/nameserver/name-server.c b/src/libknot/nameserver/name-server.c
index a1c75e5dafe6a77c0873db7f06c84bb010cc2da6..64d8eec2568e08bc3fc4d79482b336acfd45cd93 100644
--- a/src/libknot/nameserver/name-server.c
+++ b/src/libknot/nameserver/name-server.c
@@ -161,7 +161,7 @@ dbg_ns_exec_verb(
 		int ret = knot_packet_add_tmp_rrset(resp, synth_rrset);
 		if (ret != KNOT_EOK) {
 			dbg_ns("Failed to add sythetized RRSet to tmp list.\n");
-			knot_rrset_deep_free(&synth_rrset, 1, 1);
+			knot_rrset_deep_free(&synth_rrset, 1);
 			return ret;
 		}
 		*rrset = synth_rrset;
@@ -348,7 +348,7 @@ static int ns_follow_cname(const knot_node_t **node,
 				dbg_ns("Failed to add synthetized RRSet (CNAME "
 				       "follow) to the tmp RRSets in response."
 				       "\n");
-				knot_rrset_deep_free(&rrset, 1, 1);
+				knot_rrset_deep_free(&rrset, 1);
 				cname_chain_free(&cname_chain);
 				return ret;
 			}
@@ -888,7 +888,7 @@ static int ns_put_authority_soa(const knot_zone_contents_t *zone,
 		/* Need to add it as temporary, so it get's freed. */
 		ret = knot_packet_add_tmp_rrset(resp, soa_copy);
 		if (ret != KNOT_EOK) {
-			knot_rrset_deep_free(&soa_copy, 1, 1);
+			knot_rrset_deep_free(&soa_copy, 1);
 			return ret;
 		}
 	}
diff --git a/src/libknot/packet/packet.c b/src/libknot/packet/packet.c
index e518349b1fd176869587ba48bbbeab5cb2f8bd66..2bb3e5afde8a7f7e89499fee2d7de88354f85c98 100644
--- a/src/libknot/packet/packet.c
+++ b/src/libknot/packet/packet.c
@@ -167,7 +167,7 @@ dbg_packet_exec_verb(
 	if (size - *pos < rdlength) {
 		dbg_packet("Malformed RR: Not enough data to parse RR"
 		           " RDATA (size: %zu, position: %zu).\n", size, *pos);
-		knot_rrset_deep_free(&rrset, 1, 1);
+		knot_rrset_deep_free(&rrset, 1);
 		return NULL;
 	}
 
@@ -184,7 +184,7 @@ dbg_packet_exec_verb(
 	int ret = knot_packet_parse_rdata(rrset, wire, pos, size, rdlength);
 	if (ret != KNOT_EOK) {
 		dbg_packet("Malformed RR: Could not parse RDATA.\n");
-		knot_rrset_deep_free(&rrset, 1, 1);
+		knot_rrset_deep_free(&rrset, 1);
 		return NULL;
 	}
 
@@ -300,10 +300,10 @@ static int knot_packet_parse_rrs(const uint8_t *wire, size_t *pos,
 			break;
 		} else if (err == 1) {	// merged, shallow data copy
 			dbg_packet_detail("RRSet merged, freeing.\n");
-			knot_rrset_deep_free(&rrset, 1, 0);
+			knot_rrset_deep_free(&rrset, 1);
 			continue;
 		} else if (err == 2) { // skipped
-			knot_rrset_deep_free(&rrset, 1, 1);
+			knot_rrset_deep_free(&rrset, 1);
 			continue;
 		}
 
@@ -312,7 +312,7 @@ static int knot_packet_parse_rrs(const uint8_t *wire, size_t *pos,
 			// remove the last RRSet from the list of RRSets
 			// - just decrement the count
 			--(*rrset_count);
-			knot_rrset_deep_free(&rrset, 1, 1);
+			knot_rrset_deep_free(&rrset, 1);
 			break;
 		}
 
@@ -1024,7 +1024,7 @@ dbg_packet_exec(
 		// function (for reallocating rrset array)
 		// TODO sort out freeing, this WILL leak.
 		knot_rrset_deep_free(
-			&(((knot_rrset_t **)(pkt->tmp_rrsets))[i]), 1, 1);
+			&(((knot_rrset_t **)(pkt->tmp_rrsets))[i]), 1);
 	}
 }
 
@@ -1179,7 +1179,7 @@ void knot_packet_dump(const knot_packet_t *packet)
 static int knot_packet_free_section(const knot_rrset_t **s, short count) {
 	/*! \todo The API is really incompatible here. */
 	for (short i = 0; i < count; ++i)
-		knot_rrset_deep_free((knot_rrset_t **)s + i, 1, 1);
+		knot_rrset_deep_free((knot_rrset_t **)s + i, 1);
 	return count;
 }
 
diff --git a/src/libknot/rrset.c b/src/libknot/rrset.c
index c2da9dda0a215ba73b42da85b476a0c886411d8b..0952036df6f68bc5d291dda9d2d5b141a6016210 100644
--- a/src/libknot/rrset.c
+++ b/src/libknot/rrset.c
@@ -1314,7 +1314,7 @@ int knot_rrset_deep_copy(const knot_rrset_t *from, knot_rrset_t **to)
 		result = knot_rrset_deep_copy_no_sig(from->rrsigs,
 		                                     &(*to)->rrsigs);
 		if (result != KNOT_EOK) {
-			knot_rrset_deep_free(to, 1, 0);
+			knot_rrset_deep_free(to, 1);
 		}
 	}
 
@@ -1361,8 +1361,7 @@ void knot_rrset_free(knot_rrset_t **rrset)
 	*rrset = NULL;
 }
 
-void knot_rrset_deep_free(knot_rrset_t **rrset, int free_owner,
-                          int free_rdata_dnames)
+void knot_rrset_deep_free(knot_rrset_t **rrset, int free_owner)
 {
 	/*! \bug The number of different frees in rrset is too damn high! */
 	if (rrset == NULL || *rrset == NULL) {
@@ -1370,8 +1369,7 @@ void knot_rrset_deep_free(knot_rrset_t **rrset, int free_owner,
 	}
 
 	if ((*rrset)->rrsigs != NULL) {
-		knot_rrset_deep_free(&(*rrset)->rrsigs, free_owner,
-		                     0 /* revelation: unused */);
+		knot_rrset_deep_free(&(*rrset)->rrsigs, free_owner);
 	}
 
 	free((*rrset)->rdata);
@@ -1385,8 +1383,7 @@ void knot_rrset_deep_free(knot_rrset_t **rrset, int free_owner,
 	*rrset = NULL;
 }
 
-void knot_rrset_deep_free_no_sig(knot_rrset_t **rrset, int free_owner,
-                                 int free_rdata_dnames)
+void knot_rrset_deep_free_no_sig(knot_rrset_t **rrset, int free_owner)
 {
 	if (rrset == NULL || *rrset == NULL) {
 		return;
@@ -1546,7 +1543,7 @@ int knot_rrset_sort_rdata(knot_rrset_t *rrset)
 
 	int result = knot_rrset_merge_sort(sorted, rrset, NULL, NULL);
 	if (result != KNOT_EOK) {
-		knot_rrset_deep_free(&sorted, 1, 1);
+		knot_rrset_deep_free(&sorted, 1);
 		return result;
 	}
 
@@ -1920,7 +1917,7 @@ int knot_rrset_remove_rr_using_rrset(knot_rrset_t *from,
 			/* RR was removed, can be added to 'return' RRSet. */
 			ret = knot_rrset_add_rr_from_rrset(return_rr, what, i);
 			if (ret != KNOT_EOK) {
-				knot_rrset_deep_free(&return_rr, 0, 0);
+				knot_rrset_deep_free(&return_rr, 0);
 				dbg_xfrin("xfr: Could not add RR (%s).\n",
 				          knot_strerror(ret));
 				return ret;
@@ -1933,7 +1930,7 @@ int knot_rrset_remove_rr_using_rrset(knot_rrset_t *from,
 			dbg_rrset("rrset: remove_using_rrset: "
 			          "RRSet removal failed (%s).\n",
 			          knot_strerror(ret));
-			knot_rrset_deep_free(&return_rr, 0, 0);
+			knot_rrset_deep_free(&return_rr, 0);
 			return ret;
 		}
 	}
@@ -1947,7 +1944,7 @@ int knot_rrset_remove_rr_using_rrset_del(knot_rrset_t *from,
 {
 	knot_rrset_t *rr_removed = NULL;
 	int ret = knot_rrset_remove_rr_using_rrset(from, what, &rr_removed, 0);
-	knot_rrset_deep_free(&rr_removed, 1, 1);
+	knot_rrset_deep_free(&rr_removed, 1);
 	return ret;
 	for (uint16_t i = 0; i < what->rdata_count; ++i) {
 		int ret = knot_rrset_remove_rr(from, what, i);
diff --git a/src/libknot/rrset.h b/src/libknot/rrset.h
index a94762be0b2639a58d59b79fb3906ab18b662ace..e77d51e227e040543f6cab26c3c0fcb7ed7a3fe5 100644
--- a/src/libknot/rrset.h
+++ b/src/libknot/rrset.h
@@ -330,11 +330,9 @@ void knot_rrset_free(knot_rrset_t **rrset);
  *                          present in RDATA. Set to 0 otherwise. (See
  *                          knot_rdata_deep_free().)
  */
-void knot_rrset_deep_free(knot_rrset_t **rrset, int free_owner,
-                          int free_rdata_dnames);
+void knot_rrset_deep_free(knot_rrset_t **rrset, int free_owner);
 
-void knot_rrset_deep_free_no_sig(knot_rrset_t **rrset, int free_owner,
-                                 int free_rdata_dnames);
+void knot_rrset_deep_free_no_sig(knot_rrset_t **rrset, int free_owner);
 
 int knot_rrset_to_wire(const knot_rrset_t *rrset, uint8_t *wire, size_t *size,
                        size_t max_size, uint16_t *rr_count, void *comp_data);
diff --git a/src/libknot/tsig-op.c b/src/libknot/tsig-op.c
index 2d659f1a5393220045bebb2012301009bd61c799..482ebd5489db2b7e1f70e694109a44a2fbcea4bf 100644
--- a/src/libknot/tsig-op.c
+++ b/src/libknot/tsig-op.c
@@ -513,7 +513,7 @@ dbg_rrset_exec_detail(
 	if (ret != KNOT_EOK) {
 		dbg_tsig("TSIG: could not create wire or sign wire: %s\n",
 		         knot_strerror(ret));
-		knot_rrset_deep_free(&tmp_tsig, 1, 1);
+		knot_rrset_deep_free(&tmp_tsig, 1);
 		return ret;
 	}
 
@@ -531,11 +531,11 @@ dbg_rrset_exec_detail(
 	if (ret != KNOT_EOK) {
 		dbg_tsig("TSIG: rrset_to_wire = %s\n", knot_strerror(ret));
 		*digest_len = 0;
-		knot_rrset_deep_free(&tmp_tsig, 1, 1);
+		knot_rrset_deep_free(&tmp_tsig, 1);
 		return ret;
 	}
 
-	knot_rrset_deep_free(&tmp_tsig, 1, 1);
+	knot_rrset_deep_free(&tmp_tsig, 1);
 
 	dbg_tsig("TSIG: written TSIG RR (wire len %zu)\n", tsig_wire_len);
 	*msg_len += tsig_wire_len;
@@ -584,7 +584,7 @@ int knot_tsig_sign_next(uint8_t *msg, size_t *msg_len, size_t msg_max_len,
 	uint8_t *wire = malloc(wire_len);
 	if (!wire) {
 		ERR_ALLOC_FAILED;
-		knot_rrset_deep_free(&tmp_tsig, 1, 1);
+		knot_rrset_deep_free(&tmp_tsig, 1);
 		return KNOT_ENOMEM;
 	}
 	memset(wire, 0, wire_len);
@@ -613,13 +613,13 @@ int knot_tsig_sign_next(uint8_t *msg, size_t *msg_len, size_t msg_max_len,
 	/* No matter how the function did, this data is no longer needed. */
 	free(wire);
 	if (ret != KNOT_EOK) {
-		knot_rrset_deep_free(&tmp_tsig, 1, 1);
+		knot_rrset_deep_free(&tmp_tsig, 1);
 		*digest_len = 0;
 		return ret;
 	}
 
 	if (digest_tmp_len > *digest_len) {
-		knot_rrset_deep_free(&tmp_tsig, 1, 1);
+		knot_rrset_deep_free(&tmp_tsig, 1);
 		*digest_len = 0;
 		return KNOT_ESPACE;
 	}
@@ -642,18 +642,18 @@ int knot_tsig_sign_next(uint8_t *msg, size_t *msg_len, size_t msg_max_len,
 	                         &tsig_wire_size, msg_max_len - *msg_len,
 	                         &rr_count, NULL);
 	if (ret != KNOT_EOK) {
-		knot_rrset_deep_free(&tmp_tsig, 1, 1);
+		knot_rrset_deep_free(&tmp_tsig, 1);
 		*digest_len = 0;
 		return ret;
 	}
 
 	/* This should not happen, at least one rr has to be converted. */
 	if (rr_count == 0) {
-		knot_rrset_deep_free(&tmp_tsig, 1, 1);
+		knot_rrset_deep_free(&tmp_tsig, 1);
 		return KNOT_EINVAL;
 	}
 
-	knot_rrset_deep_free(&tmp_tsig, 1, 1);
+	knot_rrset_deep_free(&tmp_tsig, 1);
 
 	*msg_len += tsig_wire_size;
 	uint16_t arcount = knot_wire_get_arcount(msg);
@@ -875,12 +875,12 @@ int knot_tsig_add(uint8_t *msg, size_t *msg_len, size_t msg_max_len,
 	                         &rr_count, NULL);
 	if (ret != KNOT_EOK) {
 		dbg_tsig("TSIG: rrset_to_wire = %s\n", knot_strerror(ret));
-		knot_rrset_deep_free(&tmp_tsig, 1, 1);
+		knot_rrset_deep_free(&tmp_tsig, 1);
 		return ret;
 	}
 
 	/* key_name already referenced in RRSet, no need to free separately. */
-	knot_rrset_deep_free(&tmp_tsig, 1, 1);
+	knot_rrset_deep_free(&tmp_tsig, 1);
 
 	*msg_len += tsig_wire_len;
 
diff --git a/src/libknot/updates/changesets.c b/src/libknot/updates/changesets.c
index 9394cc5f7170de8bc0d30990e596067140402087..ede0320eda76c5f9f9266f922f18463c44abec83 100644
--- a/src/libknot/updates/changesets.c
+++ b/src/libknot/updates/changesets.c
@@ -195,7 +195,7 @@ int knot_changeset_add_rr(knot_changeset_t *chgs, knot_rrset_t *rr,
 			return KNOT_ERROR;
 		}
 
-		knot_rrset_deep_free(&rr, 1, 0);
+		knot_rrset_deep_free(&rr, 1);
 		return KNOT_EOK;
 	} else {
 		return knot_changeset_add_rrset(chgs, rr, part);
@@ -339,7 +339,7 @@ int knot_changeset_merge(knot_changeset_t *ch1, knot_changeset_t *ch2)
 
 	// Use soa_to and serial from the second changeset
 	// soa_to from the first changeset is redundant, delete it
-	knot_rrset_deep_free(&ch1->soa_to, 1, 1);
+	knot_rrset_deep_free(&ch1->soa_to, 1);
 	ch1->soa_to = ch2->soa_to;
 	ch1->serial_to = ch2->serial_to;
 
@@ -355,14 +355,14 @@ static void knot_free_changeset(knot_changeset_t *changeset)
 	// Delete RRSets in lists, in case there are any left
 	knot_rr_ln_t *rr_node;
 	WALK_LIST(rr_node, changeset->add) {
-		knot_rrset_deep_free(&rr_node->rr, 1, 1);
+		knot_rrset_deep_free(&rr_node->rr, 1);
 	}
 	WALK_LIST(rr_node, changeset->remove) {
-		knot_rrset_deep_free(&rr_node->rr, 1, 1);
+		knot_rrset_deep_free(&rr_node->rr, 1);
 	}
 
-	knot_rrset_deep_free(&changeset->soa_from, 1, 1);
-	knot_rrset_deep_free(&changeset->soa_to, 1, 1);
+	knot_rrset_deep_free(&changeset->soa_from, 1);
+	knot_rrset_deep_free(&changeset->soa_to, 1);
 
 	// Delete binary data
 	free(changeset->data);
@@ -386,7 +386,7 @@ void knot_changesets_free(knot_changesets_t **changesets)
 	// Free pool with RRs in sets / changes
 	mp_delete((*changesets)->mmc_rr.ctx);
 
-	knot_rrset_deep_free(&(*changesets)->first_soa, 1, 1);
+	knot_rrset_deep_free(&(*changesets)->first_soa, 1);
 
 	free((*changesets)->changes);
 	free(*changesets);
diff --git a/src/libknot/updates/ddns.c b/src/libknot/updates/ddns.c
index e4575851d7350b7400acd1dddba8b0248c9d9b81..5dfed0658c241f666dd63f5e31efd50642fa8045 100644
--- a/src/libknot/updates/ddns.c
+++ b/src/libknot/updates/ddns.c
@@ -538,17 +538,17 @@ void knot_ddns_prereqs_free(knot_ddns_prereq_t **prereq)
 	int i;
 
 	for (i = 0; i < (*prereq)->exist_count; ++i) {
-		knot_rrset_deep_free(&(*prereq)->exist[i], 1, 1);
+		knot_rrset_deep_free(&(*prereq)->exist[i], 1);
 	}
 	free((*prereq)->exist);
 
 	for (i = 0; i < (*prereq)->exist_full_count; ++i) {
-		knot_rrset_deep_free(&(*prereq)->exist_full[i], 1, 1);
+		knot_rrset_deep_free(&(*prereq)->exist_full[i], 1);
 	}
 	free((*prereq)->exist_full);
 
 	for (i = 0; i < (*prereq)->not_exist_count; ++i) {
-		knot_rrset_deep_free(&(*prereq)->not_exist[i], 1, 1);
+		knot_rrset_deep_free(&(*prereq)->not_exist[i], 1);
 	}
 	free((*prereq)->not_exist);
 
@@ -770,7 +770,7 @@ static int knot_ddns_process_add_cname(knot_node_t *node,
 
 		if (from_chgset_count == 1) {
 			/* Just delete the RRSet. */
-			knot_rrset_deep_free(&(from_chgset[0]), 1, 1);
+			knot_rrset_deep_free(&(from_chgset[0]), 1);
 			/* Okay, &(from_chgset[0]) is basically equal to just
 			 * from_chgset, but it's more clear this way that we are
 			 * deleting the first RRSet in the array ;-)
@@ -792,7 +792,7 @@ static int knot_ddns_process_add_cname(knot_node_t *node,
 				changeset, removed_copy, KNOT_CHANGESET_REMOVE);
 			if (ret != KNOT_EOK) {
 				knot_rrset_deep_free(&removed_copy,
-				                     1, 1);
+				                     1);
 				dbg_ddns("Failed to add removed CNAME "
 				         "to changeset: %s\n",
 				         knot_strerror(ret));
@@ -896,7 +896,7 @@ static int knot_ddns_add_rr_new_normal(knot_node_t *node, knot_rrset_t *rr_copy,
 
 	int ret = knot_changes_add_rrset(changes, rr_copy, KNOT_CHANGES_NEW);
 	if (ret != KNOT_EOK) {
-		knot_rrset_deep_free(&rr_copy, 1, 1);
+		knot_rrset_deep_free(&rr_copy, 1);
 		dbg_ddns("Failed to store copy of the added RR: "
 		         "%s\n", knot_strerror(ret));
 		return ret;
@@ -947,7 +947,7 @@ static int knot_ddns_add_rr_merge_normal(knot_rrset_t *node_rrset_copy,
 		return ret;
 	}
 
-	knot_rrset_deep_free(rr_copy, 1, 0);
+	knot_rrset_deep_free(rr_copy, 1);
 
 
 	if (rdata_in_copy == deleted_rrs) {
@@ -1022,8 +1022,8 @@ dbg_ddns_exec_detail(
 
 		if (ret < KNOT_EOK) {
 			dbg_ddns("Failed to merge UPDATE RR to node RRSet.\n");
-			knot_rrset_deep_free(rr_copy, 1, 1);
-			knot_rrset_deep_free(&node_rrset_copy, 1, 1);
+			knot_rrset_deep_free(rr_copy, 1);
+			knot_rrset_deep_free(&node_rrset_copy, 1);
 			return ret;
 		}
 
@@ -1033,7 +1033,7 @@ dbg_ddns_exec_detail(
 		                               KNOT_CHANGES_NEW);
 		if (r != KNOT_EOK) {
 			dbg_ddns("Failed to store RRSet copy to 'changes'\n");
-			knot_rrset_deep_free(&node_rrset_copy, 1, 1);
+			knot_rrset_deep_free(&node_rrset_copy, 1);
 			return r;
 		}
 	}
@@ -1085,13 +1085,13 @@ static int knot_ddns_add_rr_to_chgset(const knot_rrset_t *rr,
 		ret = knot_changeset_add_rrset(changeset, chgset_rr,
 		                               KNOT_CHANGESET_ADD);
 		if (ret != KNOT_EOK) {
-			knot_rrset_deep_free(&chgset_rr, 1, 1);
+			knot_rrset_deep_free(&chgset_rr, 1);
 			dbg_ddns("Failed to add RR to changeset: %s.\n",
 				 knot_strerror(ret));
 			return ret;
 		}
 	} else {
-		knot_rrset_deep_free(&chgset_rr, 1, 1);
+		knot_rrset_deep_free(&chgset_rr, 1);
 	}
 
 	return KNOT_EOK;
@@ -1304,7 +1304,7 @@ static int knot_ddns_process_rem_rr(const knot_rrset_t *rr,
 	 */
 	ret = knot_changes_add_rrset(changes, rr_remove, KNOT_CHANGES_OLD);
 	if (ret != KNOT_EOK) {
-		knot_rrset_deep_free(&rr_remove, 1, 1);
+		knot_rrset_deep_free(&rr_remove, 1);
 		dbg_ddns_detail("Failed to add data to changes.\n");
 		return ret;
 	}
@@ -1371,7 +1371,7 @@ static int knot_ddns_process_rem_rr(const knot_rrset_t *rr,
 
 	if (from_chgset_count == 1) {
 		/* Just delete the RRSet. */
-		knot_rrset_deep_free(&(from_chgset[0]), 1, 1);
+		knot_rrset_deep_free(&(from_chgset[0]), 1);
 
 		/* Finish processing, no adding to changeset. */
 		free(from_chgset);
@@ -1399,7 +1399,7 @@ static int knot_ddns_process_rem_rr(const knot_rrset_t *rr,
 	if (ret != KNOT_EOK) {
 		dbg_ddns("Failed to store the RRSet copy to changeset: %s.\n",
 		         knot_strerror(ret));
-		knot_rrset_deep_free(&to_chgset, 1, 1);
+		knot_rrset_deep_free(&to_chgset, 1);
 		return ret;
 	}
 
@@ -1521,7 +1521,7 @@ static int knot_ddns_process_rem_rrset(const knot_rrset_t *rrset,
 			dbg_ddns("Failed to copy the removed RRSet: %s.\n",
 			         knot_strerror(ret));
 			for (int j = 0; j < i; ++j) {
-				knot_rrset_deep_free(&to_chgset[j], 1, 1);
+				knot_rrset_deep_free(&to_chgset[j], 1);
 			}
 			free(to_chgset);
 			free(removed);
@@ -1554,7 +1554,7 @@ static int knot_ddns_process_rem_rrset(const knot_rrset_t *rrset,
 		dbg_ddns("Failed to remove possible redundant RRs from ADD "
 		         "section: %s.\n", knot_strerror(ret));
 		for (int i = 0; i < removed_count; ++i) {
-			knot_rrset_deep_free(&to_chgset[i], 1, 1);
+			knot_rrset_deep_free(&to_chgset[i], 1);
 		}
 		free(from_chgset);
 		free(to_chgset);
@@ -1586,7 +1586,7 @@ static int knot_ddns_process_rem_rrset(const knot_rrset_t *rrset,
 
 	/* The array is cleared, we may delete the redundant RRs. */
 	for (int i = 0; i < from_chgset_count; ++i) {
-		knot_rrset_deep_free(&from_chgset[i], 1, 1);
+		knot_rrset_deep_free(&from_chgset[i], 1);
 	}
 	free(from_chgset);
 
@@ -1600,7 +1600,7 @@ static int knot_ddns_process_rem_rrset(const knot_rrset_t *rrset,
 			dbg_ddns("Failed to store the RRSet copy to changeset: "
 			         "%s.\n", knot_strerror(ret));
 			for (int j = i; j < removed_count; ++j) {
-				knot_rrset_deep_free(&to_chgset[j], 1, 1);
+				knot_rrset_deep_free(&to_chgset[j], 1);
 			}
 			free(to_chgset);
 			return ret;
diff --git a/src/libknot/updates/xfr-in.c b/src/libknot/updates/xfr-in.c
index 9dc7a984c4e15368d0515db860f79a166189335b..86823d528b4bcacd33e7e3fc4312eb7a328aa5e1 100644
--- a/src/libknot/updates/xfr-in.c
+++ b/src/libknot/updates/xfr-in.c
@@ -262,7 +262,7 @@ static int xfrin_process_orphan_rrsigs(knot_zone_contents_t *zone,
 						    &rrset, &node,
 						    KNOT_RRSET_DUPL_MERGE);
 		if (ret > 0) {
-			knot_rrset_deep_free(&(*last)->rrsig, 1, 0);
+			knot_rrset_deep_free(&(*last)->rrsig, 1);
 		} else if (ret == KNOT_ENONODE) {
 			// Nothing to cover - print warning
 			char *name = knot_dname_to_str((*last)->rrsig->owner);
@@ -277,7 +277,7 @@ static int xfrin_process_orphan_rrsigs(knot_zone_contents_t *zone,
 			free(name);
 
 			// discard RRSIG
-			knot_rrset_deep_free(&(*last)->rrsig, 1, 1);
+			knot_rrset_deep_free(&(*last)->rrsig, 1);
 		} else if (ret != KNOT_EOK) {
 			dbg_xfrin("Failed to add orphan RRSIG to zone.\n");
 			return ret;
@@ -321,7 +321,7 @@ void xfrin_free_orphan_rrsigs(xfrin_orphan_rrsig_t **rrsigs)
 		xfrin_orphan_rrsig_t *prev = r;
 		r = r->next;
 		if (prev->rrsig != NULL) {
-			knot_rrset_deep_free(&prev->rrsig, 1, 1);
+			knot_rrset_deep_free(&prev->rrsig, 1);
 		}
 		free(prev);
 	}
@@ -396,7 +396,7 @@ static int xfrin_check_tsig(knot_packet_t *packet, knot_ns_xfr_t *xfr,
 			if (ret != KNOT_EOK) {
 				/* No need to check TSIG error
 				 * here, propagate and check elsewhere.*/
-				knot_rrset_deep_free(&tsig, 1, 1);
+				knot_rrset_deep_free(&tsig, 1);
 				return ret;
 			}
 
@@ -406,7 +406,7 @@ static int xfrin_check_tsig(knot_packet_t *packet, knot_ns_xfr_t *xfr,
 
 			// Extract the digest from the TSIG RDATA and store it.
 			if (xfr->digest_max_size < tsig_rdata_mac_length(tsig)) {
-				knot_rrset_deep_free(&tsig, 1, 1);
+				knot_rrset_deep_free(&tsig, 1);
 				return KNOT_ESPACE;
 			}
 			memcpy(xfr->digest, tsig_rdata_mac(tsig),
@@ -422,11 +422,11 @@ static int xfrin_check_tsig(knot_packet_t *packet, knot_ns_xfr_t *xfr,
 		}
 	} else if (tsig != NULL) {
 		// TSIG where it should not be
-		knot_rrset_deep_free(&tsig, 1, 1);
+		knot_rrset_deep_free(&tsig, 1);
 		return KNOT_EMALF;
 	}
 
-	knot_rrset_deep_free(&tsig, 1, 1);
+	knot_rrset_deep_free(&tsig, 1);
 
 	return KNOT_EOK;
 }
@@ -511,7 +511,7 @@ int xfrin_process_axfr_packet(knot_ns_xfr_t *xfr)
 				  "Answer is not a SOA RR.\n");
 			knot_packet_free(&packet);
 			knot_node_free(&node);
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 			/*! \todo Cleanup. */
 			return KNOT_EMALF;
 		}
@@ -522,7 +522,7 @@ int xfrin_process_axfr_packet(knot_ns_xfr_t *xfr)
 			dbg_xfrin("Invalid packet in sequence, ignoring.\n");
 			knot_packet_free(&packet);
 			knot_node_free(&node);
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 			return KNOT_EOK;
 		}
 
@@ -543,7 +543,7 @@ dbg_xfrin_exec(
 			/*! \todo Cleanup. */
 			knot_packet_free(&packet);
 			knot_node_free(&node);
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 			return KNOT_EMALF;
 		}
 
@@ -551,7 +551,7 @@ dbg_xfrin_exec(
 		if (node == NULL) {
 			dbg_xfrin("Failed to create new node.\n");
 			knot_packet_free(&packet);
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 			return KNOT_ENOMEM;
 		}
 
@@ -564,7 +564,7 @@ dbg_xfrin_exec(
 			dbg_xfrin("Failed to create new constr. zone.\n");
 			knot_packet_free(&packet);
 			knot_node_free(&node);
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 			return KNOT_ENOMEM;
 		}
 
@@ -576,7 +576,7 @@ dbg_xfrin_exec(
 			dbg_xfrin("Failed to create new zone.\n");
 			knot_packet_free(&packet);
 			knot_node_free(&node);
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 			/*! \todo Cleanup. */
 			return KNOT_ENOMEM;
 		}
@@ -592,13 +592,13 @@ dbg_xfrin_exec(
 				  knot_strerror(ret));
 			knot_packet_free(&packet);
 			knot_node_free(&node);
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 			/*! \todo Cleanup. */
 			return KNOT_ERROR;
 		} else if (ret > 0) {
 			dbg_xfrin("Merged SOA RRSet.\n");
 			// merged, free the RRSet
-			knot_rrset_deep_free(&rr, 1, 0);
+			knot_rrset_deep_free(&rr, 1);
 		}
 
 		// take next RR
@@ -617,7 +617,7 @@ dbg_xfrin_exec(
 			// Out-of-zone data
 			xfrin_log_error(xfr->zone->name, rr->owner,
 			                KNOT_EOUTOFZONE);
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 			ret = knot_packet_parse_next_rr_answer(packet, &rr);
 			continue;
 		}
@@ -661,7 +661,7 @@ dbg_xfrin_exec_detail(
 			dbg_xfrin_verb("xfrin_check_tsig() returned %d\n", ret);
 
 			knot_packet_free(&packet);
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 
 			if (ret != KNOT_EOK) {
 				/*! \todo [TSIG] Handle TSIG errors. */
@@ -700,19 +700,19 @@ dbg_xfrin_exec_detail(
 
 				if (ret > 0) {
 					dbg_xfrin_detail("Merged RRSIGs.\n");
-					knot_rrset_deep_free(&rr, 1, 0);
+					knot_rrset_deep_free(&rr, 1);
 				} else if (ret != KNOT_EOK) {
 					dbg_xfrin("Failed to save orphan"
 						  " RRSIGs.\n");
 					knot_packet_free(&packet);
-					knot_rrset_deep_free(&rr, 1, 1);
+					knot_rrset_deep_free(&rr, 1);
 					return ret;
 				}
 			} else if (ret < 0) {
 				dbg_xfrin("Failed to add RRSIGs (%s).\n",
 					       knot_strerror(ret));
 				knot_packet_free(&packet);
-				knot_rrset_deep_free(&rr, 1, 1);
+				knot_rrset_deep_free(&rr, 1);
 				return KNOT_ERROR;  /*! \todo Other error code. */
 			} else if (ret == 1) {
 				assert(node != NULL);
@@ -723,7 +723,7 @@ dbg_xfrin_exec_verb(
 				free(name);
 );
 				in_zone = 1;
-				knot_rrset_deep_free(&rr, 1, 0);
+				knot_rrset_deep_free(&rr, 1);
 			} else if (ret == 2) {
 				// should not happen
 				assert(0);
@@ -751,7 +751,7 @@ dbg_xfrin_exec_verb(
 			dbg_xfrin("TSIG in Answer section.\n");
 			knot_packet_free(&packet);
 			knot_node_free(&node); // ???
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 			return KNOT_EMALF;
 		}
 
@@ -782,7 +782,7 @@ dbg_xfrin_exec_verb(
 			if (node == NULL) {
 				dbg_xfrin("Failed to create new node.\n");
 				knot_packet_free(&packet);
-				knot_rrset_deep_free(&rr, 1, 1);
+				knot_rrset_deep_free(&rr, 1);
 				return KNOT_ENOMEM;
 			}
 			dbg_xfrin_detail("Created new node for the record.\n");
@@ -794,7 +794,7 @@ dbg_xfrin_exec_verb(
 					  knot_strerror(ret));
 				knot_packet_free(&packet);
 				knot_node_free(&node); // ???
-				knot_rrset_deep_free(&rr, 1, 1);
+				knot_rrset_deep_free(&rr, 1);
 				return KNOT_ERROR;
 			} else if (ret > 0) {
 				// should not happen, this is new node
@@ -807,7 +807,7 @@ dbg_xfrin_exec_verb(
 			if (ret != KNOT_EOK) {
 				// Fatal error, free packet
 				knot_packet_free(&packet);
-				knot_rrset_deep_free(&rr, 1, 1);
+				knot_rrset_deep_free(&rr, 1);
 				knot_node_free(&node);
 				return ret;
 			}
@@ -825,7 +825,7 @@ dbg_xfrin_exec_verb(
 				return KNOT_ERROR;
 			} else if (ret > 0) {
 				// merged, free the RRSet
-				knot_rrset_deep_free(&rr, 1, 0);
+				knot_rrset_deep_free(&rr, 1);
 			}
 
 		}
@@ -847,7 +847,7 @@ dbg_xfrin_exec_verb(
 			knot_node_free(&node);
 		}
 
-		knot_rrset_deep_free(&rr, 1, 1);
+		knot_rrset_deep_free(&rr, 1);
 		return KNOT_EMALF;
 	}
 
@@ -863,7 +863,7 @@ dbg_xfrin_exec_verb(
 				  knot_strerror(ret));
 				knot_packet_free(&packet);
 				knot_node_free(&node);
-				knot_rrset_deep_free(&rr, 1, 1);
+				knot_rrset_deep_free(&rr, 1);
 				return ret;
 		}
 	}
@@ -972,7 +972,7 @@ int xfrin_process_ixfr_packet(knot_ns_xfr_t *xfr)
 
 		ret = knot_changesets_init(chs, KNOT_CHANGESET_TYPE_IXFR);
 		if (ret != KNOT_EOK) {
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 			knot_packet_free(&packet);
 			return ret;
 		}
@@ -980,7 +980,7 @@ int xfrin_process_ixfr_packet(knot_ns_xfr_t *xfr)
 		// the first RR must be a SOA
 		if (knot_rrset_type(rr) != KNOT_RRTYPE_SOA) {
 			dbg_xfrin("First RR is not a SOA RR!\n");
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 			ret = KNOT_EMALF;
 			goto cleanup;
 		}
@@ -1019,7 +1019,7 @@ int xfrin_process_ixfr_packet(knot_ns_xfr_t *xfr)
 			knot_packet_free(&packet);
 			return XFRIN_RES_SOA_ONLY;
 		} else if (knot_rrset_type(rr) != KNOT_RRTYPE_SOA) {
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 			knot_packet_free(&packet);
 			dbg_xfrin("Fallback to AXFR.\n");
 			ret = XFRIN_RES_FALLBACK;
@@ -1028,7 +1028,7 @@ int xfrin_process_ixfr_packet(knot_ns_xfr_t *xfr)
 	} else {
 		if ((*chs)->first_soa == NULL) {
 			dbg_xfrin("Changesets don't contain SOA first!\n");
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 			ret = KNOT_EINVAL;
 			goto cleanup;
 		}
@@ -1076,7 +1076,7 @@ int xfrin_process_ixfr_packet(knot_ns_xfr_t *xfr)
 		dbg_xfrin_detail("State is not -1, deciding...\n");
 		// there should be at least one started changeset right now
 		if (EMPTY_LIST((*chs)->sets)) {
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 			ret = KNOT_EMALF;
 			goto cleanup;
 		}
@@ -1108,7 +1108,7 @@ dbg_xfrin_exec_verb(
 			// out-of-zone domain
 			xfrin_log_error(xfr->zone->name, rr->owner,
 			                KNOT_EOUTOFZONE);
-			knot_rrset_deep_free(&rr, 1, 1);
+			knot_rrset_deep_free(&rr, 1);
 			// Skip this rr
 			ret = knot_packet_parse_next_rr_answer(packet, &rr);
 			continue;
@@ -1125,7 +1125,7 @@ dbg_xfrin_exec_verb(
 				dbg_xfrin_verb("RR type: %u\n",
 					       knot_rrset_type(rr));
 				ret = KNOT_EMALF;
-				knot_rrset_deep_free(&rr, 1, 1);
+				knot_rrset_deep_free(&rr, 1);
 				goto cleanup;
 			}
 
@@ -1138,7 +1138,7 @@ dbg_xfrin_exec_verb(
 				ret = xfrin_check_tsig(packet, xfr, 1);
 
 				// last SOA, discard and end
-				knot_rrset_deep_free(&rr, 1, 1);
+				knot_rrset_deep_free(&rr, 1);
 				knot_packet_free(&packet);
 
 				/*! \note [TSIG] If TSIG validates, consider
@@ -1155,13 +1155,13 @@ dbg_xfrin_exec_verb(
 					ret = KNOT_ESPACE;
 
 				if (ret != KNOT_EOK) {
-					knot_rrset_deep_free(&rr, 1, 1);
+					knot_rrset_deep_free(&rr, 1);
 					goto cleanup;
 				}
 
 				cur = knot_changesets_create_changeset(*chs);
 				if (cur == NULL) {
-					knot_rrset_deep_free(&rr, 1, 1);
+					knot_rrset_deep_free(&rr, 1);
 					goto cleanup;
 				}
 				knot_changeset_add_soa(cur, rr, KNOT_CHANGESET_REMOVE);
@@ -1186,7 +1186,7 @@ dbg_xfrin_exec_verb(
 				ret = knot_changeset_add_rr(cur, rr,
 				                            KNOT_CHANGESET_REMOVE);
 				if (ret != KNOT_EOK) {
-					knot_rrset_deep_free(&rr, 1, 1);
+					knot_rrset_deep_free(&rr, 1);
 					goto cleanup;
 				}
 			}
@@ -1207,7 +1207,7 @@ dbg_xfrin_exec_verb(
 				ret = knot_changeset_add_rr(cur, rr,
 				                            KNOT_CHANGESET_ADD);
 				if (ret != KNOT_EOK) {
-					knot_rrset_deep_free(&rr, 1, 1);
+					knot_rrset_deep_free(&rr, 1);
 					goto cleanup;
 				}
 			}
@@ -1286,7 +1286,7 @@ int xfrin_copy_old_rrset(knot_rrset_t *old, knot_rrset_t **copy,
 	if (save_new) {
 		ret = knot_changes_add_rrset(changes, *copy, KNOT_CHANGES_NEW);
 		if (ret != KNOT_EOK) {
-			knot_rrset_deep_free(copy, 1, 1);
+			knot_rrset_deep_free(copy, 1);
 			return ret;
 		}
 		if ((*copy)->rrsigs != NULL) {
@@ -1294,7 +1294,7 @@ int xfrin_copy_old_rrset(knot_rrset_t *old, knot_rrset_t **copy,
 			ret = knot_changes_add_rrset(changes, (*copy)->rrsigs,
 			      KNOT_CHANGES_NEW);
 			if (ret != KNOT_EOK) {
-				knot_rrset_deep_free(&((*copy)->rrsigs), 1, 1);
+				knot_rrset_deep_free(&((*copy)->rrsigs), 1);
 				return ret;
 			}
 		}
@@ -1453,7 +1453,7 @@ static int xfrin_apply_remove_rrsigs(knot_changes_t *changes,
 	// connect the RDATA to the list of old RDATA
 	ret = knot_changes_add_rrset(changes, rr_removed, KNOT_CHANGES_OLD);
 	if (ret != KNOT_EOK) {
-		knot_rrset_deep_free(&rr_removed, 1, 1);
+		knot_rrset_deep_free(&rr_removed, 1);
 		return ret;
 	}
 
@@ -2194,7 +2194,7 @@ void xfrin_cleanup_successful_update(knot_changes_t *changes)
 	knot_rr_ln_t *rr_node = NULL;
 	WALK_LIST(rr_node, changes->old_rrsets) {
 		knot_rrset_t *rrset = rr_node->rr;
-		knot_rrset_deep_free_no_sig(&rrset, 1, 1);
+		knot_rrset_deep_free_no_sig(&rrset, 1);
 	}
 
 	// Free old nodes
@@ -2308,7 +2308,7 @@ void xfrin_rollback_update(knot_zone_contents_t *old_contents,
 	knot_rr_ln_t *rr_node = NULL;
 	WALK_LIST(rr_node, changes->new_rrsets) {
 		knot_rrset_t *rrset = rr_node->rr;
-		knot_rrset_deep_free_no_sig(&rrset, 1, 1);
+		knot_rrset_deep_free_no_sig(&rrset, 1);
 	}
 
 	xfrin_cleanup_failed_update(old_contents, new_contents);
@@ -2521,7 +2521,7 @@ dbg_xfrin_exec_detail(
 				// already stored in the new RRSets list
 				// just delete the add RRSet, but without RDATA
 				// DNAMES as these were merged to the copied RRSet
-				knot_rrset_deep_free(&rr, 1, 0);
+				knot_rrset_deep_free(&rr, 1);
 				rem_node((node_t *)rr_node);
 			} else if (ret == 3) {
 				// the RRSet was used and both RRSet and RDATA
diff --git a/src/libknot/zone/node.c b/src/libknot/zone/node.c
index 9affaff50667b3893b7490204f92d23939551eef..3c81906108b77523f2622a0ce7f0df64acacc990 100644
--- a/src/libknot/zone/node.c
+++ b/src/libknot/zone/node.c
@@ -642,7 +642,7 @@ void knot_node_free_rrsets(knot_node_t *node, int free_rdata_dnames)
 
 	knot_rrset_t **rrs = node->rrset_tree;
 	for (uint16_t i = 0; i < node->rrset_count; ++i) {
-		knot_rrset_deep_free(&(rrs[i]), 1, free_rdata_dnames);
+		knot_rrset_deep_free(&(rrs[i]), 1);
 	}
 }
 
diff --git a/src/libknot/zone/zone-diff.c b/src/libknot/zone/zone-diff.c
index f2e0234c3e1307e49b2f173da55bd8588129114a..860d9e26f2cc92ef34fcccf6a63d2180f9a6d326 100644
--- a/src/libknot/zone/zone-diff.c
+++ b/src/libknot/zone/zone-diff.c
@@ -165,7 +165,7 @@ static int knot_zone_diff_changeset_add_rrset(knot_changeset_t *changeset,
 	                               KNOT_CHANGESET_ADD);
 	if (ret != KNOT_EOK) {
 		/* We have to free the copy now! */
-		knot_rrset_deep_free(&rrset_copy, 1, 1);
+		knot_rrset_deep_free(&rrset_copy, 1);
 		dbg_zonediff("zone_diff: add_rrset: Could not add RRSet. "
 		             "Reason: %s.\n", knot_strerror(ret));
 		return ret;
@@ -209,7 +209,7 @@ static int knot_zone_diff_changeset_remove_rrset(knot_changeset_t *changeset,
 	                               KNOT_CHANGESET_REMOVE);
 	if (ret != KNOT_EOK) {
 		/* We have to free the copy now. */
-		knot_rrset_deep_free(&rrset_copy, 1, 1);
+		knot_rrset_deep_free(&rrset_copy, 1);
 		dbg_zonediff("zone_diff: remove_rrset: Could not remove RRSet. "
 		             "Reason: %s.\n", knot_strerror(ret));
 		return ret;
@@ -458,14 +458,14 @@ static int knot_zone_diff_rdata(const knot_rrset_t *rrset1,
 	int ret = knot_zone_diff_changeset_remove_rrset(changeset,
 	                                            to_remove);
 	if (ret != KNOT_EOK) {
-		knot_rrset_deep_free(&to_remove, 1, 1);
+		knot_rrset_deep_free(&to_remove, 1);
 		dbg_zonediff("zone_diff: diff_rdata: Could not remove RRs. "
 		             "Error: %s.\n", knot_strerror(ret));
 		return ret;
 	}
 
 	/* Copy was made in add_rrset function, we can free now. */
-	knot_rrset_deep_free(&to_remove, 1, 1);
+	knot_rrset_deep_free(&to_remove, 1);
 
 	/* Get RRs to add to zone. */ // TODO move to extra function, same for remove
 	knot_rrset_t *to_add = NULL;
@@ -523,14 +523,14 @@ static int knot_zone_diff_rdata(const knot_rrset_t *rrset1,
 	ret = knot_zone_diff_changeset_add_rrset(changeset,
 	                                         to_add);
 	if (ret != KNOT_EOK) {
-		knot_rrset_deep_free(&to_add, 1, 1);
+		knot_rrset_deep_free(&to_add, 1);
 		dbg_zonediff("zone_diff: diff_rdata: Could not remove RRs. "
 		             "Error: %s.\n", knot_strerror(ret));
 		return ret;
 	}
 
 	/* Copy was made in add_rrset function, we can free now. */
-	knot_rrset_deep_free(&to_add, 1, 1);
+	knot_rrset_deep_free(&to_add, 1);
 
 	return KNOT_EOK;
 }
diff --git a/src/utils/dig/dig_exec.c b/src/utils/dig/dig_exec.c
index 2d5aacc4f0b592b2f3c4eafbc5228beb4e1e9129..617014f72dd2b3e051ca441ee167fcdc06a2a954 100644
--- a/src/utils/dig/dig_exec.c
+++ b/src/utils/dig/dig_exec.c
@@ -117,7 +117,7 @@ static knot_packet_t* create_query_packet(const query_t *query,
 		ret = knot_rrset_rdata_from_wire_one(soa, wire, &pos,
 		                                    sizeof(wire), sizeof(wire));
 		if (ret != KNOT_EOK) {
-			knot_rrset_deep_free(&soa, 1, 1);
+			knot_rrset_deep_free(&soa, 1);
 			knot_packet_free(&packet);
 			return NULL;
 		}
@@ -128,7 +128,7 @@ static knot_packet_t* create_query_packet(const query_t *query,
 		// Add authority section.
 		ret = knot_query_add_rrset_authority(packet, soa);
 		if (ret != KNOT_EOK) {
-			knot_rrset_deep_free(&soa, 1, 1);
+			knot_rrset_deep_free(&soa, 1);
 			knot_packet_free(&packet);
 			return NULL;
 		}