diff --git a/twisted/names/client.py b/twisted/names/client.py
index 27e4828..24e57f5 100644
--- a/twisted/names/client.py
+++ b/twisted/names/client.py
@@ -536,10 +536,12 @@ def createResolver(servers=None, resolvconf=None, hosts=None):
     else:
         if hosts is None:
             hosts = r'c:\windows\hosts'
+        hostResolver = hostsModule.Resolver(hosts)
+
         from twisted.internet import reactor
         bootstrap = _ThreadedResolverImpl(reactor)
-        hostResolver = hostsModule.Resolver(hosts)
-        theResolver = root.bootstrap(bootstrap)
+        clresolver = Resolver(servers, reactor)
+        theResolver = root.bootstrap(bootstrap, clresolver)
 
     L = [hostResolver, cache.CacheResolver(), theResolver]
     return resolve.ResolverChain(L)
diff --git a/twisted/names/root.py b/twisted/names/root.py
index a6a5eb3..fe366a3 100644
--- a/twisted/names/root.py
+++ b/twisted/names/root.py
@@ -66,17 +66,20 @@ class Resolver(common.ResolverBase):
     @ivar hints: A C{list} of C{str} giving the dotted quad representation
         of IP addresses of root servers at which to begin resolving names.
 
+    @ivar clresolver: auxiliary resolver for making a query
+
     @ivar _maximumQueries: A C{int} giving the maximum number of queries
         which will be attempted to resolve a single name.
 
     @ivar _reactor: A L{IReactorTime} and L{IReactorUDP} provider to use to
         bind UDP ports and manage timeouts.
     """
-    def __init__(self, hints, maximumQueries=10, reactor=None):
+    def __init__(self, hints, clresolver, maximumQueries=10, reactor=None):
         common.ResolverBase.__init__(self)
         self.hints = hints
         self._maximumQueries = maximumQueries
         self._reactor = reactor
+        self.clresolver = clresolver
 
 
     def _roots(self):
@@ -112,11 +115,12 @@ class Resolver(common.ResolverBase):
             error.
         @rtype: L{Deferred}
         """
-        from twisted.names import client
-        r = client.Resolver(servers=servers, reactor=self._reactor)
-        d = r.queryUDP([query], timeout)
+        self.clresolver.servers = servers
+        self.clresolver.reactor = self._reactor
+
+        d = self.clresolver.queryUDP([query], timeout)
         if filter:
-            d.addCallback(r.filterAnswers)
+            d.addCallback(self.clresolver.filterAnswers)
         return d
 
 
@@ -432,7 +436,7 @@ class DeferredResolver:
             return makePlaceholder(self.waiting[-1], name)
         raise AttributeError(name)
 
-def bootstrap(resolver):
+def bootstrap(resolver, clresolver):
     """Lookup the root nameserver addresses using the given resolver
 
     Return a Resolver which will eventually become a C{root.Resolver}
@@ -444,5 +448,5 @@ def bootstrap(resolver):
     f = lambda r: r
     L = [resolver.getHostByName('%s.root-servers.net' % d).addCallback(f) for d in domains]
     d = defer.DeferredList(L)
-    d.addCallback(lambda r: Resolver([e[1] for e in r if e[0]]))
+    d.addCallback(lambda r: Resolver([e[1] for e in r if e[0]], clresolver))
     return DeferredResolver(d)
