diff --git a/snippets/nbl.py b/snippets/nbl.py
index a914ae9..f3ec8b4 100644
--- a/snippets/nbl.py
+++ b/snippets/nbl.py
@@ -9,13 +9,25 @@ IPv4 = 0x0008
 ARP = 0x0608
 IPv6 = 0xdd86
 
+ICMP_PROTO = 0x01
+UDP_PROTO = 0x11
+TCP_PROTO = 0x06
+
 
 def getHostWord( dataPos ):
-   return ( dataPos.next() << 8 ) + dataPos.next()   
+    return ( dataPos.next() << 8 ) + dataPos.next()   
 
 
 def getNetWord( dataPos ):
-   return dataPos.next() + ( dataPos.next() << 8 )
+    return dataPos.next() + ( dataPos.next() << 8 )
+
+
+def getHostDWord( dataPos ):
+    return ( dataPos.next() << 24 ) + ( dataPos.next() << 16 ) + ( dataPos.next() << 8 ) + dataPos.next()
+
+
+def getNetDWord( dataPos ):
+    return dataPos.next() + ( dataPos.next() << 8 ) + ( dataPos.next() << 16 ) + ( dataPos.next() << 24 )
 
 
 
@@ -45,7 +57,7 @@ class UdpPacket:
             s += "\tChecksum: %#x\n" % self.checksum
             s += "\n"
         else:
-            s += "FAILED\n"
+            s += "MALFORMED\n"
 
         return s
 
@@ -70,21 +82,31 @@ class IpAddress:
         return "%d.%d.%d.%d" % tuple( self.addr[0:4] ) 
 
 
+class Ip6Address:
+   
+    def __init__( self, dataPos ):
+        pass
+
+    def __str__( self ):
+        return ""
+
+
 class IpProtocol:
 
-   def __init__( self, dataPos ):
-       self.typeVal = dataPos.next()
+    def __init__( self, dataPos ):
+        self.typeVal = dataPos.next()
 
-   def isUDP( self ):
-       return self.typeVal==0x11
+    def isICMP( self ):
+        return self.typeVal==ICMP_PROTO
 
-   def isTCP( self ):
-       return self.typeVal==0x06
+    def isUDP( self ):
+        return self.typeVal==UDP_PROTO
 
-   def __str__( self ):
-       if self.isUDP() : return "UDP"
-       if self.isTCP() : return "TCP"
-       else: return "%x" % self.typeVal
+    def isTCP( self ):
+        return self.typeVal==TCP_PROTO
+
+    def __str__( self ):
+        return { ICMP_PROTO: "ICMP", UDP_PROTO: "UDP", TCP_PROTO: "TCP" }.get( self.typeVal, hex(self.typeVal) )
 
 
 
@@ -135,7 +157,7 @@ class IpPacket:
             s += str( self.nextLayerPckt )
 
         else:
-            s += "FAILED\n"
+            s += "MALFORMED\n"
 
         return s
 
@@ -143,9 +165,43 @@ class IpPacket:
 class Ip6Packet():
 
    def  __init__( self, dataPos ):
-       pass
+  
+       self.parsed = False
+        
+       try:
+           
+           t = getNetDWord( dataPos )
+           self.version = ( t >> 28 ) & 0xF
+           self.trafficClass = ( t >> 20 ) & 0xFF
+           self.flowLabel = t & 0xFFF
+           self.payloadLength = getNetWord( dataPos )
+           self.nextHeader = dataPos.next()
+           self.hopLimit = dataPos.next()
+           self.srcAddr = Ip6Address( dataPos )
+           self.destAddr = Ip6Address( dataPos ) 
 
+           self.parsed = True     
+        
+       except StopIteration:
+           pass
+ 
    def __str__( self ):
+
+       s = "IPv6 header"
+
+       if self.parsed:
+           s += "OK\n"
+           s += "\tversion: %x\n" % self.version       
+           s += "\ttraffic class %x\n" % self.trafficClass
+           s += "\tflowLabel: %x\n" % self.flowLabel
+           s += "\tpayloadLength: %x\n" % self.payloadLength
+           s += "\tnextHeader: %x\n" % self.nextHeader
+           s += "\thopLimit: %d\n" % self.hopLimit
+           s += "\tsrcAddr: " + str(self.srcAddr) + "\n"
+           s += "\tdestAddr: " + str(self.destAddr) + "\n"
+       else:
+           s += "MALFORMED\n"
+
        return ""
 
 
diff --git a/snippets/pytowiki.py b/snippets/pytowiki.py
index 2826e85..2ab62ae 100644
--- a/snippets/pytowiki.py
+++ b/snippets/pytowiki.py
@@ -11,24 +11,43 @@ def usage():
 
 class CodeplexFormatter:
 
+    def endl( self ):
+        return "\n"
+
     def header1( self, s ):
-        return "! " + s + "\n"
+        return "! " + s + self.endl()
 
     def header2( self, s ):
-        return "!! " + s + "\n"
+        return "!! " + s + self.endl()
 
     def header3( self, s ):
-        return "!!! " + s + "\n"
+        return "!!! " + s + self.endl()
+
+    def header4( self, s ):
+        return "!!!! " + s + self.endl()
 
     def bulletItem( self, s ):
-        return "* " + s + "\n"
+        return "* " + s + self.endl()
+
+    def escapeMarkup( self, s ):
+        return "{\"" + s + "\"}"
+
+    def link( self, text, link ):
+        return "[" + text + "|#" + link + "]"
+
+    def anchor( self, link ):
+        return "{anchor:" + link + "}" + self.endl()
+
 
 
 class ModuleInfo:
 
     def __init__ (self, module):
         self.funcs = sorted( [ item for item in module.__dict__.values() if type(item).__name__ == "function" ], key=lambda x: x.__name__ ) 
-        self.classes = sorted( [ item for item in module.__dict__.values() if type(item).__name__ == "class" ],  key=lambda x: x.__name__ ) 
+        self.classes = sorted( [ item for item in module.__dict__.values() if type(item).__name__ == "class" ],  key=lambda x: x.__name__ )      
+
+        for cls in  self.classes:
+            cls.methods = sorted( [ item for item in cls.__dict__.values() if type(item).__name__ == "function" ], key=lambda x: x.__name__ ) 
 
 
 def buildDoc( ioStream, formatter, apiInfo ):
@@ -36,23 +55,34 @@ def buildDoc( ioStream, formatter, apiInfo ):
     ioStream.write( formatter.header2( "Functions" ) )
 
     for func in apiInfo.funcs:
-        ioStream.write( formatter.bulletItem( func.__name__ ) )
+        ioStream.write( formatter.bulletItem( formatter.link( func.__name__, func.__name__ ) ) )
 
     ioStream.write( formatter.header2( "Classes" ) )
 
     for cls in apiInfo.classes:
-        ioStream.write( formatter.bulletItem( cls.__name__ ) )
+        ioStream.write( formatter.bulletItem( formatter.link( cls.__name__, cls.__name__ ) ) )
 
 
     for func in apiInfo.funcs:
+        ioStream.write( formatter.anchor( func.__name__ ) )
         ioStream.write( formatter.header3( func.__name__ ) )
-        ioStream.write( func.__doc__ + "\n" )
+        ioStream.write( formatter.escapeMarkup( func.__doc__) + formatter.endl() )
 
 
     for cls in apiInfo.classes:
+        ioStream.write( formatter.anchor( cls.__name__ ) )
         ioStream.write( formatter.header3( cls.__name__ ) )	
-        ioStream.write( cls.__doc__ + "\n" )
+        ioStream.write( formatter.escapeMarkup( cls.__doc__)  + formatter.endl() )
 
+        for m in cls.methods:
+            if m.__doc__ != None:
+                ioStream.write( formatter.bulletItem( formatter.escapeMarkup( m.__name__ ) ) )
+
+
+        for m in cls.methods:
+            if m.__doc__ != None:
+                ioStream.write( formatter.header4( formatter.escapeMarkup( m.__name__ ) ) )
+                ioStream.write( formatter.escapeMarkup( m.__doc__ ) + formatter.endl() )
 
 
 def buildFuncDir( ioStream, funcs ):