diff --git a/src/libknot/updates/xfr-in.c b/src/libknot/updates/xfr-in.c
index b1f2f2f03e84fefba7b14dd319fd9a45c7c9708d..be631f7af81150a8ae2b387442d2512a18b083ac 100644
--- a/src/libknot/updates/xfr-in.c
+++ b/src/libknot/updates/xfr-in.c
@@ -1467,9 +1467,10 @@ static int xfrin_copy_old_rrset(knot_rrset_t *old, knot_rrset_t **copy,
 	}
 
 	// add the RRSet to the list of new RRSets
+	// create place also for RRSIGs
 	ret = xfrin_changes_check_rrsets(&changes->new_rrsets,
 	                                 &changes->new_rrsets_count,
-	                                 &changes->new_rrsets_allocated, 1);
+	                                 &changes->new_rrsets_allocated, 2);
 	if (ret != KNOT_EOK) {
 		dbg_xfrin("Failed to add new RRSet to list.\n");
 		knot_rrset_deep_free(copy, 1, 1, 1);
@@ -1480,7 +1481,7 @@ static int xfrin_copy_old_rrset(knot_rrset_t *old, knot_rrset_t **copy,
 	ret = xfrin_changes_check_rdata(&changes->new_rdata,
 	                                &changes->new_rdata_types,
 	                                changes->new_rdata_count,
-	                                &changes->new_rdata_allocated, 1);
+	                                &changes->new_rdata_allocated, 2);
 	if (ret != KNOT_EOK) {
 		dbg_xfrin("Failed to add new RRSet to list.\n");
 		knot_rrset_deep_free(copy, 1, 1, 1);
@@ -1494,10 +1495,21 @@ static int xfrin_copy_old_rrset(knot_rrset_t *old, knot_rrset_t **copy,
 	                knot_rrset_type(*copy);
 	++changes->new_rdata_count;
 
+	if ((*copy)->rrsigs != NULL) {
+		assert(old->rrsigs != NULL);
+		changes->new_rrsets[changes->new_rrsets_count++] =
+		                (*copy)->rrsigs;
+		changes->new_rdata[changes->new_rdata_count] =
+		                knot_rrset_get_rdata((*copy)->rrsigs);
+		changes->new_rdata_types[changes->new_rdata_count] =
+		                KNOT_RRTYPE_RRSIG;
+		++changes->new_rdata_count;
+	}
+
 	// add the old RRSet to the list of old RRSets
 	ret = xfrin_changes_check_rrsets(&changes->old_rrsets,
 	                                 &changes->old_rrsets_count,
-	                                 &changes->old_rrsets_allocated, 1);
+	                                 &changes->old_rrsets_allocated, 2);
 	if (ret != KNOT_EOK) {
 		dbg_xfrin("Failed to add old RRSet to list.\n");
 		return ret;
@@ -1507,7 +1519,7 @@ static int xfrin_copy_old_rrset(knot_rrset_t *old, knot_rrset_t **copy,
 	ret = xfrin_changes_check_rdata(&changes->old_rdata,
 	                                &changes->old_rdata_types,
 	                                changes->old_rdata_count,
-	                                &changes->old_rdata_allocated, 1);
+	                                &changes->old_rdata_allocated, 2);
 	if (ret != KNOT_EOK) {
 		dbg_xfrin("Failed to add old RRSet to list.\n");
 		return ret;
@@ -1519,6 +1531,16 @@ static int xfrin_copy_old_rrset(knot_rrset_t *old, knot_rrset_t **copy,
 	                knot_rrset_type(old);
 	++changes->old_rdata_count;
 
+	if ((*copy)->rrsigs != NULL) {
+		assert(old->rrsigs != NULL);
+		changes->old_rrsets[changes->old_rrsets_count++] = old->rrsigs;
+		changes->old_rdata[changes->old_rdata_count] =
+		                old->rrsigs->rdata;
+		changes->old_rdata_types[changes->old_rdata_count] =
+		                KNOT_RRTYPE_RRSIG;
+		++changes->old_rdata_count;
+	}
+
 	return KNOT_EOK;
 }
 
@@ -2040,6 +2062,8 @@ dbg_xfrin_exec(
 	free(name);
 );
 
+	int copied = 0;
+
 	if (!*rrset
 	    || knot_dname_compare(knot_rrset_owner(*rrset),
 	                          knot_node_owner(node)) != 0
@@ -2052,6 +2076,7 @@ dbg_xfrin_exec(
 		} else if (ret != KNOT_EOK) {
 			*rrset = NULL;
 		}
+		copied = 1;
 	} else {
 		// we should have the right RRSIG RRSet in *rrset
 		assert(knot_rrset_type(*rrset) == type);
@@ -2124,9 +2149,13 @@ dbg_xfrin_exec(
 		assert(old != NULL);
 		knot_rrset_t *rrsig;
 		
-		ret = xfrin_copy_old_rrset(old, &rrsig, changes);
-		if (ret != KNOT_EOK) {
-			return ret;
+		if (!copied) {
+			ret = xfrin_copy_old_rrset(old, &rrsig, changes);
+			if (ret != KNOT_EOK) {
+				return ret;
+			}
+		} else {
+			rrsig = old;
 		}
 		
 		// replace the old RRSIGs with the new ones