diff --git a/lib/layer/rrcache.c b/lib/layer/rrcache.c
index fa90b688b7836b6ee79cb8caaaa5e48bb2ae6dc1..d5a5d2bd4e6a3a7f3319e3dae89b6c1907bac375 100644
--- a/lib/layer/rrcache.c
+++ b/lib/layer/rrcache.c
@@ -271,7 +271,6 @@ struct rrcache_baton
 	struct kr_query *qry;
 	struct kr_cache *cache;
 	unsigned timestamp;
-	uint32_t min_ttl;
 };
 
 static int commit_rrsig(struct rrcache_baton *baton, uint8_t rank, uint8_t flags, knot_rrset_t *rr)
@@ -288,14 +287,6 @@ static int commit_rr(const char *key, void *val, void *data)
 {
 	knot_rrset_t *rr = val;
 	struct rrcache_baton *baton = data;
-	/* Ensure minimum TTL */
-	knot_rdata_t *rd = rr->rrs.data;
-	for (uint16_t i = 0; i < rr->rrs.rr_count; ++i) {
-		if (knot_rdata_ttl(rd) < baton->min_ttl) {
-			knot_rdata_set_ttl(rd, baton->min_ttl);
-		}
-		rd = kr_rdataset_next(rd);
-	}
 
 	/* Save RRSIG in a special cache. */
 	uint8_t rank = KEY_FLAG_RANK(key);
@@ -343,7 +334,6 @@ static int stash_commit(map_t *stash, struct kr_query *qry, struct kr_cache *cac
 		.qry = qry,
 		.cache = cache,
 		.timestamp = qry->timestamp.tv_sec,
-		.min_ttl = MAX(DEFAULT_MINTTL, cache->ttl_min),
 	};
 	return map_walk(stash, &commit_rr, &baton);
 }
@@ -370,6 +360,8 @@ static int stash_selected(struct kr_request *req, knot_pkt_t *pkt, map_t *stash,
 	if (!arr->len) {
 		return kr_ok();
 	}
+
+	uint32_t min_ttl = MAX(DEFAULT_MINTTL, req->ctx->cache.ttl_min);
 	/* uncached entries are located at the end */
 	for (ssize_t i = arr->len - 1; i >= 0; --i) {
 		ranked_rr_array_entry_t *entry = arr->at[i];
@@ -379,7 +371,17 @@ static int stash_selected(struct kr_request *req, knot_pkt_t *pkt, map_t *stash,
 		if (entry->cached) {
 			continue;
 		}
-		const knot_rrset_t *rr = entry->rr;
+		knot_rrset_t *rr = entry->rr;
+		
+		/* Ensure minimum TTL */
+		knot_rdata_t *rd = rr->rrs.data;
+		for (uint16_t i = 0; i < rr->rrs.rr_count; ++i) {
+			if (knot_rdata_ttl(rd) < min_ttl) {
+				knot_rdata_set_ttl(rd, min_ttl);
+			}
+			rd = kr_rdataset_next(rd);
+		}
+
 		/* Skip NSEC3 RRs and their signatures.  We don't use them this way.
 		 * They would be stored under the hashed name, etc. */
 		if (kr_rrset_type_maysig(rr) == KNOT_RRTYPE_NSEC3) {