diff --git a/src/hostinfo/named.py b/src/hostinfo/named.py
index 3515773afaac866ba29b7d9e7c7e7598db70ee28..353c8470684304367fdee75333172d901eda980b 100755
--- a/src/hostinfo/named.py
+++ b/src/hostinfo/named.py
@@ -1,6 +1,6 @@
 import copy
 import hostinfo.parser
-from hostinfo.util import ntoa, aton, fqn
+from hostinfo.util import ntoa, aton, fqn, by_ip
 
 def generate(tree, host):
     #
@@ -121,6 +121,12 @@ def forward(tree, domain):
     for s in tree._subnet_:
         if s.network[0] and s.domain[0] == domain.domain[0]:
             net.append((aton(s.network[0]), aton(s.netmask[0])))
+            pass
+        pass
+    net_ipv6 = []
+    for s in tree._subnet_ipv6_:
+        if s.prefix[0] and s.domain[0] == domain.domain[0]:
+            net_ipv6.append(s.prefix[0])
 
     for m in tree._host_._interface_._mailhost_:
         if m.domain[0] == domain.domain[0]:
@@ -129,34 +135,54 @@ def forward(tree, domain):
     result += ";\n"
                 
     host = {}
+    def add_entry(name, kind, value):
+        if not name in host:
+            host[name] = []
+            pass
+        host[name].append((kind, value))
+        pass
     for i in tree._host_._interface_._ip_:
         # Find all hosts that belong to this network
         for (n, m) in net:
             if i.address[0] and aton(i.address[0]) & m == n:
-                host[i.name[1:]] = "A       %s" % i.address[0]
+                add_entry(i.name[1:], 'A', '%s' % i.address[0])
                 for a in i._alias_:
-                    host[a.name[0]] = "CNAME   %s" % i.name[1:]
+                    add_entry(a.name[0], 'CNAME', '%s' % i.name[1:])
+                    pass
                 for s in i._srv_:
                     port = int(s.port[0] or 0)
                     priority = int(s.priority[0] or 0)
                     weight = int(s.weight[0] or 0)
-                    host[s.name[0]] = "SRV     %d %d %d %s" % (
-                        priority, weight, port, s.name[1:])
+                    add_entry(s.name[0], 'SRV', '%d %d %d %s' % (
+                        priority, weight, port, s.name[1:]))
+                    pass
+                pass
+            pass
+        pass
 
+    for i in tree._host_._interface_._ipv6_:
+        for p in net_ipv6:
+            if i.address[0] and i.address[0].startswith(p):
+                add_entry(i.name[1:], 'AAAA', '%s' % i.address[0])
+            pass
+        pass
+    
     for c in domain._cname_:
         # Emit cnames defined in subnet
-        host[c.alias[0]] = "CNAME   %s" % c.name[0]
+        add_entry(c.alias[0], 'CNAME', '%s' % c.name[0])
+        pass
         
     # Add a localhost entry
     result += "localhost       IN      A       127.0.0.1\n"
     result += ";\n"
 
     # Add hosts
-    hk = host.keys()
-    hk.sort()
-    for h in hk:
-        result += "%-18s IN      %s\n" % (h, host[h])
-
+    for h1 in sorted(host):
+        for k,v  in sorted(host[h1]):
+            result += "%-18s IN      %-7s %s\n" % (h1, k, v)
+            pass
+        pass
+    
     return result
 
 def reverse(tree, net):
diff --git a/src/hostinfo/util.py b/src/hostinfo/util.py
index 458a075e77dc4a43d48ba5a858b9441cf92f90a0..f76cdf1f49f3f52ba208ba8cd7e5074c30b2ff39 100755
--- a/src/hostinfo/util.py
+++ b/src/hostinfo/util.py
@@ -31,3 +31,23 @@ def fqn(tree, host):
     else:
         raise Exception("'%s' not FQN, but has no ip" % host.name[0:])
     pass
+
+def by_ip(a, b):
+    aa = a.split('.')
+    ba = b.split('.')
+    for i in range(0, len(aa)):
+        if int(aa[i]) < int(ba[i]):
+            return -1
+        elif int(aa[i]) > int(ba[i]):
+            return 1
+    return 0
+
+def by_mac(a, b):
+    aa = a.split(':')
+    ba = b.split(':')
+    for i in range(0, len(aa)):
+        if int(aa[i],16) < int(ba[i],16):
+            return -1
+        elif int(aa[i],16) > int(ba[i],16):
+            return 1
+    return 0
diff --git a/src/hostinfo/yp.py b/src/hostinfo/yp.py
index 39c0d39d3ef331542d3316deee7b6b051c60dd10..f0b410598a128ba1149dc0ccc8d51e7684e2c570 100755
--- a/src/hostinfo/yp.py
+++ b/src/hostinfo/yp.py
@@ -1,4 +1,4 @@
-from hostinfo.util import fqn, aton, ntoa
+from hostinfo.util import fqn, aton, ntoa, by_ip, by_mac
 
 def generate(tree, auto_domain):
     result = []
@@ -158,22 +158,3 @@ def auto_map(tree, map_name, auto_domain):
     return result
 
 
-def by_ip(a, b):
-    aa = a.split('.')
-    ba = b.split('.')
-    for i in range(0, len(aa)):
-        if int(aa[i]) < int(ba[i]):
-            return -1
-        elif int(aa[i]) > int(ba[i]):
-            return 1
-    return 0
-
-def by_mac(a, b):
-    aa = a.split(':')
-    ba = b.split(':')
-    for i in range(0, len(aa)):
-        if int(aa[i],16) < int(ba[i],16):
-            return -1
-        elif int(aa[i],16) > int(ba[i],16):
-            return 1
-    return 0