--- dns_transmit.c.orig	2001-02-11 22:11:45.000000000 +0100
+++ dns_transmit.c	2007-02-16 14:11:37.000000000 +0100
@@ -217,8 +217,25 @@
 
   d->udploop = flagrecursive ? 1 : 0;
 
-  if (len + 16 > 512) return firsttcp(d);
-  return firstudp(d);
+#ifndef SOA_DONT_USE_TCP
+
+  if(memcmp(qtype, DNS_T_SOA, 2) == 0)
+  {
+      return firsttcp(d);
+  }
+  else
+  {
+  
+#endif // SOA_DONT_USE_TCP
+
+      if (len + 16 > 512) return firsttcp(d);
+      return firstudp(d);
+      
+#ifndef SOA_DONT_USE_TCP
+
+  }
+#endif // SOA_DONT_USE_TCP
+
 }
 
 void dns_transmit_io(struct dns_transmit *d,iopause_fd *x,struct taia *deadline)
