Index: /home/maurer/stuff/workspace/james-dev/src/test/org/apache/james/smtpserver/SMTPServerTest.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/test/org/apache/james/smtpserver/SMTPServerTest.java	(revision 404746)
+++ /home/maurer/stuff/workspace/james-dev/src/test/org/apache/james/smtpserver/SMTPServerTest.java	(working copy)
@@ -52,6 +52,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.InetAddress;
+import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -124,9 +125,24 @@
                 return res;
             }
 
+            
             public Iterator getSMTPHostAddresses(String domainName) {
                 throw new UnsupportedOperationException("Unimplemented mock service");
             }
+
+
+            public InetAddress[] getAllByName(String host) throws UnknownHostException
+            {
+                // TODO Add the right values
+                return null;
+            }
+
+
+            public InetAddress getByName(String host) throws UnknownHostException
+            {
+                // TODO Add the right values
+                return null;
+            }
             
         };
         serviceManager.put(DNSServer.ROLE, dns);
Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/dnsserver/DNSServer.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/dnsserver/DNSServer.java	(revision 398213)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/dnsserver/DNSServer.java	(working copy)
@@ -509,7 +509,7 @@
     /**
      * @see java.net.InetAddress#getByName(String)
      */
-    public static InetAddress getByName(String host) throws UnknownHostException {
+    public InetAddress getByName(String host) throws UnknownHostException {
         return org.xbill.DNS.Address.getByName(allowIPLiteral(host));
     }
 
@@ -516,7 +516,7 @@
     /**
      * @see java.net.InetAddress#getByAllName(String)
      */
-    public static InetAddress[] getAllByName(String host) throws UnknownHostException {
+    public InetAddress[] getAllByName(String host) throws UnknownHostException {
         return org.xbill.DNS.Address.getAllByName(allowIPLiteral(host));
     }
 
Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/fetchmail/FetchMail.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/fetchmail/FetchMail.java	(revision 385656)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/fetchmail/FetchMail.java	(working copy)
@@ -39,6 +39,7 @@
 import org.apache.avalon.framework.service.Serviceable;
 import org.apache.james.services.MailServer;
 import org.apache.james.services.UsersRepository;
+import org.apache.james.services.DNSServer;
 
 /**
  * <p>Class <code>FetchMail</code> is an Avalon task that is periodically
@@ -394,8 +395,13 @@
    /**
      * The Local Users repository
      */
-    private UsersRepository fieldLocalUsers;        
-
+    private UsersRepository fieldLocalUsers;     
+    
+    /**
+     * The DNSServer
+     */
+    private DNSServer dnsServer;
+    
     /**
      * Constructor for POP3mail.
      */
@@ -424,7 +430,8 @@
                 configuration,
                 getLogger(),
                 getServer(),
-                getLocalUsers());
+                getLocalUsers(),
+                getDNSServer());
         setConfiguration(parsedConfiguration);
 
         // Setup the Accounts
@@ -594,7 +601,10 @@
                     "does not implement the required interface.");
             throw new ServiceException("", errorBuffer.toString());
         }
-
+        
+        DNSServer dnsServer = (DNSServer) manager.lookup(DNSServer.ROLE);
+        setDNSServer(dnsServer);
+        
         UsersRepository usersRepository =
             (UsersRepository) manager.lookup(UsersRepository.ROLE);
         setLocalUsers(usersRepository);
@@ -668,6 +678,25 @@
     fieldLocalUsers = localUsers;
 }
 
+/**
+ * Returns the DNSServer.
+ * @return DNSServer 
+ */
+protected DNSServer getDNSServer()
+{
+    return dnsServer;
+}
+
+/**
+ * Sets the DNSServer.
+ * @param dnsServer The DNSServer to set
+ */
+protected void setDNSServer(DNSServer dnsServer)
+{
+    this.dnsServer = dnsServer;
+}
+
+
     /**
      * Returns the accounts. Initializes if required.
      * @return List
Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/fetchmail/FetchScheduler.xinfo
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/fetchmail/FetchScheduler.xinfo	(revision 385656)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/fetchmail/FetchScheduler.xinfo	(working copy)
@@ -21,7 +21,10 @@
     </dependency>
     <dependency>
       <service name="org.apache.james.services.UsersRepository" version="1.0"/>
-    </dependency>    
+    </dependency> 
+    <dependency>
+      <service name="org.apache.james.services.DNSServer" version="1.0"/>
+    </dependency>       
     <dependency> 
       <service name="org.apache.avalon.cornerstone.services.scheduler.TimeScheduler" version="1.0"/>
     </dependency> 
Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/fetchmail/MessageProcessor.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/fetchmail/MessageProcessor.java	(revision 385656)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/fetchmail/MessageProcessor.java	(working copy)
@@ -1468,7 +1468,7 @@
                 hostNameEnd = domain.length();
             address = domain.substring(0, hostNameEnd);
         }
-        validatedAddress = org.apache.james.dnsserver.DNSServer.getByName(address).getHostAddress();
+        validatedAddress = getDNSServer().getByName(address).getHostAddress();
 
         return validatedAddress;
     }
@@ -1486,8 +1486,8 @@
         // These shenanigans are required to get the fully qualified
         // hostname prior to JDK 1.4 in which get getCanonicalHostName()
         // does the job for us
-        InetAddress addr1 = org.apache.james.dnsserver.DNSServer.getByName(getRemoteAddress());
-        InetAddress addr2 = org.apache.james.dnsserver.DNSServer.getByName(addr1.getHostAddress());
+        InetAddress addr1 = getDNSServer().getByName(getRemoteAddress());
+        InetAddress addr2 = getDNSServer().getByName(addr1.getHostAddress());
         return addr2.getHostName();
     }        
 
Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/fetchmail/ParsedConfiguration.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/fetchmail/ParsedConfiguration.java	(revision 385656)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/fetchmail/ParsedConfiguration.java	(working copy)
@@ -28,6 +28,7 @@
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.logger.Logger;
+import org.apache.james.services.DNSServer;
 import org.apache.james.services.MailServer;
 import org.apache.mailet.MailAddress;
 import org.apache.james.services.UsersRepository;
@@ -297,6 +298,12 @@
      * The Local Users repository
      */
     private UsersRepository fieldLocalUsers;    
+    
+    
+    /**
+     * The DNSServer
+     */
+    private DNSServer dnsServer;
 
 
 
@@ -314,9 +321,10 @@
      * @param logger
      * @param server
      * @param localUsers
+     * @param dnsServer
      * @throws ConfigurationException
      */
-    public ParsedConfiguration(Configuration configuration, Logger logger, MailServer server, UsersRepository localUsers) throws ConfigurationException
+    public ParsedConfiguration(Configuration configuration, Logger logger, MailServer server, UsersRepository localUsers,DNSServer dnsServer) throws ConfigurationException
     {
         this();
         setLogger(logger);
@@ -321,7 +329,8 @@
         this();
         setLogger(logger);
         setServer(server);
-        setLocalUsers(localUsers);      
+        setLocalUsers(localUsers);   
+        setDNSServer(dnsServer);
         configure(configuration);
     }
     
@@ -609,6 +618,26 @@
     fieldLocalUsers = localUsers;
 }
 
+
+/**
+ * Return the DNSServer
+ * @return dnsServer The DNSServer
+ */
+public DNSServer getDNSServer()
+{
+    return dnsServer;
+}
+
+
+/**
+ * Set the DNSServer
+ * @param dnsServer The dnsServer to use
+ */
+protected void setDNSServer(DNSServer dnsServer)
+{
+    this.dnsServer = dnsServer;
+}
+
     /**
      * Returns the keepRejected.
      * @return boolean
Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/fetchmail/ProcessorAbstract.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/fetchmail/ProcessorAbstract.java	(revision 385656)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/fetchmail/ProcessorAbstract.java	(working copy)
@@ -27,6 +27,7 @@
 import org.apache.james.services.MailServer;
 import org.apache.mailet.MailAddress;
 import org.apache.james.services.UsersRepository;
+import org.apache.james.services.DNSServer;
 
 /**
  * <p>Class <code>ProcessorAbstract</code> is an abstract class that
@@ -195,6 +196,15 @@
     }
     
     /**
+     * Returns the DNSServer
+     * @return DNSServer
+     */
+    protected DNSServer getDNSServer()
+    {
+        return getConfiguration().getDNSServer();
+    }
+    
+    /**
      * Returns the session.
      * @return Session
      */
@@ -582,6 +592,7 @@
     protected int getMaxMessageSizeLimit()
     {
         return getConfiguration().getMaxMessageSizeLimit();
-    }    
+    }
+    
 
 }
Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/services/DNSServer.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/services/DNSServer.java	(revision 384301)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/services/DNSServer.java	(working copy)
@@ -17,6 +17,8 @@
 
 package org.apache.james.services;
 
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 import java.util.Collection;
 import java.util.Iterator;
 
@@ -57,4 +59,13 @@
      */
     Iterator getSMTPHostAddresses(String domainName);
     
+    /**
+     * @see java.net.InetAddress#getByAllName(String)
+     */
+    public InetAddress[] getAllByName(String host) throws UnknownHostException;
+ 
+    /**
+     * @see java.net.InetAddress#getByName(String)
+     */
+    public InetAddress getByName(String host) throws UnknownHostException;
 }
Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/smtpserver/DNSRBLHandler.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/smtpserver/DNSRBLHandler.java	(revision 404746)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/smtpserver/DNSRBLHandler.java	(working copy)
@@ -18,9 +18,14 @@
 package org.apache.james.smtpserver;
 
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.Configurable;
 import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.james.services.DNSServer;
+
 import java.util.ArrayList;
 import java.util.StringTokenizer;
 
@@ -29,7 +34,7 @@
   */
 public class DNSRBLHandler
     extends AbstractLogEnabled
-    implements ConnectHandler, Configurable {
+    implements ConnectHandler, Configurable, Serviceable {
     /**
      * The lists of rbl servers to be checked to limit spam
      */
@@ -35,6 +40,8 @@
      */
     private String[] whitelist;
     private String[] blacklist;
+    
+    private DNSServer dnsServer = null;
 
     /**
      * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
@@ -76,6 +83,13 @@
 
     }
 
+    /**
+     * @see org.apache.avalon.framework.service.Serviceable#service(ServiceManager)
+     */
+    public void service(ServiceManager serviceMan) throws ServiceException {
+        dnsServer = (DNSServer) serviceMan.lookup(DNSServer.ROLE);
+    }
+    
     /*
      * check if the remote Ip address is block listed
      *
@@ -119,7 +133,7 @@
             if (whitelist != null) {
                 String[] rblList = whitelist;
                 for (int i = 0 ; i < rblList.length ; i++) try {
-                    org.apache.james.dnsserver.DNSServer.getByName(reversedOctets + rblList[i]);
+                    dnsServer.getByName(reversedOctets + rblList[i]);
                     if (getLogger().isInfoEnabled()) {
                         getLogger().info("Connection from " + ipAddress + " whitelisted by " + rblList[i]);
                     }
@@ -134,7 +148,7 @@
             if (blacklist != null) {
                 String[] rblList = blacklist;
                 for (int i = 0 ; i < rblList.length ; i++) try {
-                    org.apache.james.dnsserver.DNSServer.getByName(reversedOctets + rblList[i]);
+                    dnsServer.getByName(reversedOctets + rblList[i]);
                     if (getLogger().isInfoEnabled()) {
                         getLogger().info("Connection from " + ipAddress + " restricted by " + rblList[i] + " to SMTP AUTH/postmaster/abuse.");
                     }
Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/smtpserver/EhloCmdHandler.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/smtpserver/EhloCmdHandler.java	(revision 404746)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/smtpserver/EhloCmdHandler.java	(working copy)
@@ -21,6 +21,10 @@
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
+import org.apache.james.services.DNSServer;
 import org.apache.james.util.mail.dsn.DSNStatus;
 
 import java.net.UnknownHostException;
@@ -29,7 +33,7 @@
 /**
   * Handles EHLO command
   */
-public class EhloCmdHandler extends AbstractLogEnabled implements CommandHandler,Configurable {
+public class EhloCmdHandler extends AbstractLogEnabled implements CommandHandler,Configurable,  Serviceable {
 
     /**
      * The name of the command handled by the command handler
@@ -43,6 +47,8 @@
     
     private boolean checkAuthNetworks = false;
     
+    private DNSServer dnsServer = null;
+    
     /**
      * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
      */
@@ -57,6 +63,13 @@
             checkAuthNetworks = configRelay.getValueAsBoolean();
         }
     }
+    
+    /**
+     * @see org.apache.avalon.framework.service.Serviceable#service(ServiceManager)
+     */
+    public void service(ServiceManager serviceMan) throws ServiceException {
+        dnsServer = (DNSServer) serviceMan.lookup(DNSServer.ROLE);
+    }
 
     /*
      * processes EHLO command
@@ -91,7 +104,7 @@
              
                 // try to resolv the provided helo. If it can not resolved do not accept it.
                 try {
-                    org.apache.james.dnsserver.DNSServer.getByName(argument);
+                    dnsServer.getByName(argument);
                 } catch (UnknownHostException e) {
                     badEhlo = true;
                     responseString = "501 "+DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_INVALID_ARG)+" Provided EHLO " + argument + " can not resolved";
Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/smtpserver/HeloCmdHandler.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/smtpserver/HeloCmdHandler.java	(revision 404746)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/smtpserver/HeloCmdHandler.java	(working copy)
@@ -23,6 +23,10 @@
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
+import org.apache.james.services.DNSServer;
 
 
 /**
@@ -28,7 +32,7 @@
 /**
   * Handles HELO command
   */
-public class HeloCmdHandler extends AbstractLogEnabled implements CommandHandler,Configurable {
+public class HeloCmdHandler extends AbstractLogEnabled implements CommandHandler,Configurable, Serviceable {
 
     /**
      * The name of the command handled by the command handler
@@ -42,6 +46,8 @@
     
     private boolean checkAuthNetworks = false;
     
+    private DNSServer dnsServer = null;
+    
     /**
      * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
      */
@@ -57,6 +63,14 @@
         }
         
     }
+    
+    /**
+     * @see org.apache.avalon.framework.service.Serviceable#service(ServiceManager)
+     */
+    public void service(ServiceManager serviceMan) throws ServiceException {
+        dnsServer = (DNSServer) serviceMan.lookup(DNSServer.ROLE);
+    }
+
        
     /*
      * process HELO command
@@ -90,7 +104,7 @@
 
                 // try to resolv the provided helo. If it can not resolved do not accept it.
                 try {
-                    org.apache.james.dnsserver.DNSServer.getByName(argument);
+                    dnsServer.getByName(argument);
                 } catch (UnknownHostException e) {
                     badHelo = true;
                     responseString = "501 Provided HELO " + argument + " can not resolved";
Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/smtpserver/SMTPServer.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/smtpserver/SMTPServer.java	(revision 404746)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/smtpserver/SMTPServer.java	(working copy)
@@ -26,6 +26,7 @@
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.james.Constants;
 import org.apache.james.core.AbstractJamesService;
+import org.apache.james.services.DNSServer;
 import org.apache.james.services.MailServer;
 import org.apache.james.services.UsersRepository;
 import org.apache.james.util.NetMatcher;
@@ -66,7 +67,12 @@
      * The internal mail server service.
      */
     private MailServer mailServer;
-
+    
+    /**
+     * The DNSServer to use for queries
+     */
+    private DNSServer dnsServer;
+    
     /**
      * Whether authentication is required to use
      * this SMTP server.
@@ -125,6 +131,7 @@
         mailetcontext = (MailetContext) manager.lookup("org.apache.mailet.MailetContext");
         mailServer = (MailServer) manager.lookup(MailServer.ROLE);
         users = (UsersRepository) manager.lookup(UsersRepository.ROLE);
+        dnsServer = (DNSServer) manager.lookup(DNSServer.ROLE); 
     }
 
     /**
@@ -176,7 +183,7 @@
                     String addr = st.nextToken();
                     networks.add(addr);
                 }
-                authorizedNetworks = new NetMatcher(networks);
+                authorizedNetworks = new NetMatcher(networks,dnsServer);
             }
 
             if (authorizedNetworks != null) {
@@ -365,6 +372,9 @@
         public boolean useHeloEhloEnforcement() {
             return SMTPServer.this.heloEhloEnforcement;
         }
+        
+        //TODO: IF we create here an interface to get DNSServer
+        //      we should access it from the SMTPHandlers
 
     }
 
Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/transport/mailets/RemoteDelivery.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/transport/mailets/RemoteDelivery.java	(revision 397810)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/transport/mailets/RemoteDelivery.java	(working copy)
@@ -22,6 +22,7 @@
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.james.Constants;
+import org.apache.james.services.DNSServer;
 import org.apache.james.services.SpoolRepository;
 import org.apache.mailet.GenericMailet;
 import org.apache.mailet.HostAddress;
@@ -104,6 +105,7 @@
     private static final HashMap MULTIPLIERS = new HashMap (10); //holds allowed units for delaytime together with
                                                                 //the factor to turn it into the equivalent time in msec
 
+    private DNSServer dnsServer;
     /*
      * Static initializer.<p>
      * Compiles pattern for processing delaytime entries.<p>
@@ -155,6 +157,10 @@
             if (state.equals(Mail.ERROR)) {
                 //Test the time...
                 int retries = Integer.parseInt(errorMessage);
+                
+                // If the retries count is 0 we should send the mail now!
+                if (retries == 0) return true;
+                
                 long delay = getNextDelay (retries);
                 long timeToProcess = delay + lastUpdated;
 
@@ -328,6 +334,15 @@
         } catch (Exception e) {
             log("Failed to retrieve Store component:" + e.getMessage());
         }
+        
+        try {
+            // Instantiate DNSService
+            dnsServer = (DNSServer) compMgr.lookup(DNSServer.ROLE);
+        } catch (ServiceException cnfe) {
+            log("Failed to retrieve DNSService" + cnfe.getMessage());
+        } catch (Exception e) {
+            log("Failed to retrieve DNSService:" + e.getMessage());
+        }
 
         //Start up a number of threads
         try {
@@ -1172,7 +1187,7 @@
     private long getNextDelay (int retry_count) {
         if (retry_count > delayTimes.length) {
             return DEFAULT_DELAY_TIME;
-        }
+        } 
         return delayTimes[retry_count-1];
     }
 
@@ -1310,7 +1325,7 @@
                         final String nextGateway = server;
                         final String nextGatewayPort = port;
                         try {
-                            final InetAddress[] ips = org.apache.james.dnsserver.DNSServer.getAllByName(nextGateway);
+                            final InetAddress[] ips = dnsServer.getAllByName(nextGateway);
                             addresses = new Iterator() {
                                 private InetAddress[] ipAddresses = ips;
                                 int i = 0;
Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/transport/matchers/AbstractNetworkMatcher.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/transport/matchers/AbstractNetworkMatcher.java	(revision 384301)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/transport/matchers/AbstractNetworkMatcher.java	(working copy)
@@ -17,6 +17,10 @@
 
 package org.apache.james.transport.matchers;
 
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.james.Constants;
+import org.apache.james.services.DNSServer;
 import org.apache.james.util.NetMatcher;
 import javax.mail.MessagingException;
 import java.util.StringTokenizer;
@@ -49,11 +53,29 @@
      * authorized networks
      */
     private NetMatcher authorizedNetworks = null;
+    
+    /**
+     * The DNSServer
+     */
+    private DNSServer dnsServer;
 
     public void init() throws MessagingException {
+        
+        ServiceManager compMgr = (ServiceManager)getMailetContext().getAttribute(Constants.AVALON_COMPONENT_MANAGER);
+        
+        try {
+            // Instantiate DNSServer
+            dnsServer = (DNSServer) compMgr.lookup(DNSServer.ROLE);
+        } catch (ServiceException cnfe) {
+            log("Failed to retrieve DNSServer" + cnfe.getMessage());
+        } catch (Exception e) {
+            log("Failed to retrieve DNSServer:" + e.getMessage());
+        }
+        
         Collection nets = allowedNetworks();
+        
         if (nets != null) {
-            authorizedNetworks = new NetMatcher() {
+            authorizedNetworks = new NetMatcher(dnsServer) {
                 protected void log(String s) {
                     AbstractNetworkMatcher.this.log(s);
                 }
Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/transport/matchers/InSpammerBlacklist.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/transport/matchers/InSpammerBlacklist.java	(revision 384301)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/transport/matchers/InSpammerBlacklist.java	(working copy)
@@ -17,6 +17,10 @@
 
 package org.apache.james.transport.matchers;
 
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.james.Constants;
+import org.apache.james.services.DNSServer;
 import org.apache.mailet.GenericMatcher;
 import org.apache.mailet.Mail;
 
@@ -43,9 +47,23 @@
  */
 public class InSpammerBlacklist extends GenericMatcher {
     String network = null;
+    
+    private DNSServer dnsServer;
 
     public void init() throws MessagingException {
         network = getCondition();
+        
+        ServiceManager compMgr = (ServiceManager)getMailetContext().getAttribute(Constants.AVALON_COMPONENT_MANAGER);
+        
+        try {
+            // Instantiate DNSService
+            dnsServer = (DNSServer) compMgr.lookup(DNSServer.ROLE);
+        } catch (ServiceException cnfe) {
+            log("Failed to retrieve DNSService" + cnfe.getMessage());
+        } catch (Exception e) {
+            log("Failed to retrieve DNSService:" + e.getMessage());
+        }
+
     }
 
     public Collection match(Mail mail) {
@@ -63,7 +81,7 @@
             sb.append(network);
 
             //Try to look it up
-            org.apache.james.dnsserver.DNSServer.getByName(sb.toString());
+            dnsServer.getByName(sb.toString());
 
             //If we got here, that's bad... it means the host
             //  was found in the blacklist
Index: /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/util/NetMatcher.java
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/util/NetMatcher.java	(revision 384301)
+++ /home/maurer/stuff/workspace/james-dev/src/java/org/apache/james/util/NetMatcher.java	(working copy)
@@ -22,8 +22,12 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 
+import org.apache.james.services.DNSServer;
+
 public class NetMatcher
 {
+    private DNSServer dnsServer;
+    
     private ArrayList networks;
 
     public void initInetNetworks(final Collection nets)
@@ -29,9 +33,12 @@
     public void initInetNetworks(final Collection nets)
     {
         networks = new ArrayList();
+        
+        InetNetwork in = new InetNetwork(dnsServer);
+        
         for (Iterator iter = nets.iterator(); iter.hasNext(); ) try
         {
-            InetNetwork net = InetNetwork.getFromString((String) iter.next());
+            InetNetwork net = in.getFromString((String) iter.next());
             if (!networks.contains(net)) networks.add(net);
         }
         catch (java.net.UnknownHostException uhe)
@@ -43,10 +50,14 @@
 
     public void initInetNetworks(final String[] nets)
     {
+        
         networks = new ArrayList();
+        
+        InetNetwork in = new InetNetwork(dnsServer);
+        
         for (int i = 0; i < nets.length; i++) try
         {
-            InetNetwork net = InetNetwork.getFromString(nets[i]);
+            InetNetwork net = in.getFromString(nets[i]);
             if (!networks.contains(net)) networks.add(net);
         }
         catch (java.net.UnknownHostException uhe)
@@ -62,7 +73,7 @@
 
         try
         {
-            ip = org.apache.james.dnsserver.DNSServer.getByName(hostIP);
+            ip = dnsServer.getByName(hostIP);
         }
         catch (java.net.UnknownHostException uhe)
         {
@@ -94,14 +105,21 @@
     public NetMatcher()
     {
     }
+    
+    public NetMatcher(DNSServer dnsServer)
+    {
+        this.dnsServer = dnsServer;
+    }
 
-    public NetMatcher(final String[] nets)
+    public NetMatcher(final String[] nets,DNSServer dnsServer)
     {
+        this.dnsServer = dnsServer;
         initInetNetworks(nets);
     }
 
-    public NetMatcher(final Collection nets)
+    public NetMatcher(final Collection nets,DNSServer dnsServer)
     {
+        this.dnsServer = dnsServer;
         initInetNetworks(nets);
     }
 
@@ -114,6 +132,7 @@
 
 class InetNetwork
 {
+
     /*
      * Implements network masking, and is compatible with RFC 1518 and
      * RFC 1519, which describe CIDR: Classless Inter-Domain Routing.
@@ -121,6 +140,11 @@
 
     private InetAddress network;
     private InetAddress netmask;
+    private DNSServer dnsServer;
+    
+    InetNetwork(DNSServer dnsServer) {
+        this.dnsServer = dnsServer;
+    }
 
     public InetNetwork(InetAddress ip, InetAddress netmask)
     {
@@ -130,7 +154,7 @@
 
     public boolean contains(final String name) throws java.net.UnknownHostException
     {
-        return network.equals(maskIP(org.apache.james.dnsserver.DNSServer.getByName(name), netmask));
+        return network.equals(maskIP(dnsServer.getByName(name), netmask));
     }
 
     public boolean contains(final InetAddress ip)
@@ -154,7 +178,7 @@
                 ((((InetNetwork)obj).network.equals(network)) && (((InetNetwork)obj).netmask.equals(netmask)));
     }
 
-    public static InetNetwork getFromString(String netspec) throws java.net.UnknownHostException
+    public InetNetwork getFromString(String netspec) throws java.net.UnknownHostException
     {
         if (netspec.endsWith("*")) netspec = normalizeFromAsterisk(netspec);
         else
@@ -164,8 +188,8 @@
             else if (netspec.indexOf('.', iSlash) == -1) netspec = normalizeFromCIDR(netspec);
         }
 
-        return new InetNetwork(org.apache.james.dnsserver.DNSServer.getByName(netspec.substring(0, netspec.indexOf('/'))),
-                               org.apache.james.dnsserver.DNSServer.getByName(netspec.substring(netspec.indexOf('/') + 1)));
+        return new InetNetwork(dnsServer.getByName(netspec.substring(0, netspec.indexOf('/'))),
+                               dnsServer.getByName(netspec.substring(netspec.indexOf('/') + 1)));
     }
 
     public static InetAddress maskIP(final byte[] ip, final byte[] mask)
Index: /home/maurer/stuff/workspace/james-dev/src/conf/james-assembly.xml
===================================================================
--- /home/maurer/stuff/workspace/james-dev/src/conf/james-assembly.xml	(revision 398232)
+++ /home/maurer/stuff/workspace/james-dev/src/conf/james-assembly.xml	(working copy)
@@ -114,6 +114,7 @@
              role="org.apache.avalon.cornerstone.services.scheduler.TimeScheduler"/> 
     <provide name="James" role="org.apache.james.services.MailServer"/>      
     <provide name="localusersrepository" role="org.apache.james.services.UsersRepository"/>
+    <provide name="dnsserver" role="org.apache.james.services.DNSServer"/>
   </block>
 
   <!-- The High Level Storage block -->
