diff --git a/lib/modules/Protocols.pmod/DNS.pmod b/lib/modules/Protocols.pmod/DNS.pmod
index 4f46d37b0bbe37c19c0114474102adebf373ef8f..198b64487ecd4485ed1e7b09d2cda7f3ccccf7be 100644
--- a/lib/modules/Protocols.pmod/DNS.pmod
+++ b/lib/modules/Protocols.pmod/DNS.pmod
@@ -44,6 +44,7 @@ class protocol
 		    int cl,
 		    int type)
   {
+    if ( dname[-1] == '.') dname = dname[..sizeof(dname)-2];
     return sprintf("%2c%c%c%2c%2c%2c%2c%s\000%2c%2c",
 		   id,
 		   1,0,
@@ -525,6 +526,32 @@ class client
     }
     return ret;
   }
+
+  string *get_mx(string host)
+  {
+    mapping m;
+    if(sizeof(domains) && host[-1] != '.' && sizeof(host/".") < 3) {
+      m = do_sync_query(mkquery(host, C_IN, T_MX));
+      if(!m || !m->an || !sizeof(m->an)) {
+	foreach(domains, string domain)
+	{
+	  m = do_sync_query(mkquery(host+"."+domain, C_IN, T_MX));
+	  if(m && m->an && sizeof(m->an))
+	    break;
+	}
+      }
+    } else {
+      m = do_sync_query(mkquery(host, C_IN, T_MX));
+    }
+    if (!m) {
+      return 0;
+    }
+    array a = m->an;
+    array(string) b = column( a, "mx");
+    sort( column( a, "preference"), b);
+
+    return b;
+  }
 }
 
 #define REMOVE_DELAY 120