--- unbound-1.3.3/util/data/msgencode.c.orig	2009-03-25 23:47:47.000000000 +0900
+++ unbound-1.3.3/util/data/msgencode.c	2009-08-19 21:45:07.000000000 +0900
@@ -459,27 +459,29 @@
 
 	if(do_data) {
 		const ldns_rr_descriptor* c = type_rdata_compressable(key);
+		size_t offset = data->count > 1 ? random()%data->count : 0;
 		for(i=0; i<data->count; i++) {
+			size_t j = data->count > 1 ? (i+offset)%data->count : i;
 			if((r=compress_owner(key, pkt, region, tree, 
 				owner_pos, &owner_ptr, owner_labs))
 				!= RETVAL_OK)
 				return r;
 			ldns_buffer_write(pkt, &key->rk.type, 2);
 			ldns_buffer_write(pkt, &key->rk.rrset_class, 2);
-			if(data->rr_ttl[i] < timenow)
+			if(data->rr_ttl[j] < timenow)
 				ldns_buffer_write_u32(pkt, 0);
 			else 	ldns_buffer_write_u32(pkt, 
-					data->rr_ttl[i]-timenow);
+					data->rr_ttl[j]-timenow);
 			if(c) {
-				if((r=compress_rdata(pkt, data->rr_data[i],
-					data->rr_len[i], region, tree, c))
+				if((r=compress_rdata(pkt, data->rr_data[j],
+					data->rr_len[j], region, tree, c))
 					!= RETVAL_OK)
 					return r;
 			} else {
-				if(ldns_buffer_remaining(pkt) < data->rr_len[i])
+				if(ldns_buffer_remaining(pkt) < data->rr_len[j])
 					return RETVAL_TRUNC;
-				ldns_buffer_write(pkt, data->rr_data[i], 
-					data->rr_len[i]);
+				ldns_buffer_write(pkt, data->rr_data[j], 
+					data->rr_len[j]);
 			}
 		}
 	}
