diff --git a/scapy/asn1packet.py b/scapy/asn1packet.py
index 4c476d2a5f52e66f701450ffc4aefb475f10c0cc..1b83c3a3e2f29152208717fcf8006da5546b3e5c 100644
--- a/scapy/asn1packet.py
+++ b/scapy/asn1packet.py
@@ -9,13 +9,16 @@ Packet holding data in Abstract Syntax Notation (ASN.1).
 
 from packet import *
 
+class ASN1Packet_metaclass(Packet_metaclass):
+    def __new__(cls, name, bases, dct):
+        if dct["ASN1_root"] is not None:
+            dct["fields_desc"] = dct["ASN1_root"].get_fields_list()
+        return super(ASN1Packet_metaclass, cls).__new__(cls, name, bases, dct)
+
 class ASN1_Packet(Packet):
+    __metaclass__ = ASN1Packet_metaclass
     ASN1_root = None
     ASN1_codec = None    
-    def init_fields(self):
-        flist = self.ASN1_root.get_fields_list()
-        self.do_init_fields(flist)
-        self.fields_desc = flist    
     def self_build(self):
         if self.raw_packet_cache is not None:
             return self.raw_packet_cache
diff --git a/scapy/base_classes.py b/scapy/base_classes.py
index d9c26aaeec697543a1637f12a03f26ef92f085fa..1d499653845ca6c2eddd629b584630785f3185ec 100644
--- a/scapy/base_classes.py
+++ b/scapy/base_classes.py
@@ -17,6 +17,7 @@ import error
 import types
 
 class Gen(object):
+    __slots__ = []
     def __iter__(self):
         return iter([])
     
@@ -177,11 +178,27 @@ class Packet_metaclass(type):
 
             dct["fields_desc"] = final_fld
 
+        if "__slots__" not in dct:
+            dct["__slots__"] = []
+        if "name" in dct:
+            dct["_name"] = dct.pop("name")
         newcls = super(Packet_metaclass, cls).__new__(cls, name, bases, dct)
+        newcls.__all_slots__ = set(
+            attr
+            for cls in newcls.__mro__ if hasattr(cls, "__slots__")
+            for attr in cls.__slots__
+        )
+
+        if hasattr(newcls, "aliastypes"):
+            newcls.aliastypes = [newcls] + newcls.aliastypes
+        else:
+            newcls.aliastypes = [newcls]
+
         if hasattr(newcls,"register_variant"):
             newcls.register_variant()
-        for f in newcls.fields_desc:                
-            f.register_owner(newcls)
+        for f in newcls.fields_desc:
+            if hasattr(f, "register_owner"):
+                f.register_owner(newcls)
         config.conf.layers.register(newcls)
         return newcls
 
@@ -198,6 +215,12 @@ class Packet_metaclass(type):
         i.__init__(*args, **kargs)
         return i
 
+class Field_metaclass(type):
+    def __new__(cls, name, bases, dct):
+        if "__slots__" not in dct:
+            dct["__slots__"] = []
+        newcls = super(Field_metaclass, cls).__new__(cls, name, bases, dct)
+        return newcls
 
 class NewDefaultValues(Packet_metaclass):
     """NewDefaultValues is deprecated (not needed anymore)
@@ -222,15 +245,12 @@ class NewDefaultValues(Packet_metaclass):
         return super(NewDefaultValues, cls).__new__(cls, name, bases, dct)
 
 class BasePacket(Gen):
-    pass
+    __slots__ = []
 
 
 #############################
 ## Packet list base classe ##
 #############################
 
-class BasePacketList:
-    pass
-
-
-
+class BasePacketList(object):
+    __slots__ = []
diff --git a/scapy/contrib/HomePlugAV.py b/scapy/contrib/HomePlugAV.py
index 20022c67593ea66e5db368b11ec3924d491a5f5b..54f962985e3693740b1d2a29de37527966317ef0 100644
--- a/scapy/contrib/HomePlugAV.py
+++ b/scapy/contrib/HomePlugAV.py
@@ -658,421 +658,422 @@ class ModulePIB(Packet):
             /!\ A wrong slice would produce 'bad' results
     """
     name = "ModulePIB"
+    __slots__ = ["_ModulePIB__offset", "_ModulePIB__length"]
+    fields_desc=[
+        ConditionalField(XByteField("FirmwareMajorVersion", 0x00),
+                         lambda pkt:(0x0 == pkt.__offset and 0x1 <= pkt.__offset+pkt.__length)), # The following conditional fiels just check if the current field fits in the data range
+        ConditionalField(XByteField("PIBMinorVersion", 0x00),
+                         lambda pkt:(0x1 >= pkt.__offset and 0x2 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XShortField("reserved_1" , 0x0000),
+                         lambda pkt:(0x2 >= pkt.__offset and 0x4 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XShortField("PIBLength" , 0x0000),
+                         lambda pkt:(0x4 >= pkt.__offset and 0x6 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XShortField("reserved_2" , 0x0000),
+                         lambda pkt:(0x6 >= pkt.__offset and 0x8 <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("checksumPIB", None),
+                         lambda pkt:(0x8 >= pkt.__offset and 0xC <= pkt.__offset+pkt.__length)),
+        ConditionalField(MACField("PIBMACAddr", "00:00:00:00:00:00"),
+                         lambda pkt:(0xC >= pkt.__offset and 0x12 <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("DAK",
+                                          "\x00"*16,
+                                          16),
+                         lambda pkt:(0x12 >= pkt.__offset and 0x22 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XShortField("reserved_3" , 0x0000),
+                         lambda pkt:(0x22 >= pkt.__offset and 0x24 <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("ManufactorID",
+                                          "\x00"*64,
+                                          64),
+                         lambda pkt:(0x24 >= pkt.__offset and 0x64 <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("NMK",
+                                          "\x00"*16,
+                                          16),
+                         lambda pkt:(0x64 >= pkt.__offset and 0x74 <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("UserID",
+                                          "\x00"*64,
+                                          64),
+                         lambda pkt:(0x74 >= pkt.__offset and 0xB4 <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("AVLN_ID",
+                                          "\x00"*64,
+                                          64),
+                         lambda pkt:(0xB4 >= pkt.__offset and 0xF4 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("CCoSelection", 0x00),
+                         lambda pkt:(0xF4 >= pkt.__offset and 0xF5 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("CoExistSelection", 0x00),
+                         lambda pkt:(0xF5 >= pkt.__offset and 0xF6 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("PLFreqSelection", 0x00),
+                         lambda pkt:(0xF6 >= pkt.__offset and 0xF7 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("H3CDowngradeShld", 0x00),
+                         lambda pkt:(0xF7 >= pkt.__offset and 0xF8 <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("PreferredNID",
+                                          "\x00"*7,
+                                          7),
+                         lambda pkt:(0xF8 >= pkt.__offset and 0xFF <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("AutoFWUpgradeable", 0x00),
+                         lambda pkt:(0xFF >= pkt.__offset and 0x100 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("MDUConfiguration", 0x00),
+                         lambda pkt:(0x100 >= pkt.__offset and 0x101 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("MDURole", 0x00),
+                         lambda pkt:(0x101 >= pkt.__offset and 0x102 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("SnifferEnabled", 0x00),
+                         lambda pkt:(0x102 >= pkt.__offset and 0x103 <= pkt.__offset+pkt.__length)),
+        ConditionalField(MACField("SnifferMACAddrRetrn", "00:00:00:00:00:00"),
+                         lambda pkt:(0x103 >= pkt.__offset and 0x109 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("WireTapEnable", 0x00),
+                         lambda pkt:(0x109 >= pkt.__offset and 0x10A <= pkt.__offset+pkt.__length)),
+        ConditionalField(XShortField("reserved_4" , 0x0000),
+                         lambda pkt:(0x10A >= pkt.__offset and 0x10C <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("StaticNetworkEnabled" , 0x00),
+                         lambda pkt:(0x10C >= pkt.__offset and 0x10D <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("LD_TEI" , 0x00),
+                         lambda pkt:(0x10D >= pkt.__offset and 0x10E <= pkt.__offset+pkt.__length)),
+        ConditionalField(MACField("CCo_MACAdd", "00:00:00:00:00:00"),
+                         lambda pkt:(0x10E >= pkt.__offset and 0x114 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("SNID", 0x00),
+                         lambda pkt:(0x114 >= pkt.__offset and 0x115 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("NumOfPeerNodes", 0x00),
+                         lambda pkt:(0x115 >= pkt.__offset and 0x116 <= pkt.__offset+pkt.__length)),
+        ConditionalField(PacketListField("PeerNodes", "", PeerNode, length_from=lambda x: 56),
+                         lambda pkt:(0x116 >= pkt.__offset and 0x11C <= pkt.__offset+pkt.__length)), 
+        ConditionalField(StrFixedLenField("reserved_5",
+                                          "\x00"*62,
+                                          62),
+                         lambda pkt:(0x146 >= pkt.__offset and 0x14e <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("OverideModeDefaults" , 0x00),
+                         lambda pkt:(0x18C >= pkt.__offset and 0x18D <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("DisableFlowControl" , 0x00),
+                         lambda pkt:(0x18D >= pkt.__offset and 0x18E <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("AdvertisementCapabilities" , 0x00),
+                         lambda pkt:(0x18E >= pkt.__offset and 0x18F <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("OverrideMeteringDefaults" , 0x00),
+                         lambda pkt:(0x18F >= pkt.__offset and 0x190 <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("MaxFramesPerSec" , 0),
+                         lambda pkt:(0x190 >= pkt.__offset and 0x194 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("DisableAutoNegotiation" , 0x00),
+                         lambda pkt:(0x194 >= pkt.__offset and 0x195 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("EnetSpeedSetting" , 0x00),
+                         lambda pkt:(0x195 >= pkt.__offset and 0x196 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("EnetDuplexSetting" , 0x00),
+                         lambda pkt:(0x196 >= pkt.__offset and 0x197 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("DisableTxFlowControl" , 0x00),
+                         lambda pkt:(0x197 >= pkt.__offset and 0x198 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("DisableRxFlowControl" , 0x00),
+                         lambda pkt:(0x198 >= pkt.__offset and 0x199 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("PhyAddressSelection" , 0x00),
+                         lambda pkt:(0x199 >= pkt.__offset and 0x19A <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("PhyAddressSelection_Data" , 0x00),
+                         lambda pkt:(0x19A >= pkt.__offset and 0x19B <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("reserved_6" , 0x00),
+                         lambda pkt:(0x19B >= pkt.__offset and 0x19C <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("Force33MHz" , 0x00),
+                         lambda pkt:(0x19C >= pkt.__offset and 0x19D <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("LinkStatusOnPowerline" , 0x00),
+                         lambda pkt:(0x19D >= pkt.__offset and 0x19E <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("OverrideIdDefaults" , 0x00),
+                         lambda pkt:(0x19E >= pkt.__offset and 0x19F <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("OverrideSubIdDefaults" , 0x00),
+                         lambda pkt:(0x19F >= pkt.__offset and 0x1A0 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XShortField("PCIDeviceID" , 0x0000),
+                         lambda pkt:(0x1A0 >= pkt.__offset and 0x1A2 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XShortField("PCIVendorID" , 0x0000),
+                         lambda pkt:(0x1A2 >= pkt.__offset and 0x1A4 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("reserved_7" , 0x00),
+                         lambda pkt:(0x1A4 >= pkt.__offset and 0x1A5 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("PCIClassCode" , 0x00),
+                         lambda pkt:(0x1A5 >= pkt.__offset and 0x1A6 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("PCIClassCodeSubClass" , 0x00),
+                         lambda pkt:(0x1A6 >= pkt.__offset and 0x1A7 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("PCIRevisionID" , 0x00),
+                         lambda pkt:(0x1A7 >= pkt.__offset and 0x1A8 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XShortField("PCISubsystemID" , 0x0000),
+                         lambda pkt:(0x1A8 >= pkt.__offset and 0x1AA <= pkt.__offset+pkt.__length)),
+        ConditionalField(XShortField("PCISybsystemVendorID" , 0x0000),
+                         lambda pkt:(0x1AA >= pkt.__offset and 0x1AC <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("reserved_8",
+                                          "\x00"*64,
+                                          64),
+                         lambda pkt:(0x1AC >= pkt.__offset and 0x1EC <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("OverrideIGMPDefaults" , 0x00),
+                         lambda pkt:(0x1EC >= pkt.__offset and 0x1ED <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("ConfigFlags" , 0x00),
+                         lambda pkt:(0x1ED >= pkt.__offset and 0x1EE <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("NumCpToSend_PLFrames" , 0x00),
+                         lambda pkt:(0x1EE >= pkt.__offset and 0x1EF <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("reserved_9",
+                                          "\x00"*29,
+                                          29),
+                         lambda pkt:(0x1EF >= pkt.__offset and 0x20C <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("UniCastPriority" , 0x00),
+                         lambda pkt:(0x20C >= pkt.__offset and 0x20D <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("McastPriority" , 0x00),
+                         lambda pkt:(0x20D >= pkt.__offset and 0x20E <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("IGMPPriority" , 0x00),
+                         lambda pkt:(0x20E >= pkt.__offset and 0x20F <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("AVStreamPriority" , 0x00),
+                         lambda pkt:(0x20F >= pkt.__offset and 0x210 <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("PriorityTTL_0" , 0),
+                         lambda pkt:(0x210 >= pkt.__offset and 0x214 <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("PriorityTTL_1" , 0),
+                         lambda pkt:(0x214 >= pkt.__offset and 0x218 <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("PriorityTTL_2" , 0),
+                         lambda pkt:(0x218 >= pkt.__offset and 0x21C <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("PriorityTTL_3" , 0),
+                         lambda pkt:(0x21C >= pkt.__offset and 0x220 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("EnableVLANOver" , 0x00),
+                         lambda pkt:(0x220 >= pkt.__offset and 0x221 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("EnableTOSOver" , 0x00),
+                         lambda pkt:(0x221 >= pkt.__offset and 0x222 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XShortField("reserved_10" , 0x0000),
+                         lambda pkt:(0x222 >= pkt.__offset and 0x224 <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("VLANPrioTOSPrecMatrix" , 0),
+                         lambda pkt:(0x224 >= pkt.__offset and 0x228 <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("NumClassifierPriorityMaps" , 0),
+                         lambda pkt:(0x228 >= pkt.__offset and 0x22C <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("NumAutoConnections" , 0),
+                         lambda pkt:(0x22C >= pkt.__offset and 0x230 <= pkt.__offset+pkt.__length)), 
+        ConditionalField(PacketListField("ClassifierPriorityMaps", "", ClassifierPriorityMap, length_from=lambda x: 224),
+                         lambda pkt:(0x230 >= pkt.__offset and 0x244 <= pkt.__offset+pkt.__length)),
+        ConditionalField(PacketListField("AutoConnections", "", AutoConnection, length_from=lambda x: 1600),
+                         lambda pkt:(0x310 >= pkt.__offset and 0x36e <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("NumberOfConfigEntries" , 0x00),
+                         lambda pkt:(0x950 >= pkt.__offset and 0x951 <= pkt.__offset+pkt.__length)),
+        ConditionalField(PacketListField("AggregateConfigEntries", "", AggregateConfigEntrie, length_from=lambda x: 16),
+                         lambda pkt:(0x951 >= pkt.__offset and 0x961 <= pkt.__offset+pkt.__length)),
+        ConditionalField(PacketListField("RSVD_CustomAggregationParameters", "", RSVD_CustomAggregationParameter, length_from=lambda x: 48),
+                         lambda pkt:(0x961 >= pkt.__offset and 0x991 <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("reserved_11",
+                                          "\x00"*123,
+                                          123),
+                         lambda pkt:(0x991 >= pkt.__offset and 0xA0C <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("ToneMaskType" , 0),
+                         lambda pkt:(0xA0C >= pkt.__offset and 0xA10 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("ToneMaskEnabled" , 0),
+                         lambda pkt:(0xA10 >= pkt.__offset and 0xA14 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("StartTone" , 0),
+                         lambda pkt:(0xA14 >= pkt.__offset and 0xA18 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("EndTone" , 0),
+                         lambda pkt:(0xA18 >= pkt.__offset and 0xA1C <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("reserved_12",
+                                          "\x00"*12,
+                                          12),
+                         lambda pkt:(0xA1C >= pkt.__offset and 0xA28 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("PsdIndex" , 0),
+                         lambda pkt:(0xA28 >= pkt.__offset and 0xA2C <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("TxPrescalerType" , 0),
+                         lambda pkt:(0xA2C >= pkt.__offset and 0xA30 <= pkt.__offset+pkt.__length)),
+        ConditionalField(PacketListField("PrescalerValues", "", PrescalerValue, length_from=lambda x: 3600),
+                         lambda pkt:(0xA30 >= pkt.__offset and 0xA34 <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("reserved_13",
+                                          "\x00"*1484,
+                                          1484),
+                         lambda pkt:(0x1840 >= pkt.__offset and 0x1E0C <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("AllowNEKRotation" , 0),
+                         lambda pkt:(0x1E0C >= pkt.__offset and 0x1E10 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("OverrideLocalNEK" , 0),
+                         lambda pkt:(0x1E10 >= pkt.__offset and 0x1E14 <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("LocalNEKToUse",
+                                          "\x00"*16,
+                                          16),
+                         lambda pkt:(0x1E14 >= pkt.__offset and 0x1E24 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("OverrideNEKRotationTimer" , 0),
+                         lambda pkt:(0x1E24 >= pkt.__offset and 0x1E28 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("NEKRotationTime_Min" , 0),
+                         lambda pkt:(0x1E28 >= pkt.__offset and 0x1E2C <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("reserved_14",
+                                          "\x00"*96,
+                                          96),
+                         lambda pkt:(0x1E2C >= pkt.__offset and 0x1E8C <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("AVLNMembership" , 0),
+                         lambda pkt:(0x1E8C >= pkt.__offset and 0x1E90 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("SimpleConnectTimeout" , 0),
+                         lambda pkt:(0x1E90 >= pkt.__offset and 0x1E94 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("EnableLEDThroughputIndicate" , 0),
+                         lambda pkt:(0x1E94 >= pkt.__offset and 0x1E95 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("MidLEDThroughputThreshold_Mbps" , 0),
+                         lambda pkt:(0x1E95 >= pkt.__offset and 0x1E96 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("HighLEDThroughputThreshold_Mbps" , 0),
+                         lambda pkt:(0x1E96 >= pkt.__offset and 0x1E97 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("reserved_15" , 0),
+                         lambda pkt:(0x1E97 >= pkt.__offset and 0x1E98 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("EnableUnicastQuieriesToMember" , 0),
+                         lambda pkt:(0x1E98 >= pkt.__offset and 0x1E99 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("DisableMLDGroupIDCheckInMAC" , 0),
+                         lambda pkt:(0x1E99 >= pkt.__offset and 0x1E9A <= pkt.__offset+pkt.__length)),
+        ConditionalField(XShortField("EnableReportsToNonQuerierHosts" , 0),
+                         lambda pkt:(0x1E9A >= pkt.__offset and 0x1E9C <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("DisableExpireGroupMembershipInterval" , 0),
+                         lambda pkt:(0x1E9C >= pkt.__offset and 0x1EA0 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("DisableLEDTestLights" , 0),
+                         lambda pkt:(0x1EA0 >= pkt.__offset and 0x1EA4 <= pkt.__offset+pkt.__length)),
+        ConditionalField(PacketListField("GPIOMaps", "", GPIOMap, length_from=lambda x: 12),
+                         lambda pkt:(0x1EA4 >= pkt.__offset and 0x1EB0 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XLongField("reserved_16" , 0),
+                         lambda pkt:(0x1EB0 >= pkt.__offset and 0x1EB8 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("EnableTrafficClass_DSCPOver" , 0),
+                         lambda pkt:(0x1EB8 >= pkt.__offset and 0x1EB9 <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("TrafficClass_DSCPMatrices",
+                                          "\x00"*64,
+                                          64),
+                         lambda pkt:(0x1EB9 >= pkt.__offset and 0x1EF9 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("GPIOControl" , 0),
+                         lambda pkt:(0x1EF9 >= pkt.__offset and 0x1EFA <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("LEDControl",
+                                          "\x00"*32,
+                                          32),
+                         lambda pkt:(0x1EFA >= pkt.__offset and 0x1F1A <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("OverrideMinButtonPressHoldTime" , 0),
+                         lambda pkt:(0x1F1A >= pkt.__offset and 0x1F1E <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("MinButtonPressHoldTime" , 0),
+                         lambda pkt:(0x1F1E >= pkt.__offset and 0x1F22 <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("reserved_17",
+                                          "\x00"*22,
+                                          22),
+                         lambda pkt:(0x1F22 >= pkt.__offset and 0x1F38 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("MemoryProfile" , 0),
+                         lambda pkt:(0x1F38 >= pkt.__offset and 0x1F3C <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("DisableAllLEDFlashOnWarmReboot" , 0),
+                         lambda pkt:(0x1F3C >= pkt.__offset and 0x1F40 <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("UplinkLimit_bps" , 0),
+                         lambda pkt:(0x1F40 >= pkt.__offset and 0x1F44 <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("DownlinkLimit_bps" , 0),
+                         lambda pkt:(0x1F44 >= pkt.__offset and 0x1F48 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("MDUStaticSNID" , 0),
+                         lambda pkt:(0x1F48 >= pkt.__offset and 0x1F4C <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("MitigateEnabled" , 0),
+                         lambda pkt:(0x1F4C >= pkt.__offset and 0x1F4D <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("CorrelThreshold" , 0),
+                         lambda pkt:(0x1F4D >= pkt.__offset and 0x1F51 <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("ScaledTxGain" , 0),
+                         lambda pkt:(0x1F51 >= pkt.__offset and 0x1F55 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("ResourceThresholdEnabled" , 0),
+                         lambda pkt:(0x1F55 >= pkt.__offset and 0x1F56 <= pkt.__offset+pkt.__length)),
+        ConditionalField(PacketListField("ReservedPercentageForCaps", "", ReservedPercentageForCap, length_from=lambda x: 4),
+                         lambda pkt:(0x1F56 >= pkt.__offset and 0x1F5A <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("PowerSavingMode" , 0),
+                         lambda pkt:(0x1F5A >= pkt.__offset and 0x1F5B <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("PowerLEDDutyCycle" , 0),
+                         lambda pkt:(0x1F5B >= pkt.__offset and 0x1F5C <= pkt.__offset+pkt.__length)),
+        ConditionalField(XShortField("reserved_18" , 0),
+                         lambda pkt:(0x1F5C >= pkt.__offset and 0x1F5E <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("LinkUpDurationBeforeReset_ms" , 0),
+                         lambda pkt:(0x1F5E >= pkt.__offset and 0x1F62 <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("PowerLEDPeriod_ms" , 0),
+                         lambda pkt:(0x1F62 >= pkt.__offset and 0x1F66 <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("LinkDownDurationBeforeLowPowerMode_ms" , 0),
+                         lambda pkt:(0x1F66 >= pkt.__offset and 0x1F6A <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("reserved_19" , 0),
+                         lambda pkt:(0x1F6A >= pkt.__offset and 0x1F6E <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("AfeGainBusMode" , 0),
+                         lambda pkt:(0x1F6E >= pkt.__offset and 0x1F6F <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("EnableDynamicPsd" , 0),
+                         lambda pkt:(0x1F6F >= pkt.__offset and 0x1F70 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("ReservedPercentageForTxStreams" , 0),
+                         lambda pkt:(0x1F70 >= pkt.__offset and 0x1F71 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("ReservedPercentageForRxStreams" , 0),
+                         lambda pkt:(0x1F71 >= pkt.__offset and 0x1F72 <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("reserved_20",
+                                          "\x00"*22,
+                                          22),
+                         lambda pkt:(0x1F72 >= pkt.__offset and 0x1F88 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("LegacyNetworkUpgradeEnable" , 0),
+                         lambda pkt:(0x1F88 >= pkt.__offset and 0x1F8C <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("unknown" , 0),
+                         lambda pkt:(0x1F8C >= pkt.__offset and 0x1F90 <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("MMETTL_us" , 0),
+                         lambda pkt:(0x1F90 >= pkt.__offset and 0x1F94 <= pkt.__offset+pkt.__length)),
+        ConditionalField(PacketListField("ConfigBits", "", ConfigBit, length_from=lambda x: 2),
+                         lambda pkt:(0x1F94 >= pkt.__offset and 0x1F96 <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("TxToneMapExpiry_ms" , 0),
+                         lambda pkt:(0x1F96 >= pkt.__offset and 0x1F9A <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("RxToneMapExpiry_ms" , 0),
+                         lambda pkt:(0x1F9A >= pkt.__offset and 0x1F9E <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("TimeoutToResound_ms" , 0),
+                         lambda pkt:(0x1F9E >= pkt.__offset and 0x1FA2 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("MissingSackThresholdForUnplugDetection" , 0),
+                         lambda pkt:(0x1FA2 >= pkt.__offset and 0x1FA6 <= pkt.__offset+pkt.__length)),
+        ConditionalField(LEIntField("UnplugTimeout_ms" , 0),
+                         lambda pkt:(0x1FA6 >= pkt.__offset and 0x1FAA <= pkt.__offset+pkt.__length)),
+        ConditionalField(PacketListField("ContentionWindowTableES", "", ContentionWindowTable, length_from=lambda x: 8),
+                         lambda pkt:(0x1FAA >= pkt.__offset and 0x1FB2 <= pkt.__offset+pkt.__length)),
+        ConditionalField(PacketListField("BackoffDeferalCountTableES", "", BackoffDeferalCountTable, length_from=lambda x: 4),
+                         lambda pkt:(0x1FB2 >= pkt.__offset and 0x1FB6 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("GoodSoundCountThreshold" , 0),
+                         lambda pkt:(0x1FB6 >= pkt.__offset and 0x1FB7 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("SoundCountThreshold_GoodSoundCountPass" , 0),
+                         lambda pkt:(0x1FB7 >= pkt.__offset and 0x1FB8 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("SoundCountThreshold_GoodSoundCountFail" , 0),
+                         lambda pkt:(0x1FB8 >= pkt.__offset and 0x1FB9 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XShortField("reserved_21" , 0),
+                         lambda pkt:(0x1FB9 >= pkt.__offset and 0x1FBB <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("ExclusiveTxPbs_percentage" , 0),
+                         lambda pkt:(0x1FBB >= pkt.__offset and 0x1FBC <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("ExclusiveRxPbs_percentage" , 0),
+                         lambda pkt:(0x1FBC >= pkt.__offset and 0x1FBD <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("OptimizationBackwardCompatible" , 0),
+                         lambda pkt:(0x1FBD >= pkt.__offset and 0x1FBE <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("reserved_21" , 0),
+                         lambda pkt:(0x1FBE >= pkt.__offset and 0x1FBF <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("MaxPbsPerSymbol" , 0),
+                         lambda pkt:(0x1FBF >= pkt.__offset and 0x1FC0 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("MaxModulation" , 0),
+                         lambda pkt:(0x1FC0 >= pkt.__offset and 0x1FC1 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("ContinuousRx" , 0),
+                         lambda pkt:(0x1FC1 >= pkt.__offset and 0x1FC2 <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("reserved_22",
+                                          "\x00"*6,
+                                          6),
+                         lambda pkt:(0x1FC2 >= pkt.__offset and 0x1FC8 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("PBControlStatus" , 0),
+                         lambda pkt:(0x1FC8 >= pkt.__offset and 0x1FC9 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("STAMembershipMaskEnabled" , 0),
+                         lambda pkt:(0x1FC9 >= pkt.__offset and 0x1FCA <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("ExitDefaultEnabled" , 0),
+                         lambda pkt:(0x1FCA >= pkt.__offset and 0x1FCB <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("RejectDefaultEnabled" , 0),
+                         lambda pkt:(0x1FCB >= pkt.__offset and 0x1FCC <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("ChainingEnabled" , 0),
+                         lambda pkt:(0x1FCC >= pkt.__offset and 0x1FCD <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("VendorSpecificNMK",
+                                          "\x00"*16,
+                                          16),
+                         lambda pkt:(0x1FCD >= pkt.__offset and 0x1FDD <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("LocalMACAddressLimit" , 0),
+                         lambda pkt:(0x1FDD >= pkt.__offset and 0x1FDE <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("OverrideBridgeTableAgingTime" , 0),
+                         lambda pkt:(0x1FDE >= pkt.__offset and 0x1FDF <= pkt.__offset+pkt.__length)),
+        ConditionalField(XShortField("LocalBridgeTableAgingTime_min" , 0),
+                         lambda pkt:(0x1FDF >= pkt.__offset and 0x1FE1 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XShortField("RemoteBridgeTableAgingTime_min" , 0),
+                         lambda pkt:(0x1FE1 >= pkt.__offset and 0x1FE3 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("PhySyncReference" , 0),
+                         lambda pkt:(0x1FE3 >= pkt.__offset and 0x1FE7 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("reserved_23" , 0),
+                         lambda pkt:(0x1FE7 >= pkt.__offset and 0x1FE8 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("reserved_24" , 0),
+                         lambda pkt:(0x1FE8 >= pkt.__offset and 0x1FEC <= pkt.__offset+pkt.__length)),
+        ConditionalField(XIntField("reserved_25" , 0),
+                         lambda pkt:(0x1FEC >= pkt.__offset and 0x1FF0 <= pkt.__offset+pkt.__length)),
+        ConditionalField(StrFixedLenField("reserved_26",
+                                          "\x00"*24,
+                                          24),
+                         lambda pkt:(0x1FF0 >= pkt.__offset and 0x2008 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("OverrideDefaultLedEventBehavior" , 0x80),
+                         lambda pkt:(0x2008 >= pkt.__offset and 0x2009 <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("ReportToHostInfo" , 0),
+                         lambda pkt:(0x2009 >= pkt.__offset and 0x200A <= pkt.__offset+pkt.__length)),
+        ConditionalField(X3BytesField("reserved_27" , 0),
+                         lambda pkt:(0x200A >= pkt.__offset and 0x200D <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("NumBehaviors" , 0),
+                         lambda pkt:(0x200D >= pkt.__offset and 0x200E <= pkt.__offset+pkt.__length)),
+        ConditionalField(PacketListField("BehaviorBlockArrayES", "", BehaviorBlockArray, length_from=lambda x: 1200),
+                         lambda pkt:(0x200E >= pkt.__offset and 0x24BE <= pkt.__offset+pkt.__length)),
+        ConditionalField(XByteField("NumEvents" , 0),
+                         lambda pkt:(0x24BE >= pkt.__offset and 0x24BF <= pkt.__offset+pkt.__length)),
+        ConditionalField(PacketListField("EventBlockArrayES", "", EventBlockArray, length_from=lambda x: 550),
+                         lambda pkt:(0x24BF >= pkt.__offset and 0x26E5 <= pkt.__offset+pkt.__length)),
+    ]
     def __init__(self, packet="", offset = 0x0, length = 0x400):
         self.__offset = offset
         self.__length = length
-        self.fields_desc=[ ConditionalField( XByteField("FirmwareMajorVersion", 0x00),
-                        lambda pkt:(0x0 == self.__offset and 0x1 <= self.__offset+self.__length) ), # The following conditional fiels just check if the current field fits in the data range
-                  ConditionalField( XByteField("PIBMinorVersion", 0x00),
-                        lambda pkt:(0x1 >= self.__offset and 0x2 <= self.__offset+self.__length) ),
-                  ConditionalField( XShortField("reserved_1" , 0x0000),
-                        lambda pkt:(0x2 >= self.__offset and 0x4 <= self.__offset+self.__length) ),
-                  ConditionalField( XShortField("PIBLength" , 0x0000),
-                        lambda pkt:(0x4 >= self.__offset and 0x6 <= self.__offset+self.__length) ),
-                  ConditionalField( XShortField("reserved_2" , 0x0000),
-                        lambda pkt:(0x6 >= self.__offset and 0x8 <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("checksumPIB", None),
-                        lambda pkt:(0x8 >= self.__offset and 0xC <= self.__offset+self.__length) ),
-                  ConditionalField( MACField("PIBMACAddr", "00:00:00:00:00:00"),
-                        lambda pkt:(0xC >= self.__offset and 0x12 <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("DAK",
-                                "\x00"*16,
-                                16),
-                        lambda pkt:(0x12 >= self.__offset and 0x22 <= self.__offset+self.__length) ),
-                  ConditionalField( XShortField("reserved_3" , 0x0000),
-                        lambda pkt:(0x22 >= self.__offset and 0x24 <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("ManufactorID",
-                                "\x00"*64,
-                                64),
-                        lambda pkt:(0x24 >= self.__offset and 0x64 <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("NMK",
-                                "\x00"*16,
-                                16),
-                        lambda pkt:(0x64 >= self.__offset and 0x74 <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("UserID",
-                                "\x00"*64,
-                                64),
-                        lambda pkt:(0x74 >= self.__offset and 0xB4 <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("AVLN_ID",
-                                "\x00"*64,
-                                64),
-                        lambda pkt:(0xB4 >= self.__offset and 0xF4 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("CCoSelection", 0x00),
-                        lambda pkt:(0xF4 >= self.__offset and 0xF5 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("CoExistSelection", 0x00),
-                        lambda pkt:(0xF5 >= self.__offset and 0xF6 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("PLFreqSelection", 0x00),
-                        lambda pkt:(0xF6 >= self.__offset and 0xF7 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("H3CDowngradeShld", 0x00),
-                        lambda pkt:(0xF7 >= self.__offset and 0xF8 <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("PreferredNID",
-                                "\x00"*7,
-                                7),
-                        lambda pkt:(0xF8 >= self.__offset and 0xFF <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("AutoFWUpgradeable", 0x00),
-                        lambda pkt:(0xFF >= self.__offset and 0x100 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("MDUConfiguration", 0x00),
-                        lambda pkt:(0x100 >= self.__offset and 0x101 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("MDURole", 0x00),
-                        lambda pkt:(0x101 >= self.__offset and 0x102 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("SnifferEnabled", 0x00),
-                        lambda pkt:(0x102 >= self.__offset and 0x103 <= self.__offset+self.__length) ),
-                  ConditionalField( MACField("SnifferMACAddrRetrn", "00:00:00:00:00:00"),
-                        lambda pkt:(0x103 >= self.__offset and 0x109 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("WireTapEnable", 0x00),
-                        lambda pkt:(0x109 >= self.__offset and 0x10A <= self.__offset+self.__length) ),
-                  ConditionalField( XShortField("reserved_4" , 0x0000),
-                        lambda pkt:(0x10A >= self.__offset and 0x10C <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("StaticNetworkEnabled" , 0x00),
-                        lambda pkt:(0x10C >= self.__offset and 0x10D <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("LD_TEI" , 0x00),
-                        lambda pkt:(0x10D >= self.__offset and 0x10E <= self.__offset+self.__length) ),
-                  ConditionalField( MACField("CCo_MACAdd", "00:00:00:00:00:00"),
-                        lambda pkt:(0x10E >= self.__offset and 0x114 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("SNID", 0x00),
-                        lambda pkt:(0x114 >= self.__offset and 0x115 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("NumOfPeerNodes", 0x00),
-                        lambda pkt:(0x115 >= self.__offset and 0x116 <= self.__offset+self.__length) ),
-                  ConditionalField( PacketListField("PeerNodes", "", PeerNode, length_from=lambda x: 56),
-                        lambda pkt:(0x116 >= self.__offset and 0x11C <= self.__offset+self.__length) ), 
-                  ConditionalField( StrFixedLenField("reserved_5",
-                                "\x00"*62,
-                                62),
-                        lambda pkt:(0x146 >= self.__offset and 0x14e <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("OverideModeDefaults" , 0x00),
-                        lambda pkt:(0x18C >= self.__offset and 0x18D <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("DisableFlowControl" , 0x00),
-                        lambda pkt:(0x18D >= self.__offset and 0x18E <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("AdvertisementCapabilities" , 0x00),
-                        lambda pkt:(0x18E >= self.__offset and 0x18F <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("OverrideMeteringDefaults" , 0x00),
-                        lambda pkt:(0x18F >= self.__offset and 0x190 <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("MaxFramesPerSec" , 0),
-                        lambda pkt:(0x190 >= self.__offset and 0x194 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("DisableAutoNegotiation" , 0x00),
-                        lambda pkt:(0x194 >= self.__offset and 0x195 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("EnetSpeedSetting" , 0x00),
-                        lambda pkt:(0x195 >= self.__offset and 0x196 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("EnetDuplexSetting" , 0x00),
-                        lambda pkt:(0x196 >= self.__offset and 0x197 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("DisableTxFlowControl" , 0x00),
-                        lambda pkt:(0x197 >= self.__offset and 0x198 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("DisableRxFlowControl" , 0x00),
-                        lambda pkt:(0x198 >= self.__offset and 0x199 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("PhyAddressSelection" , 0x00),
-                        lambda pkt:(0x199 >= self.__offset and 0x19A <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("PhyAddressSelection_Data" , 0x00),
-                        lambda pkt:(0x19A >= self.__offset and 0x19B <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("reserved_6" , 0x00),
-                        lambda pkt:(0x19B >= self.__offset and 0x19C <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("Force33MHz" , 0x00),
-                        lambda pkt:(0x19C >= self.__offset and 0x19D <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("LinkStatusOnPowerline" , 0x00),
-                        lambda pkt:(0x19D >= self.__offset and 0x19E <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("OverrideIdDefaults" , 0x00),
-                        lambda pkt:(0x19E >= self.__offset and 0x19F <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("OverrideSubIdDefaults" , 0x00),
-                        lambda pkt:(0x19F >= self.__offset and 0x1A0 <= self.__offset+self.__length) ),
-                  ConditionalField( XShortField("PCIDeviceID" , 0x0000),
-                        lambda pkt:(0x1A0 >= self.__offset and 0x1A2 <= self.__offset+self.__length) ),
-                  ConditionalField( XShortField("PCIVendorID" , 0x0000),
-                        lambda pkt:(0x1A2 >= self.__offset and 0x1A4 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("reserved_7" , 0x00),
-                        lambda pkt:(0x1A4 >= self.__offset and 0x1A5 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("PCIClassCode" , 0x00),
-                        lambda pkt:(0x1A5 >= self.__offset and 0x1A6 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("PCIClassCodeSubClass" , 0x00),
-                        lambda pkt:(0x1A6 >= self.__offset and 0x1A7 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("PCIRevisionID" , 0x00),
-                        lambda pkt:(0x1A7 >= self.__offset and 0x1A8 <= self.__offset+self.__length) ),
-                  ConditionalField( XShortField("PCISubsystemID" , 0x0000),
-                        lambda pkt:(0x1A8 >= self.__offset and 0x1AA <= self.__offset+self.__length) ),
-                  ConditionalField( XShortField("PCISybsystemVendorID" , 0x0000),
-                        lambda pkt:(0x1AA >= self.__offset and 0x1AC <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("reserved_8",
-                                "\x00"*64,
-                                64),
-                        lambda pkt:(0x1AC >= self.__offset and 0x1EC <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("OverrideIGMPDefaults" , 0x00),
-                        lambda pkt:(0x1EC >= self.__offset and 0x1ED <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("ConfigFlags" , 0x00),
-                        lambda pkt:(0x1ED >= self.__offset and 0x1EE <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("NumCpToSend_PLFrames" , 0x00),
-                        lambda pkt:(0x1EE >= self.__offset and 0x1EF <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("reserved_9",
-                                "\x00"*29,
-                                29),
-                        lambda pkt:(0x1EF >= self.__offset and 0x20C <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("UniCastPriority" , 0x00),
-                        lambda pkt:(0x20C >= self.__offset and 0x20D <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("McastPriority" , 0x00),
-                        lambda pkt:(0x20D >= self.__offset and 0x20E <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("IGMPPriority" , 0x00),
-                        lambda pkt:(0x20E >= self.__offset and 0x20F <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("AVStreamPriority" , 0x00),
-                        lambda pkt:(0x20F >= self.__offset and 0x210 <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("PriorityTTL_0" , 0),
-                        lambda pkt:(0x210 >= self.__offset and 0x214 <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("PriorityTTL_1" , 0),
-                        lambda pkt:(0x214 >= self.__offset and 0x218 <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("PriorityTTL_2" , 0),
-                        lambda pkt:(0x218 >= self.__offset and 0x21C <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("PriorityTTL_3" , 0),
-                        lambda pkt:(0x21C >= self.__offset and 0x220 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("EnableVLANOver" , 0x00),
-                        lambda pkt:(0x220 >= self.__offset and 0x221 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("EnableTOSOver" , 0x00),
-                        lambda pkt:(0x221 >= self.__offset and 0x222 <= self.__offset+self.__length) ),
-                  ConditionalField( XShortField("reserved_10" , 0x0000),
-                        lambda pkt:(0x222 >= self.__offset and 0x224 <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("VLANPrioTOSPrecMatrix" , 0),
-                        lambda pkt:(0x224 >= self.__offset and 0x228 <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("NumClassifierPriorityMaps" , 0),
-                        lambda pkt:(0x228 >= self.__offset and 0x22C <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("NumAutoConnections" , 0),
-                        lambda pkt:(0x22C >= self.__offset and 0x230 <= self.__offset+self.__length) ), 
-                  ConditionalField( PacketListField("ClassifierPriorityMaps", "", ClassifierPriorityMap, length_from=lambda x: 224),
-                        lambda pkt:(0x230 >= self.__offset and 0x244 <= self.__offset+self.__length) ),
-                  ConditionalField( PacketListField("AutoConnections", "", AutoConnection, length_from=lambda x: 1600),
-                        lambda pkt:(0x310 >= self.__offset and 0x36e <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("NumberOfConfigEntries" , 0x00),
-                        lambda pkt:(0x950 >= self.__offset and 0x951 <= self.__offset+self.__length) ),
-                  ConditionalField( PacketListField("AggregateConfigEntries", "", AggregateConfigEntrie, length_from=lambda x: 16),
-                        lambda pkt:(0x951 >= self.__offset and 0x961 <= self.__offset+self.__length) ),
-                  ConditionalField( PacketListField("RSVD_CustomAggregationParameters", "", RSVD_CustomAggregationParameter, length_from=lambda x: 48),
-                        lambda pkt:(0x961 >= self.__offset and 0x991 <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("reserved_11",
-                                "\x00"*123,
-                                123),
-                        lambda pkt:(0x991 >= self.__offset and 0xA0C <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("ToneMaskType" , 0),
-                        lambda pkt:(0xA0C >= self.__offset and 0xA10 <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("ToneMaskEnabled" , 0),
-                        lambda pkt:(0xA10 >= self.__offset and 0xA14 <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("StartTone" , 0),
-                        lambda pkt:(0xA14 >= self.__offset and 0xA18 <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("EndTone" , 0),
-                        lambda pkt:(0xA18 >= self.__offset and 0xA1C <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("reserved_12",
-                                "\x00"*12,
-                                12),
-                        lambda pkt:(0xA1C >= self.__offset and 0xA28 <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("PsdIndex" , 0),
-                        lambda pkt:(0xA28 >= self.__offset and 0xA2C <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("TxPrescalerType" , 0),
-                        lambda pkt:(0xA2C >= self.__offset and 0xA30 <= self.__offset+self.__length) ),
-                  ConditionalField( PacketListField("PrescalerValues", "", PrescalerValue, length_from=lambda x: 3600),
-                        lambda pkt:(0xA30 >= self.__offset and 0xA34 <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("reserved_13",
-                                "\x00"*1484,
-                                1484),
-                        lambda pkt:(0x1840 >= self.__offset and 0x1E0C <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("AllowNEKRotation" , 0),
-                        lambda pkt:(0x1E0C >= self.__offset and 0x1E10 <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("OverrideLocalNEK" , 0),
-                        lambda pkt:(0x1E10 >= self.__offset and 0x1E14 <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("LocalNEKToUse",
-                                "\x00"*16,
-                                16),
-                        lambda pkt:(0x1E14 >= self.__offset and 0x1E24 <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("OverrideNEKRotationTimer" , 0),
-                        lambda pkt:(0x1E24 >= self.__offset and 0x1E28 <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("NEKRotationTime_Min" , 0),
-                        lambda pkt:(0x1E28 >= self.__offset and 0x1E2C <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("reserved_14",
-                                "\x00"*96,
-                                96),
-                        lambda pkt:(0x1E2C >= self.__offset and 0x1E8C <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("AVLNMembership" , 0),
-                        lambda pkt:(0x1E8C >= self.__offset and 0x1E90 <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("SimpleConnectTimeout" , 0),
-                        lambda pkt:(0x1E90 >= self.__offset and 0x1E94 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("EnableLEDThroughputIndicate" , 0),
-                        lambda pkt:(0x1E94 >= self.__offset and 0x1E95 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("MidLEDThroughputThreshold_Mbps" , 0),
-                        lambda pkt:(0x1E95 >= self.__offset and 0x1E96 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("HighLEDThroughputThreshold_Mbps" , 0),
-                        lambda pkt:(0x1E96 >= self.__offset and 0x1E97 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("reserved_15" , 0),
-                        lambda pkt:(0x1E97 >= self.__offset and 0x1E98 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("EnableUnicastQuieriesToMember" , 0),
-                        lambda pkt:(0x1E98 >= self.__offset and 0x1E99 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("DisableMLDGroupIDCheckInMAC" , 0),          
-                        lambda pkt:(0x1E99 >= self.__offset and 0x1E9A <= self.__offset+self.__length) ),
-                  ConditionalField( XShortField("EnableReportsToNonQuerierHosts" , 0),
-                        lambda pkt:(0x1E9A >= self.__offset and 0x1E9C <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("DisableExpireGroupMembershipInterval" , 0),
-                        lambda pkt:(0x1E9C >= self.__offset and 0x1EA0 <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("DisableLEDTestLights" , 0),
-                        lambda pkt:(0x1EA0 >= self.__offset and 0x1EA4 <= self.__offset+self.__length) ),
-                  ConditionalField( PacketListField("GPIOMaps", "", GPIOMap, length_from=lambda x: 12),
-                        lambda pkt:(0x1EA4 >= self.__offset and 0x1EB0 <= self.__offset+self.__length) ),
-                  ConditionalField( XLongField("reserved_16" , 0),
-                        lambda pkt:(0x1EB0 >= self.__offset and 0x1EB8 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("EnableTrafficClass_DSCPOver" , 0),
-                        lambda pkt:(0x1EB8 >= self.__offset and 0x1EB9 <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("TrafficClass_DSCPMatrices",
-                                "\x00"*64,
-                                64),
-                        lambda pkt:(0x1EB9 >= self.__offset and 0x1EF9 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("GPIOControl" , 0),
-                        lambda pkt:(0x1EF9 >= self.__offset and 0x1EFA <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("LEDControl",
-                                "\x00"*32,
-                                32),
-                        lambda pkt:(0x1EFA >= self.__offset and 0x1F1A <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("OverrideMinButtonPressHoldTime" , 0),
-                        lambda pkt:(0x1F1A >= self.__offset and 0x1F1E <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("MinButtonPressHoldTime" , 0),
-                        lambda pkt:(0x1F1E >= self.__offset and 0x1F22 <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("reserved_17",
-                                "\x00"*22,
-                                22),
-                        lambda pkt:(0x1F22 >= self.__offset and 0x1F38 <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("MemoryProfile" , 0),
-                        lambda pkt:(0x1F38 >= self.__offset and 0x1F3C <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("DisableAllLEDFlashOnWarmReboot" , 0),
-                        lambda pkt:(0x1F3C >= self.__offset and 0x1F40 <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("UplinkLimit_bps" , 0),
-                        lambda pkt:(0x1F40 >= self.__offset and 0x1F44 <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("DownlinkLimit_bps" , 0),
-                        lambda pkt:(0x1F44 >= self.__offset and 0x1F48 <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("MDUStaticSNID" , 0),
-                        lambda pkt:(0x1F48 >= self.__offset and 0x1F4C <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("MitigateEnabled" , 0),
-                        lambda pkt:(0x1F4C >= self.__offset and 0x1F4D <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("CorrelThreshold" , 0),
-                        lambda pkt:(0x1F4D >= self.__offset and 0x1F51 <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("ScaledTxGain" , 0),
-                        lambda pkt:(0x1F51 >= self.__offset and 0x1F55 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("ResourceThresholdEnabled" , 0),
-                        lambda pkt:(0x1F55 >= self.__offset and 0x1F56 <= self.__offset+self.__length) ),
-                  ConditionalField( PacketListField("ReservedPercentageForCaps", "", ReservedPercentageForCap, length_from=lambda x: 4),
-                        lambda pkt:(0x1F56 >= self.__offset and 0x1F5A <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("PowerSavingMode" , 0),
-                        lambda pkt:(0x1F5A >= self.__offset and 0x1F5B <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("PowerLEDDutyCycle" , 0),
-                        lambda pkt:(0x1F5B >= self.__offset and 0x1F5C <= self.__offset+self.__length) ),
-                  ConditionalField( XShortField("reserved_18" , 0),
-                        lambda pkt:(0x1F5C >= self.__offset and 0x1F5E <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("LinkUpDurationBeforeReset_ms" , 0),
-                        lambda pkt:(0x1F5E >= self.__offset and 0x1F62 <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("PowerLEDPeriod_ms" , 0),
-                        lambda pkt:(0x1F62 >= self.__offset and 0x1F66 <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("LinkDownDurationBeforeLowPowerMode_ms" , 0),
-                        lambda pkt:(0x1F66 >= self.__offset and 0x1F6A <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("reserved_19" , 0),
-                        lambda pkt:(0x1F6A >= self.__offset and 0x1F6E <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("AfeGainBusMode" , 0),
-                        lambda pkt:(0x1F6E >= self.__offset and 0x1F6F <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("EnableDynamicPsd" , 0),
-                        lambda pkt:(0x1F6F >= self.__offset and 0x1F70 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("ReservedPercentageForTxStreams" , 0),
-                        lambda pkt:(0x1F70 >= self.__offset and 0x1F71 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("ReservedPercentageForRxStreams" , 0),
-                        lambda pkt:(0x1F71 >= self.__offset and 0x1F72 <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("reserved_20",
-                                "\x00"*22,
-                                22),
-                        lambda pkt:(0x1F72 >= self.__offset and 0x1F88 <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("LegacyNetworkUpgradeEnable" , 0),
-                        lambda pkt:(0x1F88 >= self.__offset and 0x1F8C <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("unknown" , 0),
-                        lambda pkt:(0x1F8C >= self.__offset and 0x1F90 <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("MMETTL_us" , 0),
-                        lambda pkt:(0x1F90 >= self.__offset and 0x1F94 <= self.__offset+self.__length) ),
-                  ConditionalField( PacketListField("ConfigBits", "", ConfigBit, length_from=lambda x: 2),
-                        lambda pkt:(0x1F94 >= self.__offset and 0x1F96 <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("TxToneMapExpiry_ms" , 0),
-                        lambda pkt:(0x1F96 >= self.__offset and 0x1F9A <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("RxToneMapExpiry_ms" , 0),
-                        lambda pkt:(0x1F9A >= self.__offset and 0x1F9E <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("TimeoutToResound_ms" , 0),
-                        lambda pkt:(0x1F9E >= self.__offset and 0x1FA2 <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("MissingSackThresholdForUnplugDetection" , 0),
-                        lambda pkt:(0x1FA2 >= self.__offset and 0x1FA6 <= self.__offset+self.__length) ),
-                  ConditionalField( LEIntField("UnplugTimeout_ms" , 0),
-                        lambda pkt:(0x1FA6 >= self.__offset and 0x1FAA <= self.__offset+self.__length) ),
-                  ConditionalField( PacketListField("ContentionWindowTableES", "", ContentionWindowTable, length_from=lambda x: 8),
-                        lambda pkt:(0x1FAA >= self.__offset and 0x1FB2 <= self.__offset+self.__length) ),
-                  ConditionalField( PacketListField("BackoffDeferalCountTableES", "", BackoffDeferalCountTable, length_from=lambda x: 4),
-                        lambda pkt:(0x1FB2 >= self.__offset and 0x1FB6 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("GoodSoundCountThreshold" , 0),
-                        lambda pkt:(0x1FB6 >= self.__offset and 0x1FB7 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("SoundCountThreshold_GoodSoundCountPass" , 0),
-                        lambda pkt:(0x1FB7 >= self.__offset and 0x1FB8 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("SoundCountThreshold_GoodSoundCountFail" , 0),
-                        lambda pkt:(0x1FB8 >= self.__offset and 0x1FB9 <= self.__offset+self.__length) ),
-                  ConditionalField( XShortField("reserved_21" , 0),
-                        lambda pkt:(0x1FB9 >= self.__offset and 0x1FBB <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("ExclusiveTxPbs_percentage" , 0),
-                        lambda pkt:(0x1FBB >= self.__offset and 0x1FBC <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("ExclusiveRxPbs_percentage" , 0),
-                        lambda pkt:(0x1FBC >= self.__offset and 0x1FBD <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("OptimizationBackwardCompatible" , 0),
-                        lambda pkt:(0x1FBD >= self.__offset and 0x1FBE <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("reserved_21" , 0),
-                        lambda pkt:(0x1FBE >= self.__offset and 0x1FBF <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("MaxPbsPerSymbol" , 0),
-                        lambda pkt:(0x1FBF >= self.__offset and 0x1FC0 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("MaxModulation" , 0),                      
-                        lambda pkt:(0x1FC0 >= self.__offset and 0x1FC1 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("ContinuousRx" , 0),
-                        lambda pkt:(0x1FC1 >= self.__offset and 0x1FC2 <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("reserved_22",
-                                "\x00"*6,
-                                6),
-                        lambda pkt:(0x1FC2 >= self.__offset and 0x1FC8 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("PBControlStatus" , 0),
-                        lambda pkt:(0x1FC8 >= self.__offset and 0x1FC9 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("STAMembershipMaskEnabled" , 0),
-                        lambda pkt:(0x1FC9 >= self.__offset and 0x1FCA <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("ExitDefaultEnabled" , 0),               
-                        lambda pkt:(0x1FCA >= self.__offset and 0x1FCB <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("RejectDefaultEnabled" , 0),     
-                        lambda pkt:(0x1FCB >= self.__offset and 0x1FCC <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("ChainingEnabled" , 0),   
-                        lambda pkt:(0x1FCC >= self.__offset and 0x1FCD <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("VendorSpecificNMK",
-                                "\x00"*16,
-                                16),
-                        lambda pkt:(0x1FCD >= self.__offset and 0x1FDD <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("LocalMACAddressLimit" , 0),
-                        lambda pkt:(0x1FDD >= self.__offset and 0x1FDE <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("OverrideBridgeTableAgingTime" , 0),
-                        lambda pkt:(0x1FDE >= self.__offset and 0x1FDF <= self.__offset+self.__length) ),
-                  ConditionalField( XShortField("LocalBridgeTableAgingTime_min" , 0),
-                        lambda pkt:(0x1FDF >= self.__offset and 0x1FE1 <= self.__offset+self.__length) ),
-                  ConditionalField( XShortField("RemoteBridgeTableAgingTime_min" , 0),
-                        lambda pkt:(0x1FE1 >= self.__offset and 0x1FE3 <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("PhySyncReference" , 0),
-                        lambda pkt:(0x1FE3 >= self.__offset and 0x1FE7 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("reserved_23" , 0),
-                        lambda pkt:(0x1FE7 >= self.__offset and 0x1FE8 <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("reserved_24" , 0),
-                        lambda pkt:(0x1FE8 >= self.__offset and 0x1FEC <= self.__offset+self.__length) ),
-                  ConditionalField( XIntField("reserved_25" , 0),
-                        lambda pkt:(0x1FEC >= self.__offset and 0x1FF0 <= self.__offset+self.__length) ),
-                  ConditionalField( StrFixedLenField("reserved_26",
-                                "\x00"*24,
-                                24),
-                        lambda pkt:(0x1FF0 >= self.__offset and 0x2008 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("OverrideDefaultLedEventBehavior" , 0x80),
-                        lambda pkt:(0x2008 >= self.__offset and 0x2009 <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("ReportToHostInfo" , 0),
-                        lambda pkt:(0x2009 >= self.__offset and 0x200A <= self.__offset+self.__length) ),
-                  ConditionalField( X3BytesField("reserved_27" , 0),
-                        lambda pkt:(0x200A >= self.__offset and 0x200D <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("NumBehaviors" , 0),
-                        lambda pkt:(0x200D >= self.__offset and 0x200E <= self.__offset+self.__length) ),
-                  ConditionalField( PacketListField("BehaviorBlockArrayES", "", BehaviorBlockArray, length_from=lambda x: 1200),
-                        lambda pkt:(0x200E >= self.__offset and 0x24BE <= self.__offset+self.__length) ),
-                  ConditionalField( XByteField("NumEvents" , 0),
-                        lambda pkt:(0x24BE >= self.__offset and 0x24BF <= self.__offset+self.__length) ),
-                  ConditionalField( PacketListField("EventBlockArrayES", "", EventBlockArray, length_from=lambda x: 550),
-                        lambda pkt:(0x24BF >= self.__offset and 0x26E5 <= self.__offset+self.__length) ),
-                ]
-
         return super(ModulePIB,self).__init__(packet)
 
 
diff --git a/scapy/contrib/eigrp.py b/scapy/contrib/eigrp.py
index 54b8ce8fbe03887ef579dc29d66a348e268b4974..94be657140cc76698568e138e1c66a444595a476 100644
--- a/scapy/contrib/eigrp.py
+++ b/scapy/contrib/eigrp.py
@@ -52,6 +52,8 @@ class EigrpIPField(StrField, IPField):
     EIGRP removes zeros from the host portion of the ip address if the netmask is 8, 16 or 24 bits.
     """
 
+    __slots__ = ["length_from"]
+
     def __init__(self, name, default, length=None, length_from=None):
         StrField.__init__(self, name, default)
         self.length_from  = length_from
@@ -101,25 +103,25 @@ class EigrpIPField(StrField, IPField):
     def i2len(self, pkt, x):
         l = self.length_from(pkt)
         l = self.prefixlen_to_bytelen(l)
-
         return l
 
     def getfield(self, pkt, s):
         l = self.length_from(pkt)
         l = self.prefixlen_to_bytelen(l)
-
         return s[l:], self.m2i(pkt, s[:l])
 
     def randval(self):
         return IPField.randval(self)
 
-class EigrpIP6Field(StrField, IP6Field, EigrpIPField):
+class EigrpIP6Field(StrField, IP6Field):
     """
     This is a special field type for handling ip addresses of destination networks in internal and
     external route updates.
 
     """
 
+    __slots__ = ["length_from"]
+
     def __init__(self, name, default, length=None, length_from=None):
         StrField.__init__(self, name, default)
         self.length_from  = length_from
@@ -163,11 +165,17 @@ class EigrpIP6Field(StrField, IP6Field, EigrpIPField):
         return l
 
     def i2len(self, pkt, x):
-        return EigrpIPField.i2len(self, pkt, x)
+        l = self.length_from(pkt)
+        l = self.prefixlen_to_bytelen(l)
+        return l
 
     def getfield(self, pkt, s):
-        return EigrpIPField.getfield(self, pkt, s)
+        l = self.length_from(pkt)
+        l = self.prefixlen_to_bytelen(l)
+        return s[l:], self.m2i(pkt, s[:l])
 
+    def randval(self):
+        return IP6Field.randval(self)
 
 class EIGRPGeneric(Packet):
     name = "EIGRP Generic TLV"
diff --git a/scapy/contrib/ikev2.py b/scapy/contrib/ikev2.py
index bdcb4ace824dee99c0757effbdbf47443963ab0e..1b74d9b153673171ed8b71f18f54ee4843503475 100644
--- a/scapy/contrib/ikev2.py
+++ b/scapy/contrib/ikev2.py
@@ -166,8 +166,8 @@ class IKEv2(IKEv2_class): # rfc4306
        
 
 class IKEv2_Key_Length_Attribute(IntField):
-	# We only support the fixed-length Key Length attribute (the only one currently defined)
-	name="key length"
+	# We only support the fixed-length Key Length attribute (the only
+	# one currently defined)
 	def __init__(self, name):
 		IntField.__init__(self, name, "0x800E0000")
 		
diff --git a/scapy/contrib/isis.py b/scapy/contrib/isis.py
index c5b716beb6978ea0a90e19e5d6aad1c2959cbeef..39fbe90db0277b8f944f7cdd57828e984d073a6e 100644
--- a/scapy/contrib/isis.py
+++ b/scapy/contrib/isis.py
@@ -107,6 +107,7 @@ def isis_str2lspid(s):
 
 
 class _ISIS_IdFieldBase(Field):
+    __slots__ = ["to_str", "to_id", "length"]
     def __init__(self, name, default, length, to_str, to_id):
         self.to_str = to_str
         self.to_id = to_id
@@ -153,9 +154,11 @@ class _ISIS_RandAreaId(_ISIS_RandId):
 
 
 class ISIS_AreaIdField(Field):
+    __slots__ = ["length_from"]
+
     def __init__(self, name, default, length_from):
         Field.__init__(self, name, default)
-        self.length_from= length_from
+        self.length_from = length_from
 
     def i2m(self, pkt, x):
         return isis_area2str(x)
diff --git a/scapy/contrib/openflow3.py b/scapy/contrib/openflow3.py
index ace4dd3d81a34e4ee8702f47a516f73d7d1bd025..0dc31306c823ab5454a00ad1df38b29ab60576fb 100755
--- a/scapy/contrib/openflow3.py
+++ b/scapy/contrib/openflow3.py
@@ -536,6 +536,8 @@ need_prereq = { 14: [12, 0x1000],
 
 class OXMPacketListField(PacketListField):
 
+    __slots__ = ["autocomplete", "index"]
+
     def __init__(self, name, default, cls, length_from=None, autocomplete=prereq_autocomplete):
         PacketListField.__init__(self, name, default, cls, length_from=length_from)
         self.autocomplete = autocomplete
diff --git a/scapy/contrib/ppi_geotag.py b/scapy/contrib/ppi_geotag.py
index 106f9224d6e9732de6549db110f0390fded494fb..add1a67513ecec388f20d8cf0a7a11a8d35c2e2b 100644
--- a/scapy/contrib/ppi_geotag.py
+++ b/scapy/contrib/ppi_geotag.py
@@ -167,6 +167,7 @@ class UTCTimeField(IntField):
         return "%s (%d)" % (t, x)
 
 class LETimeField(UTCTimeField,LEIntField):
+    __slots__ = ["epoch", "delta", "strf"]
     def __init__(self, name, default, epoch=time.gmtime(0), strf="%a, %d %b %Y %H:%M:%S +0000"):
         LEIntField.__init__(self, name, default)
         self.epoch = epoch
diff --git a/scapy/fields.py b/scapy/fields.py
index f06241ce5e7d123ec7629799f099e2fb09b7b405..17dae7a4f5a8a76cd749395daac4974887711c3f 100644
--- a/scapy/fields.py
+++ b/scapy/fields.py
@@ -12,19 +12,21 @@ from config import conf
 from volatile import *
 from data import *
 from utils import *
-from base_classes import BasePacket,Gen,Net
+from base_classes import BasePacket, Gen, Net, Field_metaclass
 
 
 ############
 ## Fields ##
 ############
 
-class Field:
+class Field(object):
     """For more informations on how this work, please refer to
        http://www.secdev.org/projects/scapy/files/scapydoc.pdf
        chapter ``Adding a New Field''"""
-    islist=0
-    holds_packets=0
+    __slots__ = ["name", "fmt", "default", "sz", "owners"]
+    __metaclass__ = Field_metaclass
+    islist = 0
+    holds_packets = 0
     def __init__(self, name, default, fmt="H"):
         self.name = name
         if fmt[0] in "@=<>!":
@@ -101,8 +103,8 @@ class Field:
 
 
 
-class Emph:
-    fld = ""
+class Emph(object):
+    __slots__ = ["fld"]
     def __init__(self, fld):
         self.fld = fld
     def __getattr__(self, attr):
@@ -113,8 +115,8 @@ class Emph:
         return self.fld == other
     
 
-class ActionField:
-    _fld = None
+class ActionField(object):
+    __slots__ = ["_fld", "_action_method", "_privdata"]
     def __init__(self, fld, action_method, **kargs):
         self._fld = fld
         self._action_method = action_method
@@ -126,20 +128,20 @@ class ActionField:
         return getattr(self._fld,attr)
 
 
-class ConditionalField:
-    fld = None
+class ConditionalField(object):
+    __slots__ = ["fld", "cond"]
     def __init__(self, fld, cond):
         self.fld = fld
         self.cond = cond
     def _evalcond(self,pkt):
         return self.cond(pkt)
-        
+
     def getfield(self, pkt, s):
         if self._evalcond(pkt):
             return self.fld.getfield(pkt,s)
         else:
             return s,None
-        
+
     def addfield(self, pkt, s, val):
         if self._evalcond(pkt):
             return self.fld.addfield(pkt,s,val)
@@ -147,12 +149,12 @@ class ConditionalField:
             return s
     def __getattr__(self, attr):
         return getattr(self.fld,attr)
-        
 
-class PadField:
+
+class PadField(object):
     """Add bytes after the proxified field so that it ends at the specified
        alignment from its begining"""
-    _fld = None
+    __slots__ = ["_fld", "_align", "_padwith"]
     def __init__(self, fld, align, padwith=None):
         self._fld = fld
         self._align = align
@@ -197,6 +199,7 @@ class MACField(Field):
 
 
 class IPField(Field):
+    slots = []
     def __init__(self, name, default):
         Field.__init__(self, name, default, "4s")
     def h2i(self, pkt, x):
@@ -230,6 +233,7 @@ class IPField(Field):
         return RandIP()
 
 class SourceIPField(IPField):
+    __slots__ = ["dstname"]
     def __init__(self, name, dstname):
         IPField.__init__(self, name, None)
         self.dstname = dstname
@@ -339,6 +343,7 @@ class IEEEDoubleField(Field):
 
 
 class StrField(Field):
+    __slots__ = ["remain"]
     def __init__(self, name, default, fmt="H", remain=0):
         Field.__init__(self,name,default,fmt)
         self.remain = remain        
@@ -361,7 +366,8 @@ class StrField(Field):
         return RandBin(RandNum(0,1200))
 
 class PacketField(StrField):
-    holds_packets=1
+    __slots__ = ["cls"]
+    holds_packets = 1
     def __init__(self, name, default, cls, remain=0):
         StrField.__init__(self, name, default, remain=remain)
         self.cls = cls
@@ -379,6 +385,7 @@ class PacketField(StrField):
         return remain,i
     
 class PacketLenField(PacketField):
+    __slots__ = ["length_from"]
     def __init__(self, name, default, cls, length_from=None):
         PacketField.__init__(self, name, default, cls)
         self.length_from = length_from
@@ -394,6 +401,7 @@ class PacketLenField(PacketField):
 
 
 class PacketListField(PacketField):
+    __slots__ = ["count_from", "length_from"]
     islist = 1
     def __init__(self, name, default, cls, count_from=None, length_from=None):
         if default is None:
@@ -457,6 +465,7 @@ class PacketListField(PacketField):
 
 
 class StrFixedLenField(StrField):
+    __slots__ = ["length_from"]
     def __init__(self, name, default, length=None, length_from=None):
         StrField.__init__(self, name, default)
         self.length_from  = length_from
@@ -480,6 +489,7 @@ class StrFixedLenField(StrField):
         return RandBin(l)
 
 class StrFixedLenEnumField(StrFixedLenField):
+    __slots__ = ["enum"]
     def __init__(self, name, default, length=None, enum=None, length_from=None):
         StrFixedLenField.__init__(self, name, default, length=length, length_from=length_from)
         self.enum = enum
@@ -509,6 +519,7 @@ class NetBIOSNameField(StrFixedLenField):
         return "".join(map(lambda x,y: chr((((ord(x)-1)&0xf)<<4)+((ord(y)-1)&0xf)), x[::2],x[1::2]))
 
 class StrLenField(StrField):
+    __slots__ = ["length_from"]
     def __init__(self, name, default, fld=None, length_from=None):
         StrField.__init__(self, name, default)
         self.length_from = length_from
@@ -517,16 +528,18 @@ class StrLenField(StrField):
         return s[l:], self.m2i(pkt,s[:l])
     
 class BoundStrLenField(StrLenField):
+    __slots__ = ["minlen", "maxlen"]
     def __init__(self,name, default, minlen= 0, maxlen= 255, fld=None, length_from=None):
         StrLenField.__init__(self, name, default, fld, length_from)
-        self.minlen= minlen
-        self.maxlen= maxlen
+        self.minlen = minlen
+        self.maxlen = maxlen
     
     def randval(self):
         return RandBin(RandNum(self.minlen, self.maxlen))
 
 class FieldListField(Field):
-    islist=1
+    __slots__ = ["field", "count_from", "length_from"]
+    islist = 1
     def __init__(self, name, default, field, length_from=None, count_from=None):
         if default is None:
             default = []  # Create a new list for each instance
@@ -580,11 +593,12 @@ class FieldListField(Field):
         return s+ret, val
 
 class FieldLenField(Field):
+    __slots__ = ["length_of", "count_of", "adjust"]
     def __init__(self, name, default,  length_of=None, fmt = "H", count_of=None, adjust=lambda pkt,x:x, fld=None):
         Field.__init__(self, name, default, fmt)
-        self.length_of=length_of
-        self.count_of=count_of
-        self.adjust=adjust
+        self.length_of = length_of
+        self.count_of = count_of
+        self.adjust = adjust
         if fld is not None:
             FIELD_LENGTH_MANAGEMENT_DEPRECATION(self.__class__.__name__)
             self.length_of = fld
@@ -612,10 +626,11 @@ class StrNullField(StrField):
         return RandTermString(RandNum(0,1200),"\x00")
 
 class StrStopField(StrField):
+    __slots__ = ["stop", "additionnal"]
     def __init__(self, name, default, stop, additionnal=0):
         Field.__init__(self, name, default)
-        self.stop=stop
-        self.additionnal=additionnal
+        self.stop = stop
+        self.additionnal = additionnal
     def getfield(self, pkt, s):
         l = s.find(self.stop)
         if l < 0:
@@ -639,6 +654,7 @@ class BCDFloatField(Field):
         return x/256.0
 
 class BitField(Field):
+    __slots__ = ["rev", "size"]
     def __init__(self, name, default, size):
         Field.__init__(self, name, default)
         self.rev = size < 0 
@@ -708,11 +724,12 @@ class BitField(Field):
 
 
 class BitFieldLenField(BitField):
+    __slots__ = ["length_of", "count_of", "adjust"]
     def __init__(self, name, default, size, length_of=None, count_of=None, adjust=lambda pkt,x:x):
         BitField.__init__(self, name, default, size)
-        self.length_of=length_of
-        self.count_of=count_of
-        self.adjust=adjust
+        self.length_of = length_of
+        self.count_of = count_of
+        self.adjust = adjust
     def i2m(self, pkt, x):
         return FieldLenField.i2m.im_func(self, pkt, x)
 
@@ -722,7 +739,7 @@ class XBitField(BitField):
         return lhex(self.i2h(pkt,x))
 
 
-class EnumField(Field):
+class _EnumField(Field):
     def __init__(self, name, default, enum, fmt = "H"):
         i2s = self.i2s = {}
         s2i = self.s2i = {}
@@ -756,6 +773,9 @@ class EnumField(Field):
         else:
             return self.i2repr_one(pkt,x)
 
+class EnumField(_EnumField):
+    __slots__ = ["i2s", "s2i"]
+
 class CharEnumField(EnumField):
     def __init__(self, name, default, enum, fmt = "1s"):
         EnumField.__init__(self, name, default, enum, fmt)
@@ -767,15 +787,16 @@ class CharEnumField(EnumField):
             x = self.s2i[x]
         return x
 
-class BitEnumField(BitField,EnumField):
+class BitEnumField(BitField, _EnumField):
+    __slots__ = EnumField.__slots__
     def __init__(self, name, default, size, enum):
-        EnumField.__init__(self, name, default, enum)
+        _EnumField.__init__(self, name, default, enum)
         self.rev = size < 0
         self.size = abs(size)
     def any2i(self, pkt, x):
-        return EnumField.any2i(self, pkt, x)
+        return _EnumField.any2i(self, pkt, x)
     def i2repr(self, pkt, x):
-        return EnumField.i2repr(self, pkt, x)
+        return _EnumField.i2repr(self, pkt, x)
 
 class ShortEnumField(EnumField):
     def __init__(self, name, default, enum):
@@ -809,7 +830,7 @@ class XShortEnumField(ShortEnumField):
             return self.i2s[x]
         return lhex(x)
 
-class MultiEnumField(EnumField):
+class _MultiEnumField(_EnumField):
     def __init__(self, name, default, enum, depends_on, fmt = "H"):
         
         self.depends_on = depends_on
@@ -837,7 +858,11 @@ class MultiEnumField(EnumField):
             return self.i2s_multi[v].get(x,x)
         return x
 
-class BitMultiEnumField(BitField,MultiEnumField):
+class MultiEnumField(_MultiEnumField, EnumField):
+    __slots__ = ["depends_on", "i2s_multi", "s2i_multi", "s2i_all"]
+
+class BitMultiEnumField(BitField, _MultiEnumField):
+    __slots__ = EnumField.__slots__ + MultiEnumField.__slots__
     def __init__(self, name, default, size, enum, depends_on):
         MultiEnumField.__init__(self, name, default, enum)
         self.rev = size < 0
@@ -878,6 +903,7 @@ class LEFieldLenField(FieldLenField):
 
 
 class FlagsField(BitField):
+    __slots__ = ["multi", "names"]
     def __init__(self, name, default, size, names):
         self.multi = type(names) is list
         if self.multi:
@@ -915,6 +941,7 @@ class FlagsField(BitField):
 
 
 class FixedPointField(BitField):
+    __slots__ = ['frac_bits']
     def __init__(self, name, default, size, frac_bits=16):
         self.frac_bits = frac_bits
         BitField.__init__(self, name, default, size)
@@ -938,13 +965,14 @@ class FixedPointField(BitField):
 # Base class for IPv4 and IPv6 Prefixes inspired by IPField and IP6Field.
 # Machine values are encoded in a multiple of wordbytes bytes.
 class _IPPrefixFieldBase(Field):
+    __slots__ = ["wordbytes", "maxbytes", "aton", "ntoa", "length_from"]
     def __init__(self, name, default, wordbytes, maxbytes, aton, ntoa, length_from):
-        self.wordbytes= wordbytes
-        self.maxbytes= maxbytes
-        self.aton= aton
-        self.ntoa= ntoa
+        self.wordbytes = wordbytes
+        self.maxbytes = maxbytes
+        self.aton = aton
+        self.ntoa = ntoa
         Field.__init__(self, name, default, "%is" % self.maxbytes)
-        self.length_from= length_from
+        self.length_from = length_from
     
     def _numbytes(self, pfxlen):
         wbits= self.wordbytes * 8
diff --git a/scapy/layers/dhcp6.py b/scapy/layers/dhcp6.py
index 9502dc9a4b9f7c8435c5091282431ff4b1403cac..be3c0b0ca5a02d4188ac0b710b6b3f9adfce8b54 100644
--- a/scapy/layers/dhcp6.py
+++ b/scapy/layers/dhcp6.py
@@ -263,6 +263,7 @@ class DHCP6OptUnknown(_DHCP6OptGuessPayload): # A generic DHCPv6 Option
                                 length_from = lambda pkt: pkt.optlen)]
 
 class _DUIDField(PacketField):
+    __slots__ = ["length_from"]
     def __init__(self, name, default, length_from=None):
         StrField.__init__(self, name, default)
         self.length_from = length_from
@@ -661,6 +662,7 @@ class DHCP6OptReconfAccept(_DHCP6OptGuessPayload):   # RFC sect 22.20
 # XXX Label should be at most 63 octets in length : we do not enforce it
 #     Total length of domain should be 255 : we do not enforce it either
 class DomainNameListField(StrLenField):
+    __slots__ = ["padded"]
     islist = 1
     padded_unit = 8
 
diff --git a/scapy/layers/dns.py b/scapy/layers/dns.py
index 392a52b764ac5391cefc172e1d05a70183ccbd97..ed85cf181a2baca9e6e0c767c14140f1860af799 100644
--- a/scapy/layers/dns.py
+++ b/scapy/layers/dns.py
@@ -52,6 +52,7 @@ class DNSStrField(StrField):
 
 
 class DNSRRCountField(ShortField):
+    __slots__ = ["rr"]
     def __init__(self, name, default, rr):
         ShortField.__init__(self, name, default)
         self.rr = rr
@@ -106,7 +107,8 @@ def DNSgetstr(s,p):
         
 
 class DNSRRField(StrField):
-    holds_packets=1
+    __slots__ = ["countfld", "passon"]
+    holds_packets = 1
     def __init__(self, name, countfld, passon=1):
         StrField.__init__(self, name, None)
         self.countfld = countfld
diff --git a/scapy/layers/inet.py b/scapy/layers/inet.py
index f1c21f1772608eef30c01a73ec07a5626682efc5..2c38b10671f3dc2ce6f99f56ade50d5c9431cf9e 100644
--- a/scapy/layers/inet.py
+++ b/scapy/layers/inet.py
@@ -28,8 +28,9 @@ from scapy.arch import plt, MATPLOTLIB_INLINED, MATPLOTLIB_DEFAULT_PLOT_KARGS
 ## IP Tools class ##
 ####################
 
-class IPTools:
-    """Add more powers to a class that have a "src" attribute."""
+class IPTools(object):
+    """Add more powers to a class with an "src" attribute."""
+    __slots__ = []
     def whois(self):
         os.system("whois %s" % self.src)
     def ottl(self):
@@ -965,6 +966,7 @@ PacketList.timeskew_graph = new.instancemethod(_packetlist_timeskew_graph, None,
 
 ### Create a new packet list
 class TracerouteResult(SndRcvList):
+    __slots__ = ["graphdef", "graphASres", "padding", "hloc", "nloc"]
     def __init__(self, res=None, name="Traceroute", stats=None):
         PacketList.__init__(self, res, name, stats)
         self.graphdef = None
diff --git a/scapy/layers/inet6.py b/scapy/layers/inet6.py
index ba5674c454a3ccb0ab4b43a4feee756da4c3c241..63b6f06d39b8da047d60a061b8fc51c4f70d2a8e 100644
--- a/scapy/layers/inet6.py
+++ b/scapy/layers/inet6.py
@@ -223,6 +223,7 @@ class IP6Field(Field):
         return RandIP6()
 
 class SourceIP6Field(IP6Field):
+    __slots__ = ["dstname"]
     def __init__(self, name, dstname):
         IP6Field.__init__(self, name, None)
         self.dstname = dstname
@@ -275,6 +276,7 @@ ipv6nhcls = {  0: "IPv6ExtHdrHopByHop",
                60: "IPv6ExtHdrDestOpt" }
 
 class IP6ListField(StrField):
+    __slots__ = ["count_from", "length_from"]
     islist = 1
     def __init__(self, name, default, count_from=None, length_from=None):
         if default is None:
@@ -745,6 +747,7 @@ _hbhoptcls = { 0x00: Pad1,
 ######################## Hop-by-Hop Extension Header ########################
 
 class _HopByHopOptionsField(PacketListField):
+    __slots__ = ["curpos"]
     def __init__(self, name, default, cls, curpos, count_from=None, length_from=None):
         self.curpos = curpos
         PacketListField.__init__(self, name, default, cls, count_from=count_from, length_from=length_from)
@@ -945,7 +948,7 @@ def defragment6(pktlist):
     q = res[0]
     nh = q[IPv6ExtHdrFragment].nh
     q[IPv6ExtHdrFragment].underlayer.nh = nh
-    q[IPv6ExtHdrFragment].underlayer.payload = None
+    del q[IPv6ExtHdrFragment].underlayer.payload
     q /= conf.raw_layer(load=fragmentable)
     
     return IPv6(str(q))
@@ -991,12 +994,12 @@ def fragment6(pkt, fragSize):
 
     # Keep fragment header
     fragHeader = pkt[IPv6ExtHdrFragment]
-    fragHeader.payload = None # detach payload
+    del fragHeader.payload # detach payload
 
     # Unfragmentable Part
     unfragPartLen = len(s) - fragPartLen - 8
     unfragPart = pkt
-    pkt[IPv6ExtHdrFragment].underlayer.payload = None # detach payload
+    del pkt[IPv6ExtHdrFragment].underlayer.payload # detach payload
 
     # Cut the fragmentable part to fit fragSize. Inner fragments have 
     # a length that is an integer multiple of 8 octets. last Frag MTU
@@ -1500,6 +1503,7 @@ class ICMPv6NDOptPrefixInfo(_ICMPv6NDGuessPayload, Packet):
 # TODO: We should also limit the size of included packet to something
 # like (initiallen - 40 - 2)
 class TruncPktLenField(PacketLenField):
+    __slots__ = ["cur_shift"]
 
     def __init__(self, name, default, cls, cur_shift, length_from=None, shift=0):
         PacketLenField.__init__(self, name, default, cls, length_from=length_from)
@@ -1627,6 +1631,7 @@ class ICMPv6NDOptMAP(_ICMPv6NDGuessPayload, Packet):     # RFC 4140
 
 
 class IP6PrefixField(IP6Field):
+    __slots__ = ["length_from"]
     def __init__(self, name, default):
         IP6Field.__init__(self, name, default)
         self.length_from = lambda pkt: 8*(pkt.len - 1)
@@ -2627,6 +2632,7 @@ class MIP6MH_Generic(_MobilityHeader): # Mainly for decoding of unknown msg
     
 # TODO: make a generic _OptionsField
 class _MobilityOptionsField(PacketListField):
+    __slots__ = ["curpos"]
     def __init__(self, name, default, cls, curpos, count_from=None, length_from=None):
         self.curpos = curpos
         PacketListField.__init__(self, name, default, cls, count_from=count_from, length_from=length_from)
@@ -2882,6 +2888,7 @@ class  AS_resolver6(AS_resolver_riswhois):
         return ip,asn,desc        
 
 class TracerouteResult6(TracerouteResult):
+    __slots__ = []
     def show(self):
         return self.make_table(lambda (s,r): (s.sprintf("%-42s,IPv6.dst%:{TCP:tcp%TCP.dport%}{UDP:udp%UDP.dport%}{ICMPv6EchoRequest:IER}"), # TODO: ICMPv6 !
                                               s.hlim,
diff --git a/scapy/packet.py b/scapy/packet.py
index 56267b2262ef1040825260598a6994c2a1f74989..00d47380f05bfb759a2a9b38adb65d4bd55e8bd4 100644
--- a/scapy/packet.py
+++ b/scapy/packet.py
@@ -33,23 +33,23 @@ class RawVal:
 
 
 class Packet(BasePacket):
+    __slots__ = [
+        "time", "sent_time", "name", "default_fields",
+        "overloaded_fields", "fields", "fieldtype", "packetfields",
+        "original", "explicit", "raw_packet_cache",
+        "raw_packet_cache_fields", "_pkt", "post_transforms",
+        # then payload and underlayer
+        "payload", "underlayer",
+        "name",
+        # used for sr()
+        "_answered",
+    ]
     __metaclass__ = Packet_metaclass
-    name=None
-
+    name = None
     fields_desc = []
-
-    aliastypes = []
     overload_fields = {}
-
-    underlayer = None
-
-    sent_time = None
     payload_guess = []
-    initialized = 0
-    show_indent=1
-    explicit = 0
-    raw_packet_cache = None
-    raw_packet_cache_fields = None
+    show_indent = 1
 
     @classmethod
     def from_hexcap(cls):
@@ -67,20 +67,22 @@ class Packet(BasePacket):
 
     def __init__(self, _pkt="", post_transform=None, _internal=0, _underlayer=None, **fields):
         self.time  = time.time()
-        self.sent_time = 0
-        if self.name is None:
-            self.name = self.__class__.__name__
-        self.aliastypes = [ self.__class__ ] + self.aliastypes
+        self.sent_time = None
+        self.name = (self.__class__.__name__
+                     if self._name is None else
+                     self._name)
         self.default_fields = {}
         self.overloaded_fields = {}
-        self.fields={}
-        self.fieldtype={}
-        self.packetfields=[]
-        self.__dict__["payload"] = NoPayload()
+        self.fields = {}
+        self.fieldtype = {}
+        self.packetfields = []
+        self.payload = NoPayload()
         self.init_fields()
         self.underlayer = _underlayer
-        self.initialized = 1
         self.original = _pkt
+        self.explicit = 0
+        self.raw_packet_cache = None
+        self.raw_packet_cache_fields = None
         if _pkt:
             self.dissect(_pkt)
             if not _internal:
@@ -124,19 +126,19 @@ class Packet(BasePacket):
             self.payload.add_payload(payload)
         else:
             if isinstance(payload, Packet):
-                self.__dict__["payload"] = payload
+                self.payload = payload
                 payload.add_underlayer(self)
                 for t in self.aliastypes:
                     if payload.overload_fields.has_key(t):
                         self.overloaded_fields = payload.overload_fields[t]
                         break
             elif type(payload) is str:
-                self.__dict__["payload"] = conf.raw_layer(load=payload)
+                self.payload = conf.raw_layer(load=payload)
             else:
                 raise TypeError("payload must be either 'Packet' or 'str', not [%s]" % repr(payload))
     def remove_payload(self):
         self.payload.remove_underlayer(self)
-        self.__dict__["payload"] = NoPayload()
+        self.payload = NoPayload()
         self.overloaded_fields = {}
     def add_underlayer(self, underlayer):
         self.underlayer = underlayer
@@ -148,7 +150,6 @@ class Packet(BasePacket):
         clone.fields = self.copy_fields_dict(self.fields)
         clone.default_fields = self.copy_fields_dict(self.default_fields)
         clone.overloaded_fields = self.overloaded_fields.copy()
-        clone.overload_fields = self.overload_fields.copy()
         clone.underlayer = self.underlayer
         clone.explicit = self.explicit
         clone.raw_packet_cache = self.raw_packet_cache
@@ -156,7 +157,7 @@ class Packet(BasePacket):
             self.raw_packet_cache_fields
         )
         clone.post_transforms = self.post_transforms[:]
-        clone.__dict__["payload"] = self.payload.copy()
+        clone.payload = self.payload.copy()
         clone.payload.add_underlayer(clone)
         return clone
 
@@ -179,7 +180,7 @@ class Packet(BasePacket):
         return self.payload.getfield_and_val(attr)
     
     def __getattr__(self, attr):
-        if self.initialized:
+        if isinstance(self, Packet):
             fld,v = self.getfield_and_val(attr)
             if fld is not None:
                 return fld.i2h(self, v)
@@ -204,14 +205,14 @@ class Packet(BasePacket):
             self.payload.setfieldval(attr,val)
 
     def __setattr__(self, attr, val):
-        if self.initialized:
+        if isinstance(self, Packet):
+            if attr in self.__all_slots__:
+                return object.__setattr__(self, attr, val)
             try:
-                self.setfieldval(attr,val)
+                return self.setfieldval(attr,val)
             except AttributeError:
                 pass
-            else:
-                return
-        self.__dict__[attr] = val
+        return object.__setattr__(self, attr, val)
 
     def delfieldval(self, attr):
         if self.fields.has_key(attr):
@@ -227,17 +228,16 @@ class Packet(BasePacket):
             self.payload.delfieldval(attr)
 
     def __delattr__(self, attr):
-        if self.initialized:
+        if isinstance(self, Packet):
+            if attr == "payload":
+                return self.remove_payload()
+            if attr in self.__all_slots__:
+                return object.__delattr__(self, attr)
             try:
-                self.delfieldval(attr)
+                return self.delfieldval(attr)
             except AttributeError:
                 pass
-            else:
-                return
-        if self.__dict__.has_key(attr):
-            del(self.__dict__[attr])
-        else:
-            raise AttributeError(attr)
+        return object.__delattr__(self, attr)
             
     def __repr__(self):
         s = ""
@@ -653,7 +653,6 @@ Creates an EPS file describing a packet. If filename is not provided a temporary
         pkt.default_fields = self.copy_fields_dict(self.default_fields)
         pkt.time = self.time
         pkt.underlayer = self.underlayer
-        pkt.overload_fields = self.overload_fields.copy()
         pkt.post_transforms = self.post_transforms
         pkt.raw_packet_cache = self.raw_packet_cache
         pkt.raw_packet_cache_fields = self.copy_fields_dict(
@@ -1102,13 +1101,6 @@ class NoPayload(Packet):
         raise AttributeError(attr)
     def delfieldval(self, attr):
         raise AttributeError(attr)
-    def __getattr__(self, attr):
-        if attr in self.__dict__:
-            return self.__dict__[attr]
-        elif attr in self.__class__.__dict__:
-            return self.__class__.__dict__[attr]
-        else:
-            raise AttributeError, attr
     def hide_defaults(self):
         pass
     def __iter__(self):
@@ -1247,7 +1239,7 @@ def ls(obj=None):
         all.update(globals())
         objlst = sorted(conf.layers, key=lambda x: x.__name__)
         for o in objlst:
-            print "%-10s : %s" %(o.__name__,o.name)
+            print "%-10s : %s" %(o.__name__, o._name)
     else:
         is_pkt = isinstance(obj, Packet)
         if (isinstance(obj, type) and issubclass(obj, Packet)) or is_pkt:
diff --git a/scapy/plist.py b/scapy/plist.py
index c741ecb9220d9e2d4b5d12c1d437967bdfdfef91..460afbc401a99c7e58e6e5a382c41e7a054b1255 100644
--- a/scapy/plist.py
+++ b/scapy/plist.py
@@ -24,7 +24,7 @@ from scapy.arch import plt, MATPLOTLIB_INLINED, MATPLOTLIB_DEFAULT_PLOT_KARGS
 #############
 
 class PacketList(BasePacketList):
-    res = []
+    __slots__ = ["stats", "res", "listname"]
     def __init__(self, res=None, name="PacketList", stats=None):
         """create a packet list from a list of packets
            res: the list of packets
@@ -38,6 +38,8 @@ class PacketList(BasePacketList):
             res = res.res
         self.res = res
         self.listname = name
+    def __len__(self):
+        return len(self.res)
     def _elt2pkt(self, elt):
         return elt
     def _elt2sum(self, elt):
@@ -45,8 +47,7 @@ class PacketList(BasePacketList):
     def _elt2show(self, elt):
         return self._elt2sum(elt)
     def __repr__(self):
-#        stats=dict.fromkeys(self.stats,0) ## needs python >= 2.3  :(
-        stats = dict(map(lambda x: (x,0), self.stats))
+        stats = dict((x, 0) for x in self.stats)
         other = 0
         for r in self.res:
             f = 0
@@ -60,7 +61,7 @@ class PacketList(BasePacketList):
         s = ""
         ct = conf.color_theme
         for p in self.stats:
-            s += " %s%s%s" % (ct.packetlist_proto(p.name),
+            s += " %s%s%s" % (ct.packetlist_proto(p._name),
                               ct.punct(":"),
                               ct.packetlist_value(stats[p]))
         s += " %s%s%s" % (ct.packetlist_proto("Other"),
@@ -520,6 +521,7 @@ lfilter: truth function to apply to each packet to decide whether it will be dis
 
 
 class SndRcvList(PacketList):
+    __slots__ = []
     def __init__(self, res=None, name="Results", stats=None):
         PacketList.__init__(self, res, name, stats)
     def _elt2pkt(self, elt):
diff --git a/test/regression.uts b/test/regression.uts
index f6f6ebbc1a39a4c03e3e861149eeb9a3144ff8d6..fb329a78b57fea54ac00c214f83646373bffe155 100644
--- a/test/regression.uts
+++ b/test/regression.uts
@@ -218,15 +218,15 @@ assert(_ == '5\x00\x00\x14\x00\x01\x00\x00 \x00\xac\xe7\x7f\x00\x00\x01\x7f\x00\
 ~ field actionfield
 
 class TestAction(Packet):
+    __slots__ = ["_val", "_fld", "_priv1", "_priv2"]
     name = "TestAction"
     fields_desc = [ ActionField(ByteField("tst", 3), "my_action", priv1=1, priv2=2) ]
-    _val = None
-    _fld = None
-    _priv1 = None
-    _priv2 = None
+    def __init__(self, *args, **kargs):
+        self._val, self._fld, self._priv1, self._priv2 = None, None, None, None
+        super(TestAction, self).__init__(*args, **kargs)
     def my_action(self, val, fld, priv1, priv2):
         print "Action (%i)!" %val
-	self._val, self._fld, self._priv1, self._priv2 = val, fld, priv1, priv2
+        self._val, self._fld, self._priv1, self._priv2 = val, fld, priv1, priv2
 
 = Triggering action
 ~ field actionfield