diff --git a/modules/cookies/cookies.c b/modules/cookies/cookies.c
index 302565debbc5eac5b7753c4fe1b7f490f8e13d45..3c972db42859dd1671f4f74c2218d74491d0f91a 100644
--- a/modules/cookies/cookies.c
+++ b/modules/cookies/cookies.c
@@ -348,7 +348,14 @@ static int check_response(knot_layer_t *ctx, knot_pkt_t *pkt)
 			DEBUG_MSG(NULL, "%s\n", "cookie_cached");
 			kr_cache_txn_commit(&txn);
 		}
+	}
 
+	uint16_t rcode = knot_pkt_get_ext_rcode(pkt);
+	if (rcode == KNOT_RCODE_BADCOOKIE) {
+		/* TODO -- Fall back to TCP after a limited number of retries. */
+		DEBUG_MSG(NULL, "%s'n", "falling back to TCP");
+		qry->flags |= QUERY_TCP;
+		return KNOT_STATE_PRODUCE;
 	}
 
 	print_packet_dflt(pkt);