diff --git a/voltha/adapters/dpoe_onu/dpoe_onu.py b/voltha/adapters/dpoe_onu/dpoe_onu.py
index 2bf9397..e53c30f 100644
--- a/voltha/adapters/dpoe_onu/dpoe_onu.py
+++ b/voltha/adapters/dpoe_onu/dpoe_onu.py
@@ -58,10 +58,10 @@
 from voltha.extensions.eoam.EOAM_TLV import DeviceId
 from voltha.extensions.eoam.EOAM_TLV import ClauseSubtypeEnum
 from voltha.extensions.eoam.EOAM_TLV import RuleOperatorEnum
-from voltha.extensions.eoam.EOAM_TLV import FirmwareInfo
+from voltha.extensions.eoam.EOAM_TLV import FirmwareInfo, CablelabsOUI
+from voltha.extensions.eoam.EOAM_TLV import DPoEOpcode_GetRequest, DPoEOpcode_SetRequest
+from voltha.extensions.eoam.EOAM_Layers import EOAMPayload
 
-from voltha.extensions.eoam.EOAM import EOAMPayload, CablelabsOUI
-from voltha.extensions.eoam.EOAM import DPoEOpcode_GetRequest, DPoEOpcode_SetRequest
 
 @implementer(IAdapterInterface)
 class DPoEOnuAdapter(object):
diff --git a/voltha/adapters/dpoe_onu/eoam_config.py b/voltha/adapters/dpoe_onu/eoam_config.py
index b69770b..ab96329 100644
--- a/voltha/adapters/dpoe_onu/eoam_config.py
+++ b/voltha/adapters/dpoe_onu/eoam_config.py
@@ -37,9 +37,8 @@
 
 # TODO should remove import *
 from EOAM_TLV import *
+from EOAM_Layers import EOAM_MULTICAST_ADDRESS, IGMP_MULTICAST_ADDRESS
 
-EOAM_MULTICAST_ADDRESS = '01:80:c2:00:00:02'
-IGMP_MULTICAST_ADDRESS = '01:00:5e:00:00:01'   # for test
 
 class EOAM():
     """ EOAM frame layer """
diff --git a/voltha/adapters/tibit_olt/tibit_olt.py b/voltha/adapters/tibit_olt/tibit_olt.py
index c2067b5..9fb4b28 100644
--- a/voltha/adapters/tibit_olt/tibit_olt.py
+++ b/voltha/adapters/tibit_olt/tibit_olt.py
@@ -17,7 +17,6 @@
 """
 Tibit OLT device adapter
 """
-import json
 import time
 from uuid import uuid4
 import struct
@@ -34,6 +33,8 @@
 from scapy.fields import XLongField, StrFixedLenField, XIntField, \
     FieldLenField, StrLenField, IntField
 
+
+
 from twisted.internet import reactor
 from twisted.internet.defer import DeferredQueue, inlineCallbacks
 from twisted.internet.task import LoopingCall
@@ -42,12 +43,14 @@
 from common.frameio.frameio import BpfProgramFilter, hexify
 from voltha.adapters.interface import IAdapterInterface
 
-from voltha.extensions.eoam.EOAM import EOAMPayload, EOAMEvent, EOAM_VendSpecificMsg
-from voltha.extensions.eoam.EOAM import EOAM_OmciMsg, EOAM_TibitMsg, EOAM_DpoeMsg
-from voltha.extensions.eoam.EOAM import OAM_ETHERTYPE
-from voltha.extensions.eoam.EOAM import CableLabs_OUI, Tibit_OUI, IEEE_OUI
-from voltha.extensions.eoam.EOAM import RxedOamMsgTypeEnum, Dpoe_Opcodes, get_oam_msg_type, \
-    handle_get_value, get_value_from_msg, check_set_resp, check_resp
+from voltha.extensions.eoam.EOAM_Layers import EOAMPayload, EOAM_EventMsg, EOAM_VendSpecificMsg
+from voltha.extensions.eoam.EOAM_Layers import EOAM_OmciMsg, EOAM_TibitMsg
+from voltha.extensions.eoam.EOAM_Layers import OAM_ETHERTYPE
+from voltha.extensions.eoam.EOAM_Layers import CABLELABS_OUI, TIBIT_OUI, ITU_OUI
+from voltha.extensions.eoam.EOAM_Layers import RxedOamMsgTypeEnum, RxedOamMsgTypes
+from voltha.extensions.eoam.EOAM import get_oam_msg_type, get_value_from_msg, check_set_resp, check_resp
+from voltha.extensions.eoam.EOAM import get_unicast_logical_link, get_olt_queue
+from voltha.extensions.eoam.EOAM import ADTRAN_SHORTENED_VSSN, TIBIT_SHORTENED_VSSN
 
 from voltha.extensions.eoam.EOAM_TLV import DOLTObject, \
      NetworkToNetworkPortObject, OLTUnicastLogicalLink, OLTEPONUnicastLogicalLink, \
@@ -58,11 +61,11 @@
      PortIngressRuleResultDelete, PortIngressRuleResultOLTQueue, \
      PortIngressRuleResultOLTBroadcastQueue, PortIngressRuleResultOLTEPONQueue, \
      PortIngressRuleTerminator, AddPortIngressRule, \
-     ItuOUI, PonPortObject
+     ItuOUI, PonPortObject, DPoEOpcodes
 from voltha.extensions.eoam.EOAM_TLV import PortIngressRuleHeader
-from voltha.extensions.eoam.EOAM_TLV import ClauseSubtypeEnum
-from voltha.extensions.eoam.EOAM_TLV import RuleOperatorEnum
-from voltha.extensions.eoam.EOAM_TLV import DPoEVariableResponseCodes, DPoEOpcodeEnum
+from voltha.extensions.eoam.EOAM_TLV import ClauseSubtypeEnum, RuleClauses
+from voltha.extensions.eoam.EOAM_TLV import RuleOperatorEnum, RuleOperators
+from voltha.extensions.eoam.EOAM_TLV import DPoEVariableResponseEnum, DPoEOpcodeEnum
 from voltha.extensions.eoam.EOAM_TLV import VendorName, OltMode, HardwareVersion, ManufacturerInfo
 from voltha.extensions.eoam.EOAM_TLV import TibitLinkMacTable, OltPonAdminStateSet, TibitDeviceReset
 from voltha.extensions.eoam.EOAM_TLV import SlowProtocolsSubtypeEnum
@@ -75,14 +78,6 @@
     TxFrame_65_127, TxFrame_128_255, TxFrame_256_511, \
     TxFrame_512_1023, TxFrame_1024_1518, TxFrame_1519Plus
 
-from voltha.extensions.eoam.EOAM_TLV import RxFramesGreen, TxFramesGreen, \
-    RxFrame_64, RxFrame_65_127, RxFrame_128_255, RxFrame_256_511, \
-    RxFrame_512_1023,RxFrame_1024_1518, RxFrame_1519Plus, \
-    TxFrame_64, TxFrame_65_127, TxFrame_128_255, \
-    TxFrame_256_511, TxFrame_512_1023, TxFrame_1024_1518, \
-    TxFrame_1519Plus
-
-
 
 from voltha.core.flow_decomposer import *
 from voltha.core.logical_device_agent import mac_str_to_tuple
@@ -101,35 +96,29 @@
 from voltha.registry import registry
 log = structlog.get_logger()
 
-TIBIT_ONU_LINK_INDEX = 2
 
 # Match on the MGMT VLAN, Priority 7
-TIBIT_MGMT_VLAN = 4090
-TIBIT_MGMT_PRIORITY = 7
-frame_match_case1 = 'ether[14:2] = 0x{:01x}{:03x}'.format(
-    TIBIT_MGMT_PRIORITY << 1, TIBIT_MGMT_VLAN)
+TIBIT_MGMT_VLAN       = 4090
+TIBIT_MGMT_PRIORITY   = 7
+frame_match_case1     = 'ether[14:2] = 0x{:01x}{:03x}'.format(TIBIT_MGMT_PRIORITY << 1, TIBIT_MGMT_VLAN)
 
-TIBIT_PACKET_IN_VLAN = 4000
-frame_match_case2 = '(ether[14:2] & 0xfff) = 0x{:03x}'.format(
-    TIBIT_PACKET_IN_VLAN)
+TIBIT_PACKET_IN_VLAN  = 4000
+frame_match_case2     = '(ether[14:2] & 0xfff) = 0x{:03x}'.format(TIBIT_PACKET_IN_VLAN)
 
 TIBIT_PACKET_OUT_VLAN = 4000
 
 TIBIT_MSG_WAIT_TIME = 3
 
-is_tibit_frame = BpfProgramFilter('{} or {}'.format(
-    frame_match_case1, frame_match_case2))
+is_tibit_frame = BpfProgramFilter('{} or {}'.format(frame_match_case1, frame_match_case2))
 
 
 # TODO: This information should be conveyed to the adapter
 # from a higher level.
 MULTICAST_VLAN = 140
 
-TIBIT_COMMUNICATIONS_OUI=u'000CE2'
-SUMITOMO_ELECTRIC_INDUSTRIES_OUI=u'0025DC'
+TIBIT_COMMUNICATIONS_OUI         = u'000CE2'
+SUMITOMO_ELECTRIC_INDUSTRIES_OUI = u'0025DC'
 
-ADTRAN_SHORTENED_VSSN=u'4144'                 # 'AD'
-TIBIT_SHORTENED_VSSN=u'5442'                 # 'TB'
 
 @implementer(IAdapterInterface)
 class TibitOltAdapter(object):
@@ -206,35 +195,20 @@
             self.incoming_queues[device.mac_address] = DeferredQueue(size=100)
 
             # add mac_address to device_ids table
-            olt_mac = device.mac_address
-            self.device_ids[olt_mac] = device.id
+            self.device_ids[device.mac_address] = device.id
 
             # send out ping to OLT device
-            ping_frame = self._make_ping_frame(mac_address=olt_mac)
-            self.io_port.send(ping_frame)
-
-            # Loop until we have a Get Response or timeout
-            ack = False
-            start_time = time.time()
-            while not ack:
-                frame = yield self.incoming_queues[olt_mac].get()
-                #TODO - Need to add proper timeout functionality
-                #if (time.time() - start_time) > TIBIT_MSG_WAIT_TIME or (frame is None):
-                #    break  # don't wait forever
-
-                respType = get_oam_msg_type(log, frame)
-             
-                if (respType == RxedOamMsgTypeEnum["DPoE Get Response"]):
-                    ack = True
-                else:
-                    # Handle unexpected events/OMCI messages
-                    check_resp(log, frame)
+            resp = []
+            action = "Get Device Info"
+            body = VendorName()/OltMode()/HardwareVersion()/ManufacturerInfo()
+            yield self._get_req_rsp(device, action, body, resp)
+            if resp is not []: frame = resp[0]
 
         except Exception as e:
             log.exception('launch device failed', e=e)
 
-        if ack:
-            # Process the Get Request message
+        if frame:
+            # Process the Get Response message
             self._process_ping_frame_response(device, frame)
 
             yield self.change_device_state(device, 1)
@@ -317,36 +291,19 @@
             # before checking for ONUs
             reactor.callLater(0.1, self._detect_onus, device)
 
-        # END if ack
+        # END if frame
+
 
     @inlineCallbacks
     def _detect_onus(self, device):
         # send out get 'links' to the OLT device
-        olt_mac = device.mac_address
-        links_frame = self._make_links_frame(mac_address=olt_mac)
-        self.io_port.send(links_frame)
+        resp = []
+        action = "Get Registered Links"
+        body = TibitLinkMacTable()
+        yield self._get_req_rsp(device, action, body, resp)
+        if resp is not []: frame = resp[0]
 
-
-        # Loop until we have a Get Response or timeout
-        ack = False
-        start_time = time.time()
-        while not ack:
-
-            frame = yield self.incoming_queues[olt_mac].get()
-
-            #TODO - Need to add proper timeout functionality
-            #if (time.time() - start_time) > TIBIT_MSG_WAIT_TIME or (frame is None):
-            #    break  # don't wait forever
-
-            respType = get_oam_msg_type(log, frame)
- 
-            if (respType == RxedOamMsgTypeEnum["DPoE Get Response"]):
-                ack = True
-            else:
-                # Handle unexpected events/OMCI messages
-                check_resp(log, frame)
-
-        if ack:
+        if frame:
             #Process the Get Response
             mac_table = [0xB7, 0x0103]
             links = []
@@ -360,7 +317,7 @@
                 temp_pair.append(value)
                 if rc:
                     overall_rc = True
-                else: 
+                else:
                     log.info('Failed to get valid response for Branch 0x{:X} Leaf 0x{:0>4X} '.format(temp_pair[0], temp_pair[1]))
 
             if overall_rc and mac_table[rc]:
@@ -373,11 +330,11 @@
                     if linkAddr is None:
                         log.info('MAC Addr is NONE')
                     elif linkAddr[:6].upper() == SUMITOMO_ELECTRIC_INDUSTRIES_OUI:
-                        onu_mac_string = linkAddr 
+                        onu_mac_string = linkAddr
                         log.info('SUMITOMO mac address %s' % str(linkAddr))
                         child_device_name = 'dpoe_onu'
                     elif linkAddr[:4].upper() == ADTRAN_SHORTENED_VSSN:
-                        onu_mac_string = linkAddr 
+                        onu_mac_string = linkAddr
                         log.info('ADTRAN mac address %s' % str(linkAddr))
                         child_device_name = 'adtran_onu'
                     else:
@@ -393,51 +350,29 @@
                         vlan_id = self._olt_side_onu_activation(mac_octet_4)
 
                         macLen += 6
-                
+
                         ## Automatically setup default downstream control frames flow (in this case VLAN 4000)
                         ## on the OLT for the new ONU/ONT device
-                        Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
-                        Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
 
-                        if self.mode.upper()[0] == "G":  # GPON
-                            if child_device_name is 'tibit_onu':
-                                vssn = "TBIT"
-                            elif child_device_name is 'adtran_onu':
-                                vssn = "ADTN"
-                            link = int(onu_mac_string[4:12], 16)
-                            resultOltQueue = "PortIngressRuleResultOLTQueue(unicastvssn=vssn, unicastlink=link)"
-                        else:                       # EPON
-                            vssn = int(onu_mac_string[0:8].rjust(8,"0"), 16)
-                            link = int((onu_mac_string[8:12]).ljust(8,"0"), 16)
-                            resultOltQueue = "PortIngressRuleResultOLTEPONQueue(unicastvssn=vssn, unicastlink=link)"
-
-                        packet_out_rule = (
-                            Ether(dst=device.mac_address) /
-                            Dot1Q(vlan=TIBIT_MGMT_VLAN, prio=TIBIT_MGMT_PRIORITY) /
-                            EOAMPayload() / EOAM_VendSpecificMsg(oui=Tibit_OUI) /
-                            EOAM_TibitMsg(dpoe_opcode=Dpoe_Opcodes["Set Request"],
-                                body=NetworkToNetworkPortObject()/
-                                PortIngressRuleHeader(precedence=13)/
-                                PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                                                   operator=Operator['=='],
-                                                                   match=TIBIT_PACKET_OUT_VLAN)/
-                                PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=1,
-                                                                   operator=Operator['=='], match=vlan_id)/
-                                eval(resultOltQueue)/
-                                PortIngressRuleResultForward()/
-                                PortIngressRuleResultDelete(fieldcode=Clause['C-VLAN Tag'])/
-                                PortIngressRuleTerminator()/
-                                AddPortIngressRule())/
-                            EndOfPDU()
-                            )
-
+                        resultOltQueue = get_olt_queue(onu_mac_string, self.mode)
                         action = "Set DS Rule for ONU to strip C Tag"
-                        log.info('OLT-send to {} for OLT: {}'.format(action, olt_mac))
-                        self.io_port.send(str(packet_out_rule))
+
+                        body=NetworkToNetworkPortObject()
+                        body/=PortIngressRuleHeader(precedence=13)
+                        body/=PortIngressRuleClauseMatchLength02(fieldcode=RuleClauses['C-VLAN Tag'], fieldinstance=0,
+                                                           operator=RuleOperators['=='],
+                                                           match=TIBIT_PACKET_OUT_VLAN)
+                        body/=PortIngressRuleClauseMatchLength02(fieldcode=RuleClauses['C-VLAN Tag'], fieldinstance=1,
+                                                           operator=RuleOperators['=='], match=vlan_id)
+                        body/=eval(resultOltQueue)
+                        body/=PortIngressRuleResultForward()
+                        body/=PortIngressRuleResultDelete(fieldcode=RuleClauses['C-VLAN Tag'])
+                        body/=PortIngressRuleTerminator()
+                        body/=AddPortIngressRule()
 
                         # Get and process the Set Response
                         rc = []
-                        yield self._handle_set_resp(olt_mac, action, rc)
+                        yield self._set_req_rsp(device, action, body, rc)
 
                         if rc[0] is True:
                             # also record the vlan_id -> (device_id, logical_device_id, linkid) for
@@ -462,7 +397,7 @@
                     # END linkAddr is not none
             else:
                 log.info('No links were found in the MAC Table')
-				# Poll to get more ONUs
+		        # Poll to get more ONUs
                 reactor.callLater(3, self._detect_onus, device)
 
             # END if mac_table[rc]
@@ -549,29 +484,15 @@
                 log.info('received-dot1q-not-8100')
                 self.incoming_queues[response.src].put(response)
 
-    def _make_ping_frame(self, mac_address):
-        frame = (
-            Ether(dst=mac_address) /
-            Dot1Q(vlan=TIBIT_MGMT_VLAN, prio=TIBIT_MGMT_PRIORITY) /
-            EOAMPayload() / EOAM_VendSpecificMsg(oui=Tibit_OUI) /
-            EOAM_TibitMsg(dpoe_opcode=Dpoe_Opcodes["Get Request"],body=VendorName() /
-                                                OltMode() /
-                                                HardwareVersion() /
-                                                ManufacturerInfo()
-                                                ) /
-            EndOfPDU()
-            )
-
-        return str(frame)
 
     def _process_ping_frame_response(self, device, frame):
 
-        vendor = [0xD7, 0x0011]
-        oltMode = [0xB7, 0x0101]
-        hw_version = [0xD7, 0x0013]
-        manufacturer =  [0xD7, 0x0006]
+        vendor       = [VendorName().branch, VendorName().leaf]
+        oltMode      = [OltMode().branch, OltMode().leaf]
+        hw_version   = [HardwareVersion().branch, HardwareVersion().leaf]
+        manufacturer = [ManufacturerInfo().branch, ManufacturerInfo().leaf]
         branch_leaf_pairs = [vendor, oltMode, hw_version, manufacturer]
-                    
+
         for pair in branch_leaf_pairs:
             temp_pair = pair
             (rc, value) = (get_value_from_msg(log, frame, pair[0], pair[1]))
@@ -579,7 +500,7 @@
             temp_pair.append(value)
             if rc:
                 overall_rc = True
-            else: 
+            else:
                 log.info('Failed to get valid response for Branch 0x{:X} Leaf 0x{:0>4X} '.format(temp_pair[0], temp_pair[1]))
                 ack = True
 
@@ -589,9 +510,9 @@
                 device.vendor = device.vendor[:-1]
         else:
             device.vendor = "UNKNOWN"
-            
+
         # mode: 3 = EPON OLT, 7 = GPON OLT
-        # mode: 2 = EPON ONU, 6 = GPON ONU    
+        # mode: 2 = EPON ONU, 6 = GPON ONU
         if oltMode[rc]:
             value = oltMode.pop()
             mode = "UNKNOWN"
@@ -614,7 +535,7 @@
             self.mode = "UNKNOWN"
 
         log.info("OLT Mode is {}".format(self.mode))
-                
+
         if hw_version[rc]:
             device.hardware_version = hw_version.pop()
             device.hardware_version = device.hardware_version.replace("FA","")
@@ -640,90 +561,12 @@
         device.root = True
         device.connect_status = ConnectStatus.REACHABLE
 
-    def _make_links_frame(self, mac_address):
-        frame = (
-            Ether(dst=mac_address) /
-            Dot1Q(vlan=TIBIT_MGMT_VLAN, prio=TIBIT_MGMT_PRIORITY) /
-            EOAMPayload() / EOAM_VendSpecificMsg(oui=Tibit_OUI) /
-            EOAM_TibitMsg(dpoe_opcode=Dpoe_Opcodes["Get Request"],body=TibitLinkMacTable()
-                            )/
-            EndOfPDU()
-            )
-        return str(frame)
-
-    def _make_link_stats_frame(self, olt_mac_address, onu_mac_address):
-
-        if self.mode.upper()[0] == "G":  # GPON
-            vssn = "TBIT"
-            link = int(onu_mac_address[4:12], 16)
-            logical_link = "OLTUnicastLogicalLink(unicastvssn=vssn, unicastlink=link)"
-        else:                       # EPON
-            vssn = int(onu_mac_address[0:8].rjust(8,"0"), 16)
-            link = int((onu_mac_address[8:12]).ljust(8,"0"), 16)
-            logical_link = "OLTEPONUnicastLogicalLink(unicastvssn=vssn, unicastlink=link)"
-
-        frame = (
-            Ether(dst=olt_mac_address) /
-            Dot1Q(vlan=TIBIT_MGMT_VLAN, prio=TIBIT_MGMT_PRIORITY) /
-            EOAMPayload() / EOAM_VendSpecificMsg(oui=Tibit_OUI) /
-            EOAM_TibitMsg(dpoe_opcode=Dpoe_Opcodes["Get Request"],
-                          body=eval(logical_link)/
-                                #RxFramesGreen()/
-                                #TxFramesGreen()/
-                                RxFrame_64()/
-                                RxFrame_65_127()/
-                                RxFrame_128_255()/
-                                RxFrame_256_511()/
-                                RxFrame_512_1023()/
-                                RxFrame_1024_1518()/
-                                RxFrame_1519Plus()/
-                                TxFrame_64()/
-                                TxFrame_65_127()/
-                                TxFrame_128_255()/
-                                TxFrame_256_511()/
-                                TxFrame_512_1023()/
-                                TxFrame_1024_1518()/
-                                TxFrame_1519Plus()
-                            )/
-            EndOfPDU()
-            )
-
-        return str(frame)
-
-    def _make_nni_stats_frame(self, mac_address):
-        frame = (
-            Ether(dst=mac_address) /
-            Dot1Q(vlan=TIBIT_MGMT_VLAN, prio=TIBIT_MGMT_PRIORITY) /
-            EOAMPayload() / EOAM_VendSpecificMsg(oui=Tibit_OUI) /
-            EOAM_TibitMsg(dpoe_opcode=Dpoe_Opcodes["Get Request"], body=NetworkToNetworkPortObject()/
-                                #RxFramesGreen()/
-                                #TxFramesGreen()/
-                                RxFrame_64()/
-                                RxFrame_65_127()/
-                                RxFrame_128_255()/
-                                RxFrame_256_511()/
-                                RxFrame_512_1023()/
-                                RxFrame_1024_1518()/
-                                RxFrame_1519Plus()/
-                                TxFrame_64()/
-                                TxFrame_65_127()/
-                                TxFrame_128_255()/
-                                TxFrame_256_511()/
-                                TxFrame_512_1023()/
-                                TxFrame_1024_1518()/
-                                TxFrame_1519Plus()
-                            )/
-            EndOfPDU()
-            )
-        return str(frame)
 
     def abandon_device(self, device):
-        raise NotImplementedError(0
-                                  )
+        raise NotImplementedError(0)
+
     @inlineCallbacks
     def disable_device(self, device):
-        log.info('Disabling OLT: {}'.format(device.mac_address))
-        yield self.change_device_state(device, 0)
 
         # Update the operational status to UNKNOWN
         device.oper_status = OperStatus.UNKNOWN
@@ -746,6 +589,10 @@
         self.adapter_agent.disable_all_ports(device.id)
         log.info('disabled', device_id=device.id)
 
+        # Update the device last
+        log.info('Disabling OLT: {}'.format(device.mac_address))
+        yield self.change_device_state(device, 0)
+
 
     @inlineCallbacks
     def reenable_device(self, device):
@@ -833,22 +680,11 @@
         self.adapter_agent.update_child_devices_state(device.id,
                                                       connect_status=ConnectStatus.UNREACHABLE)
 
-        msg = (
-            Ether(dst=device.mac_address) /
-            Dot1Q(vlan=TIBIT_MGMT_VLAN, prio=TIBIT_MGMT_PRIORITY) /
-            EOAMPayload() / EOAM_VendSpecificMsg(oui=Tibit_OUI) /
-            EOAM_TibitMsg(dpoe_opcode = Dpoe_Opcodes["Set Request"], 
-                          body=TibitDeviceReset())/
-            EndOfPDU()
-            )
-        olt_mac = device.mac_address
+        # Send the Device Reset
         action = "Device Reset"
-        log.info('OLT-send to {} for OLT: {}'.format(action, olt_mac))
-        self.io_port.send(str(msg))
-
-        # Get and process the Set Response
         rc = []
-        yield self._handle_set_resp(olt_mac, action, rc)
+        tlvs = TibitDeviceReset()
+        yield self._set_req_rsp(device, action, tlvs, rc)
 
         # Change the operational status back to its previous state.
         device.oper_status = previous_oper_status
@@ -910,9 +746,6 @@
         _inner_vid = None
         olt_mac = device.mac_address
 
-        Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
-        Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
-
         for flow in flows.items:
 
             try:
@@ -932,8 +765,8 @@
                             _type = field.eth_type
                             log.info('#### field.type == ETH_TYPE ####')
                             dn_req /= PortIngressRuleClauseMatchLength02(
-                                fieldcode=Clause['L2 Type/Len'],
-                                operator=Operator['=='],
+                                fieldcode=RuleClauses['L2 Type/Len'],
+                                operator=RuleOperators['=='],
                                 match=_type)
 
                         elif field.type == IP_PROTO:
@@ -974,6 +807,8 @@
                             raise NotImplementedError('field.type={}'.format(
                                 field.type))
 
+                    ruleInnerVidNotSet = False;
+
                     for action in get_actions(flow):
 
                         if action.type == OUTPUT:
@@ -985,39 +820,32 @@
                                 serial = _inner_vid - 200
                                 mac_address = self.vlan_to_device_ids[_inner_vid][2].upper()
 
-                                if self.mode.upper()[0] == "G":  # GPON
-                                    vssn = "TBIT"
-                                    link = int(mac_address[4:12], 16)
-                                    resultOltQueue = "PortIngressRuleResultOLTQueue(unicastvssn=vssn, unicastlink=link)"
-                                else:                       # EPON
-                                    vssn = int(mac_address[0:8].rjust(8,"0"), 16)
-                                    link = int((mac_address[8:12]).ljust(8,"0"), 16)
-                                    resultOltQueue = "PortIngressRuleResultOLTEPONQueue(unicastvssn=vssn, unicastlink=link)"
-
+                                resultOltQueue = get_olt_queue(mac_address, self.mode)
                                 dn_req /= eval(resultOltQueue)
 
                             elif _inner_vid is None:
+                                ruleInnerVidNotSet = True
                                 log.info('#### action.type == OUTPUT INNER VID is NONE ####')
 
                         elif action.type == POP_VLAN:
                             log.info('#### action.type == POP_VLAN ####')
                             if _outer_vid == MULTICAST_VLAN:
-                                dn_req /= PortIngressRuleResultDelete(fieldcode=Clause['C-VLAN Tag'])
-                                dn_req /= PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                                                             operator=Operator['=='], match=_outer_vid)
+                                dn_req /= PortIngressRuleResultDelete(fieldcode=RuleClauses['C-VLAN Tag'])
+                                dn_req /= PortIngressRuleClauseMatchLength02(fieldcode=RuleClauses['C-VLAN Tag'], fieldinstance=0,
+                                                                             operator=RuleOperators['=='], match=_outer_vid)
                             else:
-                                dn_req /= PortIngressRuleResultDelete(fieldcode=Clause['C-VLAN Tag'])
-                                dn_req /= PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                                                             operator=Operator['=='], match=_outer_vid)
-                                dn_req /= PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=1,
-                                                                             operator=Operator['=='], match=_inner_vid)
+                                dn_req /= PortIngressRuleResultDelete(fieldcode=RukeClauses['C-VLAN Tag'])
+                                dn_req /= PortIngressRuleClauseMatchLength02(fieldcode=RuleClauses['C-VLAN Tag'], fieldinstance=0,
+                                                                             operator=RuleOperators['=='], match=_outer_vid)
+                                dn_req /= PortIngressRuleClauseMatchLength02(fieldcode=RuleClauses['C-VLAN Tag'], fieldinstance=1,
+                                                                             operator=RuleOperators['=='], match=_inner_vid)
 
                         elif action.type == PUSH_VLAN:
                             log.info('#### action.type == PUSH_VLAN ####')
                             if action.push.ethertype != 0x8100:
                                 log.error('unhandled-tpid',
                                           ethertype=action.push.ethertype)
-                                dn_req /= PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])
+                                dn_req /= PortIngressRuleResultInsert(fieldcode=RuleClauses['C-VLAN Tag'])
 
                         elif action.type == SET_FIELD:
                             log.info('#### action.type == SET_FIELD ####')
@@ -1025,8 +853,11 @@
                                     ofp.OFPXMC_OPENFLOW_BASIC)
                             field = action.set_field.field.ofb_field
                             if field.type == VLAN_VID:
+                                # need to convert value in Set to a variable length value
+                                ctagStr = struct.pack('>H', (field.vlan_vid & 0xfff))
+
                                 dn_req /= PortIngressRuleResultSet(
-                                    fieldcode=Clause['C-VLAN Tag'], value=field.vlan_vid & 0xfff)
+                                    fieldcode=RuleClauses['C-VLAN Tag'], value=ctagStr)
                             else:
                                 log.error('unsupported-action-set-field-type',
                                           field_type=field.type)
@@ -1034,25 +865,18 @@
                             log.error('UNSUPPORTED-ACTION-TYPE',
                                       action_type=action.type)
 
+                    # Don't send the rule if a Queue was not set in the Port Ingress Rule
+                    if ruleInnerVidNotSet == True:
+                        continue
+
                     dn_req /= PortIngressRuleTerminator()
                     dn_req /= AddPortIngressRule()
 
-                    msg = (
-                        Ether(dst=device.mac_address) /
-                        Dot1Q(vlan=TIBIT_MGMT_VLAN, prio=TIBIT_MGMT_PRIORITY) /
-                        EOAMPayload() / EOAM_VendSpecificMsg(oui=Tibit_OUI) /
-                        EOAM_TibitMsg(dpoe_opcode = Dpoe_Opcodes["Set Request"], body=dn_req)/
-                        EndOfPDU()
-                    )
-
-                    # Send OAM Request
-                    action = "Set DS Rule"
-                    log.info('OLT-send to {} for OLT: {}'.format(action, olt_mac))
-                    self.io_port.send(str(msg))
-
                     # Get and process the Set Response
+                    action = "Set DS Rule"
                     rc = []
-                    yield self._handle_set_resp(olt_mac, action, rc)
+                    yield self._set_req_rsp(device, action, dn_req, rc)
+
 
                 elif in_port == 1:
                     # Upstream rule
@@ -1071,13 +895,13 @@
                             log.info('#### field.type == ETH_TYPE ####', in_port=in_port,
                                      match=_type)
                             up_req_pon /= PortIngressRuleClauseMatchLength02(
-                                fieldcode=Clause['L2 Type/Len'],
-                                operator=Operator['=='],
+                                fieldcode=RuleClauses['L2 Type/Len'],
+                                operator=RuleOperators['=='],
                                 match=_type)
 
                             up_req_link /= PortIngressRuleClauseMatchLength02(
-                                fieldcode=Clause['L2 Type/Len'],
-                                operator=Operator['=='],
+                                fieldcode=RuleClauses['L2 Type/Len'],
+                                operator=RuleOperators['=='],
                                 match=_type)
 
                         elif field.type == IP_PROTO:
@@ -1086,12 +910,12 @@
                                      ip_proto=_proto)
 
                             up_req_pon /= PortIngressRuleClauseMatchLength01(
-                                fieldcode=Clause['IPv4/IPv6 Protocol Type'],
-                                operator=Operator['=='], match=_proto)
+                                fieldcode=RuleClauses['IPv4/IPv6 Protocol Type'],
+                                operator=RuleOperators['=='], match=_proto)
 
                             up_req_link /= PortIngressRuleClauseMatchLength01(
-                                fieldcode=Clause['IPv4/IPv6 Protocol Type'],
-                                operator=Operator['=='], match=_proto)
+                                fieldcode=RuleClauses['IPv4/IPv6 Protocol Type'],
+                                operator=RuleOperators['=='], match=_proto)
 
                         elif field.type == IN_PORT:
                             _port = field.port
@@ -1101,26 +925,18 @@
                             _vlan_vid = field.vlan_vid & 0xfff
                             log.info('#### field.type == VLAN_VID ####')
                             up_req_pon /= PortIngressRuleClauseMatchLength02(
-                                fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                operator=Operator['=='], match=_vlan_vid)
+                                fieldcode=RuleClauses['C-VLAN Tag'], fieldinstance=0,
+                                operator=RuleOperators['=='], match=_vlan_vid)
 
                             serial = _vlan_vid - 200
                             mac_address = self.vlan_to_device_ids[_vlan_vid][2].upper()
 
-                            if self.mode.upper()[0] == "G":  # GPON
-                                vssn = "TBIT"
-                                link = int(mac_address[4:12], 16)
-                                logical_link = "OLTUnicastLogicalLink(unicastvssn=vssn, unicastlink=link)"
-                            else:                       # EPON
-                                vssn = int(mac_address[0:8].rjust(8,"0"), 16)
-                                link = int((mac_address[8:12]).ljust(8,"0"), 16)
-                                logical_link = "OLTEPONUnicastLogicalLink(unicastvssn=vssn, unicastlink=link)"
-
+                            logical_link = get_unicast_logical_link(mac_address, self.mode)
                             up_req_link /= eval(logical_link)
-                            
+
                             up_req_link /= PortIngressRuleClauseMatchLength02(
-                                fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                operator=Operator['=='], match=_vlan_vid)
+                                fieldcode=RuleClauses['C-VLAN Tag'], fieldinstance=0,
+                                operator=RuleOperators['=='], match=_vlan_vid)
                             field_match_vlan_upstream_with_link = True
 
 
@@ -1131,10 +947,10 @@
                         elif field.type == UDP_DST:
                             _udp_dst = field.udp_dst
                             log.info('#### field.type == UDP_DST ####')
-                            up_req_pon /= (PortIngressRuleClauseMatchLength02(fieldcode=Clause['TCP/UDP source port'],
-                                                                              operator=Operator['=='], match=0x0044)/
-                                           PortIngressRuleClauseMatchLength02(fieldcode=Clause['TCP/UDP destination port'],
-                                                                              operator=Operator['=='], match=0x0043))
+                            up_req_pon /= (PortIngressRuleClauseMatchLength02(fieldcode=RuleClauses['TCP/UDP source port'],
+                                                                              operator=RuleOperators['=='], match=0x0044)/
+                                           PortIngressRuleClauseMatchLength02(fieldcode=RuleClauses['TCP/UDP destination port'],
+                                                                              operator=RuleOperators['=='], match=0x0043))
 
                         elif field.type == UDP_SRC:
                             _udp_src = field.udp_src
@@ -1160,10 +976,10 @@
                                 log.error('unhandled-ether-type',
                                           ethertype=action.push.ethertype)
                             if field_match_vlan_upstream_with_link == True:
-                                up_req_link /= PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'],
+                                up_req_link /= PortIngressRuleResultInsert(fieldcode=RuleClauses['C-VLAN Tag'],
                                                                       fieldinstance=1)
                             else:
-                                up_req_pon /= PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'],
+                                up_req_pon /= PortIngressRuleResultInsert(fieldcode=RuleClauses['C-VLAN Tag'],
                                                                       fieldinstance=0)
 
                         elif action.type == SET_FIELD:
@@ -1173,13 +989,16 @@
                             field = action.set_field.field.ofb_field
                             if field.type == VLAN_VID:
                                 if field_match_vlan_upstream_with_link == True:
-                                    up_req_link /=(PortIngressRuleResultCopy(fieldcode=Clause['C-VLAN Tag'])/
-                                                   PortIngressRuleResultReplace(fieldcode=Clause['C-VLAN Tag']))
+                                    up_req_link /=(PortIngressRuleResultCopy(fieldcode=RuleClauses['C-VLAN Tag'])/
+                                                   PortIngressRuleResultReplace(fieldcode=RuleClauses['C-VLAN Tag']))
+
+                                # need to convert value in Set to a variable length value
+                                ctagStr = struct.pack('>H', (field.vlan_vid & 0xfff))
 
                                 up_req_pon /= PortIngressRuleResultSet(
-                                    fieldcode=Clause['C-VLAN Tag'], value=field.vlan_vid & 0xfff)
+                                    fieldcode=RuleClauses['C-VLAN Tag'], value=ctagStr)
                                 up_req_link /= PortIngressRuleResultSet(
-                                    fieldcode=Clause['C-VLAN Tag'], value=field.vlan_vid & 0xfff)
+                                    fieldcode=RuleClauses['C-VLAN Tag'], value=ctagStr)
                             else:
                                 log.error('unsupported-action-set-field-type',
                                           field_type=field.type)
@@ -1196,22 +1015,10 @@
                     up_req /= PortIngressRuleTerminator()
                     up_req /= AddPortIngressRule()
 
-                    msg = (
-                        Ether(dst=device.mac_address) /
-                        Dot1Q(vlan=TIBIT_MGMT_VLAN, prio=TIBIT_MGMT_PRIORITY) /
-                        EOAMPayload() / EOAM_VendSpecificMsg(oui=Tibit_OUI) /
-                        EOAM_TibitMsg(dpoe_opcode = Dpoe_Opcodes["Set Request"], body=up_req)/
-                        EndOfPDU()
-                    )
-
-                    # Send OAM Request
-                    action = "Set US Rule"
-                    log.info('OLT-send to {} for OLT: {}'.format(action, olt_mac))
-                    self.io_port.send(str(msg))
-
                     # Get and process the Set Response
+                    action = "Set US Rule"
                     rc = []
-                    yield self._handle_set_resp(olt_mac, action, rc)
+                    yield self._set_req_rsp(device, action, up_req, rc)
 
                 else:
                     raise Exception('Port should be 1 or 2 by our convention')
@@ -1246,7 +1053,7 @@
             frame = Ether(dst=device.mac_address) / \
               Dot1Q(vlan=TIBIT_MGMT_VLAN, prio=TIBIT_MGMT_PRIORITY) / \
               Dot1Q(vlan=proxy_address.channel_id, prio=TIBIT_MGMT_PRIORITY) / \
-              EOAMPayload() / EOAM_VendSpecificMsg(oui=IEEE_OUI) / \
+              EOAMPayload() / EOAM_VendSpecificMsg(oui=ITU_OUI) / \
               encapsulated_omci /\
               EndOfPDU()
 
@@ -1273,7 +1080,7 @@
         self.io_port.send(str(frame))
 
     def receive_inter_adapter_message(self, msg):
-        raise NotImplementedError()    
+        raise NotImplementedError()
 
     def suppress_alarm(self, filter):
         raise NotImplementedError()
@@ -1295,16 +1102,28 @@
             nni_metrics = []
 
             branch_leaf_pairs = [
-                            #[0xD7, 0x0201,], [0xD7, 0x0202], 
-                            [0xD7, 0x0204, "rx_64"], [0xD7, 0x0205, "rx_65_127"], 
-                            [0xD7, 0x0206, "rx_128_255"], [0xD7, 0x0207, "rx_256_511"],
-                            [0xD7, 0x0208, "rx_512_1023"], [0xD7, 0x0209, "rx_1024_1518"],
-                            [0xD7, 0x020A, "rx_1519_9k"], [0xD7, 0x020B, "tx_64"],
-                            [0xD7, 0x020C, "tx_65_127"], [0xD7, 0x020D, "tx_128_255"],
-                            [0xD7, 0x020E, "tx_256_511"], [0xD7, 0x020F, "tx_512_1023"],
-                            [0xD7, 0x0210, "tx_1024_1518"], [0xD7, 0x0211, "tx_1519_9k"]]
+                            [RxFrame_64().branch,        RxFrame_64().leaf,        "rx_64"],
+                            [RxFrame_65_127().branch,    RxFrame_65_127().leaf,    "rx_65_127"],
+                            [RxFrame_128_255().branch,   RxFrame_128_255().leaf,   "rx_128_255"],
+                            [RxFrame_256_511().branch,   RxFrame_256_511().leaf,   "rx_256_511"],
+                            [RxFrame_512_1023().branch,  RxFrame_512_1023().leaf,  "rx_512_1023"],
+                            [RxFrame_1024_1518().branch, RxFrame_1024_1518().leaf, "rx_1024_1518"],
+                            [RxFrame_1519Plus().branch,  RxFrame_1519Plus().leaf,  "rx_1519_9k"],
 
-            olt_mac = next((mac for mac, device in self.device_ids.iteritems() if device == device_id), None)
+                            [TxFrame_64().branch,        TxFrame_64().leaf,        "tx_64"],
+                            [TxFrame_65_127().branch,    TxFrame_65_127().leaf,    "tx_65_127"],
+                            [TxFrame_128_255().branch,   TxFrame_128_255().leaf,   "tx_128_255"],
+                            [TxFrame_256_511().branch,   TxFrame_256_511().leaf,   "tx_256_511"],
+                            [TxFrame_512_1023().branch,  TxFrame_512_1023().leaf,  "tx_512_1023"],
+                            [TxFrame_1024_1518().branch, TxFrame_1024_1518().leaf, "tx_1024_1518"],
+                            [TxFrame_1519Plus().branch,  TxFrame_1519Plus().leaf,  "tx_1519_9k"]
+                            ]
+
+            stats_tlvs =  RxFrame_64()/RxFrame_65_127()/RxFrame_128_255()/RxFrame_256_511()/RxFrame_512_1023()/RxFrame_1024_1518()/RxFrame_1519Plus()
+            stats_tlvs /= TxFrame_64()/TxFrame_65_127()/TxFrame_128_255()/TxFrame_256_511()/TxFrame_512_1023()/TxFrame_1024_1518()/TxFrame_1519Plus()
+
+            # Get the latest device reference
+            device = self.adapter_agent.get_device(device_id)
 
             try:
                 # Step 1: gather metrics from device
@@ -1315,30 +1134,17 @@
                     log.info('link stats frame', links=self.vlan_to_device_ids[vlan_id])
 
                     # send out link_stats_frame
-                    mac_address = self.vlan_to_device_ids[vlan_id][2].upper()
+                    onu_mac_address = self.vlan_to_device_ids[vlan_id][2].upper()
 
-                    link_stats_frame = self._make_link_stats_frame(olt_mac_address=olt_mac, onu_mac_address=mac_address)
-        
-                    self.io_port.send(link_stats_frame)
+                    logical_link = get_unicast_logical_link(onu_mac_address, self.mode)
 
-                    # Loop until we have a Get Response or timeout
-                    ack = False
-                    start_time = time.time()
-                    while not ack:
-                        frame = yield self.incoming_queues[olt_mac].get()
-                        #TODO - Need to add proper timeout functionality
-                        #if (time.time() - start_time) > TIBIT_MSG_WAIT_TIME or (frame is None):
-                        #    break  # don't wait forever
+                    resp = []
+                    action = "Get Link Stats"
+                    tlvs = eval(logical_link)/stats_tlvs
+                    yield self._get_req_rsp(device, action, tlvs, resp)
+                    if resp is not []: frame = resp[0]
 
-                        respType = get_oam_msg_type(log, frame)
-                 
-                        if (respType == RxedOamMsgTypeEnum["DPoE Get Response"]):
-                            ack = True
-                        else:
-                            # Handle unexpected events/OMCI messages
-                            check_resp(log, frame)
-
-                    if ack:
+                    if frame:
                         # Process the Get Request message
                         log.info('Received Link Stats Get Response Frame')
 
@@ -1357,30 +1163,16 @@
 
                 log.info('nni stats frame')
 
-                link_stats_frame = self._make_nni_stats_frame(mac_address=olt_mac)
-                self.io_port.send(link_stats_frame)
+                resp = []
+                action = "Get NNI Stats"
+                tlvs=NetworkToNetworkPortObject()/stats_tlvs
+                yield self._get_req_rsp(device, action, tlvs, resp)
+                if resp is not []: frame = resp[0]
 
-                # Loop until we have a Get Response or timeout
-                ack = False
-                start_time = time.time()
-                while not ack:
-                    frame = yield self.incoming_queues[olt_mac].get()
-                    #TODO - Need to add proper timeout functionality
-                    #if (time.time() - start_time) > TIBIT_MSG_WAIT_TIME or (frame is None):
-                    #    break  # don't wait forever
-
-                    respType = get_oam_msg_type(log, frame)
-             
-                    if (respType == RxedOamMsgTypeEnum["DPoE Get Response"]):
-                        ack = True
-                    else:
-                        # Handle unexpected events/OMCI messages
-                        check_resp(log, frame)
-
-                if ack:
+                if frame:
                     # Process the Get Response message
                     log.info('Recieved NNI Stats Get Response Frame')
-                                
+
                     for pair in branch_leaf_pairs:
                         (rc, value) = (get_value_from_msg(log, frame, pair[0], pair[1]))
                         if rc:
@@ -1426,26 +1218,79 @@
         lc.start(interval=15)  # TODO make this configurable
 
 
-    # Methods for Get / Set  Response Processing from eoam_messages
+    @inlineCallbacks
+    def change_device_state(self, device, state=0):
+        if state is 0:
+            stateStr = "disabled"
+        else:
+            stateStr = "enabled"
+        action = "Set PON Admin State to " + stateStr
+
+        # Get and process the Set Response
+        rc = []
+        tlvs = PonPortObject()/OltPonAdminStateSet(value=state)
+        yield self._set_req_rsp(device, action, tlvs, rc)
+
+
+    # Generic Request handlers
+
+    def _build_tibit_oam_msg(self, mac_addr, opcode, body):
+        msg = (
+            Ether(dst=mac_addr) /
+            Dot1Q(vlan=TIBIT_MGMT_VLAN, prio=TIBIT_MGMT_PRIORITY) /
+            EOAMPayload() / EOAM_VendSpecificMsg(oui=TIBIT_OUI) /
+            EOAM_TibitMsg(dpoe_opcode = opcode, body=body)/
+            EndOfPDU()
+            )
+        return msg
+
 
     @inlineCallbacks
-    def _handle_set_resp(self, olt_mac, action, retcode):
-        # Get and process the Set Response
+    def _get_req_rsp(self, device, action, body, resp):
+        msg = self._build_tibit_oam_msg(device.mac_address, DPoEOpcodes["Get Request"], body)
+        log.info('Send to {} for {}: {}'.format(action, device.model, device.mac_address))
+
+        self.io_port.send(str(msg))
+
+        # Loop until we have a Get Response or timeout
         ack = False
-
-        # Loop until we have a set response
+        start_time = time.time()
         while not ack:
-            frame = yield self.incoming_queues[olt_mac].get()
-
+            frame = yield self.incoming_queues[device.mac_address].get()
             #TODO - Need to add proper timeout functionality
+            #if (time.time() - start_time) > TIBIT_MSG_WAIT_TIME or (frame is None):
+            #    break  # don't wait forever
 
             respType = get_oam_msg_type(log, frame)
-            log.info('Received OAM Message 0x %s' % str(respType))
+
+            if (respType == RxedOamMsgTypeEnum["DPoE Get Response"]):
+                ack = True
+                resp.append(frame)
+            else:
+                # Handle unexpected events/OMCI messages
+                check_resp(log, frame)
+
+
+    @inlineCallbacks
+    def _handle_set_resp(self, device, action, retcode):
+        # Get and process the Set Response
+        ack = False
+        #start_time = time.time()
+
+        # Loop until we have a set response or timeout
+        while not ack:
+            frame = yield self.incoming_queues[device.mac_address].get()
+            #TODO - Need to add proper timeout functionality
+            #if (time.time() - start_time) > TIBIT_MSG_WAIT_TIME or (frame is None):
+            #    break  # don't wait forever
+
+            respType = get_oam_msg_type(log, frame)
 
             #Check that the message received is a Set Response
             if (respType == RxedOamMsgTypeEnum["DPoE Set Response"]):
                 ack = True
             else:
+                log.info('Received Unexpected OAM Message 0x{:X} while waiting for Set Resp for {}'.format(respType,action))
                 # Handle unexpected events/OMCI messages
                 check_resp(log, frame)
 
@@ -1454,38 +1299,23 @@
         if ack:
             (rc,branch,leaf,status) = check_set_resp(log, frame)
             if (rc is False):
-                log.info('Set Response had errors - Branch 0x{:X} Leaf 0x{:0>4X} {}'.format(branch, leaf, DPoEVariableResponseCodes[status]))
-        
-        if (rc is True):
-            log.info('OLT-response received for {} for OLT: {}'.format(action, olt_mac))
+                log.info('Set Response for {} for {}: {} had errors - Branch 0x{:X} Leaf 0x{:0>4X} {}'.format(action, device.model, device.mac_address,branch, leaf, DPoEVariableResponseEnum[status]))
+            else:
+                log.info('Set Response received for {} for {}: {} had no errors'.format(action, device.model, device.mac_address))
         else:
-            log.info('BAD OLT-response received for {} for OLT: {}'.format(action, olt_mac))
+            log.info('No Set Response received for {} for {}: {}'.format(action, device.model, device.mac_address))
 
         retcode.append(rc)
 
+
     @inlineCallbacks
-    def change_device_state(self, device, state=0):
-        # construct PON Admin State attribute
-        msg = (
-            Ether(dst=device.mac_address) /
-            Dot1Q(vlan=TIBIT_MGMT_VLAN, prio=TIBIT_MGMT_PRIORITY) /
-            EOAMPayload() / EOAM_VendSpecificMsg(oui=Tibit_OUI) /
-            EOAM_TibitMsg(dpoe_opcode = Dpoe_Opcodes["Set Request"], 
-                          body=PonPortObject()/OltPonAdminStateSet(value=state))/
-            EndOfPDU()
-            )
-        olt_mac = device.mac_address
-        if state is 0:
-            stateStr = "disabled"
-        else:
-            stateStr = "enabled"
-        action = "Set PON Admin State to " + stateStr
-        log.info('OLT-send to {} for OLT: {}'.format(action, olt_mac))
+    def _set_req_rsp(self, device, action, body, rc):
+        msg = self._build_tibit_oam_msg(device.mac_address, DPoEOpcodes["Set Request"], body)
+        log.info('Send to {} for {}: {}'.format(action, device.model, device.mac_address))
         self.io_port.send(str(msg))
 
         # Get and process the Set Response
-        rc = []
-        yield self._handle_set_resp(olt_mac, action, rc)
+        yield self._handle_set_resp(device, action, rc)
 
     def create_interface(self, device, data):
         raise NotImplementedError()
diff --git a/voltha/adapters/tibit_onu/tibit_onu.py b/voltha/adapters/tibit_onu/tibit_onu.py
index 5c52f18..e3706af 100644
--- a/voltha/adapters/tibit_onu/tibit_onu.py
+++ b/voltha/adapters/tibit_onu/tibit_onu.py
@@ -18,7 +18,6 @@
 Tibit ONU device adapter
 """
 
-import json
 import time
 import struct
 import re
@@ -62,9 +61,9 @@
 from voltha.extensions.eoam.EOAM_TLV import AddStaticMacAddress, DeleteStaticMacAddress
 from voltha.extensions.eoam.EOAM_TLV import ClearStaticMacTable
 from voltha.extensions.eoam.EOAM_TLV import DeviceId
-from voltha.extensions.eoam.EOAM_TLV import ClauseSubtypeEnum
-from voltha.extensions.eoam.EOAM_TLV import RuleOperatorEnum
-from voltha.extensions.eoam.EOAM_TLV import DPoEOpcodeEnum, DPoEVariableResponseCodes
+from voltha.extensions.eoam.EOAM_TLV import ClauseSubtypeEnum, RuleClauses
+from voltha.extensions.eoam.EOAM_TLV import RuleOperatorEnum, RuleOperators
+from voltha.extensions.eoam.EOAM_TLV import DPoEOpcodeEnum, DPoEVariableResponseEnum
 from voltha.extensions.eoam.EOAM_TLV import DPoEOpcode_MulticastRegister, MulticastRegisterSet
 from voltha.extensions.eoam.EOAM_TLV import VendorName, OnuMode, HardwareVersion, ManufacturerInfo
 from voltha.extensions.eoam.EOAM_TLV import SlowProtocolsSubtypeEnum, DeviceReset
@@ -75,19 +74,18 @@
      PortIngressRuleResultSet, PortIngressRuleResultInsert, \
      PortIngressRuleResultCopy, PortIngressRuleResultReplace, \
      PortIngressRuleResultDelete, PortIngressRuleResultOLTQueue, \
-     PortIngressRuleTerminator, AddPortIngressRule
+     PortIngressRuleTerminator, AddPortIngressRule, DPoEOpcodes
 from voltha.extensions.eoam.EOAM_TLV import PortIngressRuleHeader
-from voltha.extensions.eoam.EOAM_TLV import ClauseSubtypeEnum
-from voltha.extensions.eoam.EOAM_TLV import RuleOperatorEnum
 from voltha.extensions.eoam.EOAM_TLV import EndOfPDU
 
-from voltha.extensions.eoam.EOAM import EOAMPayload, EOAMEvent, EOAM_VendSpecificMsg
-from voltha.extensions.eoam.EOAM import EOAM_OmciMsg, EOAM_TibitMsg, EOAM_DpoeMsg
-from voltha.extensions.eoam.EOAM import EOAMPayload, CableLabs_OUI, Tibit_OUI
+from voltha.extensions.eoam.EOAM_Layers import EOAMPayload, EOAM_EventMsg, EOAM_VendSpecificMsg
+from voltha.extensions.eoam.EOAM_Layers import EOAM_TibitMsg, EOAM_DpoeMsg
+from voltha.extensions.eoam.EOAM_Layers import OAM_ETHERTYPE
+from voltha.extensions.eoam.EOAM_Layers import CABLELABS_OUI, TIBIT_OUI
+from voltha.extensions.eoam.EOAM_Layers import RxedOamMsgTypeEnum, RxedOamMsgTypes
 from voltha.extensions.eoam.EOAM import DPoEOpcode_GetRequest, DPoEOpcode_SetRequest
-from voltha.extensions.eoam.EOAM import mcastIp2McastMac
-from voltha.extensions.eoam.EOAM import RxedOamMsgTypeEnum, Dpoe_Opcodes, get_oam_msg_type, \
-    handle_get_value, get_value_from_msg, check_set_resp, check_resp
+from voltha.extensions.eoam.EOAM import mcastIp2McastMac, get_oam_msg_type, get_value_from_msg, check_set_resp, check_resp
+
 
 TIBIT_MSG_WAIT_TIME = 3
 
@@ -346,21 +344,11 @@
         device.connect_status = ConnectStatus.UNREACHABLE
         self.adapter_agent.update_device(device)
 
-        msg = (
-            EOAMPayload() / EOAM_VendSpecificMsg(oui=CableLabs_OUI) /
-            EOAM_DpoeMsg(dpoe_opcode = Dpoe_Opcodes["Set Request"],
-                         body=DeviceReset())/
-            EndOfPDU()
-            )
-
-        action = "Device Reset"
-
         # send message
-        log.info('ONU-send-proxied-message to {} for ONU: {}'.format(action, device.mac_address))
-        self.adapter_agent.send_proxied_message(device.proxy_address, msg)
-
+        action = "Device Reset"
         rc = []
-        yield self._handle_set_resp(device, action, rc)
+        tlvs = DeviceReset()
+        yield self._set_req_rsp(device, action, tlvs, rc)
 
         # Change the operational status back to its previous state.
         device.oper_status = previous_oper_status
@@ -422,9 +410,6 @@
             # Re-add the IGMP Multicast Address
             yield self._send_igmp_mcast_addr(device)
 
-        Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
-        Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
-
         for flow in flows.items:
             in_port = get_in_port(flow)
             assert in_port is not None
@@ -434,7 +419,6 @@
             if in_port == 2:
                 log.info('#### Upstream Rule ####')
 
-
                 up_req = UserPortObject()
                 up_req /= PortIngressRuleHeader(precedence=precedence)
 
@@ -455,8 +439,8 @@
                     elif field.type == VLAN_VID:
                         _vlan_vid = field.vlan_vid & 0xfff
                         log.info('#### field.type == VLAN_VID ####', vlan=_vlan_vid)
-                        up_req /= PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                                                     operator=Operator['=='], match=_vlan_vid)
+                        up_req /= PortIngressRuleClauseMatchLength02(fieldcode=RuleClauses['C-VLAN Tag'], fieldinstance=0,
+                                                                     operator=RuleOperators['=='], match=_vlan_vid)
 
                     elif field.type == VLAN_PCP:
                         _vlan_pcp = field.vlan_pcp
@@ -483,14 +467,14 @@
 
                     if action.type == OUTPUT:
                         log.info('#### action.type == OUTPUT ####')
-                        up_req /= PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])
+                        up_req /= PortIngressRuleResultInsert(fieldcode=RuleClauses['C-VLAN Tag'])
 
                     elif action.type == POP_VLAN:
                         log.info('#### action.type == POP_VLAN ####')
 
                     elif action.type == PUSH_VLAN:
                         log.info('#### action.type == PUSH_VLAN ####')
-                        up_req /= PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])
+                        up_req /= PortIngressRuleResultInsert(fieldcode=RuleClauses['C-VLAN Tag'])
 #                        if action.push.ethertype != 0x8100:
 #                            log.error('unhandled-tpid',
 #                                      ethertype=action.push.ethertype)
@@ -502,32 +486,23 @@
                         field = action.set_field.field.ofb_field
                         if field.type == VLAN_VID:
                             log.info("#### action.field.vlan {} ####".format(field.vlan_vid & 0xfff))
+                            # need to convert value in Set to a variable length value
+                            ctagStr = struct.pack('>H', (field.vlan_vid & 0xfff))
+
                             up_req /= PortIngressRuleResultSet(
-                                    fieldcode=Clause['C-VLAN Tag'], value=field.vlan_vid & 0xfff)
+                                    fieldcode=RuleClauses['C-VLAN Tag'], value=ctagStr)
                         else:
-                            log.error('unsupported-action-set-field-type',
-                                      field_type=field.type)
+                            raise NotImplementedError('unsupported-action-set-field-type={}'.format(field.type))
                     else:
-                        log.error('UNSUPPORTED-ACTION-TYPE',
-                                  action_type=action.type)
+                        raise NotImplementedError('unsupported-action-type={}'.format(action.type))
 
                 up_req /= PortIngressRuleTerminator()
                 up_req /= AddPortIngressRule()
 
-                msg = (
-                    EOAMPayload() / EOAM_VendSpecificMsg(oui=CableLabs_OUI) /
-                    EOAM_DpoeMsg(dpoe_opcode = Dpoe_Opcodes["Set Request"], body=up_req)/
-                    EndOfPDU()
-                )
-
                 # send message
                 action = "Set ONU US Rule"
-                log.info('ONU-send-proxied-message to {} for ONU: {}'.format(action, device.mac_address))
-                self.adapter_agent.send_proxied_message(device.proxy_address, msg)
-
-                # Get and process the Set Response
                 rc = []
-                yield self._handle_set_resp(device, action, rc)
+                yield self._set_req_rsp(device, action, up_req, rc)
 
 
             elif in_port == 1:
@@ -558,6 +533,8 @@
                     elif field.type == VLAN_VID:
                         _vlan_vid = field.vlan_vid & 0xfff
                         log.info('#### field.type == VLAN_VID ####')
+                        dn_req /= PortIngressRuleClauseMatchLength02(fieldcode=RuleClauses['C-VLAN Tag'], fieldinstance=0,
+                                                                     operator=RuleOperators['=='], match=_vlan_vid)
 
                     elif field.type == VLAN_PCP:
                         _vlan_pcp = field.vlan_pcp
@@ -588,17 +565,19 @@
 
                     elif action.type == POP_VLAN:
                         log.info('#### action.type == POP_VLAN ####')
-                        dn_req /= PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                                                     operator=Operator['=='], match=_vlan_vid)
-                        dn_req /= PortIngressRuleResultReplace(fieldcode=Clause['C-VLAN Tag'])
+
+                        # TODO - This is not the correct operation for a POP operation.
+                        #        This should be a Delete result
+                        dn_req /= PortIngressRuleResultReplace(fieldcode=RuleClauses['C-VLAN Tag'])
+                        # need to convert value in Set to a variable length value
+                        ctagStr = struct.pack('>H', (field.vlan_vid & 0xfff))
                         dn_req /= PortIngressRuleResultSet(
-                                fieldcode=Clause['C-VLAN Tag'], value=field.vlan_vid & 0xfff)
+                                fieldcode=RuleClauses['C-VLAN Tag'], value=ctagStr)
 
                     elif action.type == PUSH_VLAN:
                         log.info('#### action.type == PUSH_VLAN ####')
                         if action.push.ethertype != 0x8100:
-                            log.error('unhandled-ether-type',
-                                      ethertype=action.push.ethertype)
+                            raise NotImplementedError('unhandled-ether-type={}'.format(action.push.ethertype))
 
                     elif action.type == SET_FIELD:
                         log.info('#### action.type == SET_FIELD ####')
@@ -606,18 +585,21 @@
                                 ofp.OFPXMC_OPENFLOW_BASIC)
                         field = action.set_field.field.ofb_field
                         if field.type == VLAN_VID:
-                            dn_req /= PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                                                         operator=Operator['=='], match=_vlan_vid)
-                            dn_req /= PortIngressRuleResultReplace(fieldcode=Clause['C-VLAN Tag'])
-                            dn_req /= PortIngressRuleResultSet(
-                                    fieldcode=Clause['C-VLAN Tag'], value=field.vlan_vid & 0xfff)
-                        else:
-                            log.error('unsupported-action-set-field-type',
-                                      field_type=field.type)
+                            log.info("#### action.field.vlan {} ####".format(field.vlan_vid & 0xfff))
 
+                            # TODO - Currently only support setting the VID in the DS to zero (clearing the VID)
+                            if ((field.vlan_vid & 0xfff) == 0):
+                                dn_req /= PortIngressRuleResultReplace(fieldcode=RuleClauses['C-VLAN Tag'])
+                                # need to convert value in Set to a variable length value
+                                ctagStr = struct.pack('>H', (field.vlan_vid & 0xfff))
+                                dn_req /= PortIngressRuleResultSet(
+                                        fieldcode=RuleClauses['C-VLAN Tag'], value=ctagStr)
+                            else:
+                                raise NotImplementedError('unsupported-set-vlan-id={}'.format(field.vlan_vid & 0xfff))
+                        else:
+                            raise NotImplementedError('unsupported-action-set-field-type={}'.format(field.type))
                     else:
-                        log.error('UNSUPPORTED-ACTION-TYPE',
-                                  action_type=action.type)
+                        raise NotImplementedError('unsupported-action-type={}'.format(action.type))
 
                 if Is_MCast is True:
                     action = "Set Static IP MCAST address"
@@ -626,19 +608,9 @@
                     dn_req /= AddPortIngressRule()
                     action = "Set ONU DS Rule"
 
-                msg = (
-                    EOAMPayload() / EOAM_VendSpecificMsg(oui=CableLabs_OUI) /
-                    EOAM_DpoeMsg(dpoe_opcode = Dpoe_Opcodes["Set Request"], body=dn_req)/
-                    EndOfPDU()
-                )
-
                 # send message
-                log.info('ONU-send-proxied-message to {} for ONU: {}'.format(action, device.mac_address))
-                self.adapter_agent.send_proxied_message(device.proxy_address, msg)
-
-                # Get and process the Set Response
                 rc = []
-                yield self._handle_set_resp(device, action, rc)
+                yield self._set_req_rsp(device, action, dn_req, rc)
 
             else:
                 raise Exception('Port should be 1 or 2 by our convention')
@@ -716,37 +688,14 @@
         while self.incoming_messages.pending:
             _ = yield self.incoming_messages.get()
 
-        # send out ping frame to ONU device get device information
-        ping_frame = (
-            EOAMPayload() / EOAM_VendSpecificMsg(oui=CableLabs_OUI) /
-            EOAM_DpoeMsg(dpoe_opcode=Dpoe_Opcodes["Get Request"],
-                         body=VendorName() /
-                              OnuMode() /
-                              HardwareVersion() /
-                              ManufacturerInfo()
-                              ) /
-            EndOfPDU()
-            )
+        resp = []
+        action = "Get Device Info"
+        body = VendorName()/OnuMode()/HardwareVersion()/ManufacturerInfo()
+        yield self._get_req_rsp(device, action, body, resp)
+        if resp is not []: frame = resp[0]
 
-        log.info('ONU-send-proxied-message to Get Version Info for ONU: {}'.format(device.mac_address))
-        self.adapter_agent.send_proxied_message(device.proxy_address, ping_frame)
-
-        # Loop until we have a Get Response
-        ack = False
-        while not ack:
-            frame = yield self.incoming_messages.get()
-
-            respType = get_oam_msg_type(log, frame)
-
-            if (respType == RxedOamMsgTypeEnum["DPoE Get Response"]):
-                ack = True
-            else:
-                # Handle unexpected events/OMCI messages
-                check_resp(log, frame)
-
-        if ack:
+        if frame:
             log.info('ONU-response received for Get Version Info for ONU: {}'.format(device.mac_address))
-
             self._process_ping_frame_response(device, frame)
 
 
@@ -763,12 +712,8 @@
 
             log.info("Using Multicast LIDX {:04X}".format(mcastLidx))
 
-            # construct multicast LLID set
-            msg = (
-                EOAMPayload() / EOAM_VendSpecificMsg(oui=CableLabs_OUI) /
-                EOAM_DpoeMsg(dpoe_opcode=Dpoe_Opcodes["Multicast Register"],body=MulticastRegisterSet(MulticastLink=mcastLidx, UnicastLink=0)
-                ))
-
+            tlvs = MulticastRegisterSet(MulticastLink=mcastLidx, UnicastLink=0)
+            msg = self._build_dpoe_oam_msg(DPoEOpcodes["Multicast Register"], tlvs)
             # send message
             log.info('ONU-send-proxied-message to Multicast Register Set for ONU: {}'.format(device.mac_address))
             self.adapter_agent.send_proxied_message(device.proxy_address, msg)
@@ -850,82 +795,26 @@
     @inlineCallbacks
     def _send_igmp_mcast_addr(self, device):
         # construct install of igmp query address
-        msg = (
-            EOAMPayload() / EOAM_VendSpecificMsg(oui=CableLabs_OUI) /
-            EOAM_DpoeMsg(dpoe_opcode=Dpoe_Opcodes["Set Request"],body=AddStaticMacAddress(mac='01:00:5e:00:00:01')
-            ))
-
         action = "Set Static IGMP MAC address"
-
-        # send message
-        log.info('ONU-send-proxied-message to {} for ONU: {}'.format(action, device.mac_address))
-        self.adapter_agent.send_proxied_message(device.proxy_address, msg)
-
         rc = []
-        yield self._handle_set_resp(device, action, rc)
+        tlvs = AddStaticMacAddress(mac='01:00:5e:00:00:01')
+        yield self._set_req_rsp(device, action, tlvs, rc)
 
 
     @inlineCallbacks
     def _send_clear_static_mac_table(self, device):
-        # construct install of igmp query address
-        msg = (
-            EOAMPayload() / EOAM_VendSpecificMsg(oui=CableLabs_OUI) /
-            EOAM_DpoeMsg(dpoe_opcode=Dpoe_Opcodes["Set Request"],body=ClearStaticMacTable()
-            ))
-
         action = "Clear Static MAC Table"
-
-        # send message
-        log.info('ONU-send-proxied-message to {} for ONU: {}'.format(action, device.mac_address))
-        self.adapter_agent.send_proxied_message(device.proxy_address, msg)
-
         rc = []
-        yield self._handle_set_resp(device, action, rc)
+        tlvs = ClearStaticMacTable()
+        yield self._set_req_rsp(device, action, tlvs, rc)
 
 
-    @inlineCallbacks
-    def _handle_set_resp(self, device, action, retcode):
-        # Get and process the Set Response
-        ack = False
-        start_time = time.time()
-
-        # Loop until we have a set response or timeout
-        while not ack:
-            frame = yield self.incoming_messages.get()
-            #TODO - Need to add propoer timeout functionality
-            #if (time.time() - start_time) > TIBIT_MSG_WAIT_TIME or (frame is None):
-            #    break  # don't wait forever
-
-            respType = get_oam_msg_type(log, frame)
-
-            #Check that the message received is a Set Response
-            if (respType == RxedOamMsgTypeEnum["DPoE Set Response"]):
-                ack = True
-            else:
-                log.info('Received Unexpected OAM Message 0x{:X} while waiting for Set Resp for {}'.format(respType,action))
-                # Handle unexpected events/OMCI messages
-                check_resp(log, frame)
-
-        # Verify Set Response
-        rc = False
-        if ack:
-            (rc,branch,leaf,status) = check_set_resp(log, frame)
-            if (rc is False):
-                log.info('Set Response had errors - Branch 0x{:X} Leaf 0x{:0>4X} {}'.format(branch, leaf, DPoEVariableResponseCodes[status]))
-
-        if (rc is True):
-            log.info('ONU-response received for {} for ONU: {}'.format(action, device.mac_address))
-        else:
-            log.info('BAD ONU-response received for {} for ONU: {}'.format(action, device.mac_address))
-
-        retcode.append(rc)
-
     def _process_ping_frame_response(self, device, frame):
+        vendor       = [VendorName().branch, VendorName().leaf]
+        ponMode      = [OnuMode().branch, OnuMode().leaf]
+        hw_version   = [HardwareVersion().branch, HardwareVersion().leaf]
+        manufacturer = [ManufacturerInfo().branch, ManufacturerInfo().leaf]
 
-        vendor = [0xD7, 0x0011]
-        ponMode = [0xB7, 0x0105]
-        hw_version = [0xD7, 0x0013]
-        manufacturer =  [0xD7, 0x0006]
         branch_leaf_pairs = [vendor, ponMode, hw_version, manufacturer]
 
         for pair in branch_leaf_pairs:
@@ -993,3 +882,84 @@
             device.serial_number = "UNKNOWN"
 
         device.connect_status = ConnectStatus.REACHABLE
+
+
+    # Generic Request handlers
+
+    def _build_dpoe_oam_msg(self, opcode, body):
+        msg = (
+            EOAMPayload() / EOAM_VendSpecificMsg(oui=CABLELABS_OUI) /
+            EOAM_DpoeMsg(dpoe_opcode = opcode, body=body)/
+            EndOfPDU()
+            )
+        return msg
+
+    @inlineCallbacks
+    def _get_req_rsp(self, device, action, body, resp):
+        msg = self._build_dpoe_oam_msg(DPoEOpcodes["Get Request"], body)
+        log.info('Send to {} for {}: {}'.format(action, device.model, device.mac_address))
+
+        self.adapter_agent.send_proxied_message(device.proxy_address, msg)
+
+        # Loop until we have a Get Response or timeout
+        ack = False
+        start_time = time.time()
+        while not ack:
+            frame = yield self.incoming_messages.get()
+            #TODO - Need to add proper timeout functionality
+            #if (time.time() - start_time) > TIBIT_MSG_WAIT_TIME or (frame is None):
+            #    break  # don't wait forever
+
+            respType = get_oam_msg_type(log, frame)
+
+            if (respType == RxedOamMsgTypeEnum["DPoE Get Response"]):
+                ack = True
+                resp.append(frame)
+            else:
+                # Handle unexpected events/OMCI messages
+                check_resp(log, frame)
+
+    @inlineCallbacks
+    def _handle_set_resp(self, device, action, retcode):
+        # Get and process the Set Response
+        ack = False
+        #start_time = time.time()
+
+        # Loop until we have a set response or timeout
+        while not ack:
+            frame = yield self.incoming_messages.get()
+            #TODO - Need to add proper timeout functionality
+            #if (time.time() - start_time) > TIBIT_MSG_WAIT_TIME or (frame is None):
+            #    break  # don't wait forever
+
+            respType = get_oam_msg_type(log, frame)
+
+            #Check that the message received is a Set Response
+            if (respType == RxedOamMsgTypeEnum["DPoE Set Response"]):
+                ack = True
+            else:
+                log.info('Received Unexpected OAM Message 0x{:X} while waiting for Set Resp for {}'.format(respType,action))
+                # Handle unexpected events/OMCI messages
+                check_resp(log, frame)
+
+        # Verify Set Response
+        rc = False
+        if ack:
+            (rc,branch,leaf,status) = check_set_resp(log, frame)
+            if (rc is False):
+                log.info('Set Response for {} for {}: {} had errors - Branch 0x{:X} Leaf 0x{:0>4X} {}'.format(action, device.model, device.mac_address,branch, leaf, DPoEVariableResponseEnum[status]))
+            else:
+                log.info('Set Response received for {} for {}: {} had no errors'.format(action, device.model, device.mac_address))
+        else:
+            log.info('No Set Response received for {} for {}: {}'.format(action, device.model, device.mac_address))
+
+        retcode.append(rc)
+
+    @inlineCallbacks
+    def _set_req_rsp(self, device, action, body, rc):
+        msg = self._build_dpoe_oam_msg(DPoEOpcodes["Set Request"], body)
+        log.info('Send to {} for {}: {}'.format(action, device.model, device.mac_address))
+        self.adapter_agent.send_proxied_message(device.proxy_address, msg)
+
+        # Get and process the Set Response
+        yield self._handle_set_resp(device, action, rc)
diff --git a/voltha/extensions/eoam/EOAM.py b/voltha/extensions/eoam/EOAM.py
index 6dab1a8..7096ffe 100644
--- a/voltha/extensions/eoam/EOAM.py
+++ b/voltha/extensions/eoam/EOAM.py
@@ -18,6 +18,8 @@
 import logging
 import time
 from hexdump import hexdump
+from datetime import datetime
+
 
 logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
 from scapy.layers.l2 import Ether, Dot1Q
@@ -33,36 +35,16 @@
 
 import fcntl, socket, struct # for get hw address
 
+from EOAM_Layers import EOAM_MULTICAST_ADDRESS, IGMP_MULTICAST_ADDRESS, OAM_ETHERTYPE
+from EOAM_Layers import VENDOR_SPECIFIC_OPCODE, CABLELABS_OUI, TIBIT_OUI
+from EOAM_Layers import RxedOamMsgTypeEnum, RxedOamMsgTypes
+from EOAM_Layers import EOAMPayload, EOAM_EventMsg, EOAM_VendSpecificMsg, EOAM_TibitMsg, EOAM_DpoeMsg, EOAM_OmciMsg
+
 # TODO should remove import *
 from EOAM_TLV import *
 
-OAM_ETHERTYPE = 0xA8C8
-CableLabs_OUI = 0x001000
-Tibit_OUI = 0x2AEA15
-IEEE_OUI = 0x0019A7
-
-EOAM_MULTICAST_ADDRESS = '01:80:c2:00:00:02'
-IGMP_MULTICAST_ADDRESS = '01:00:5e:00:00:01'   # for test
-
-
-
-
-### Received OAM Message Types
-RxedOamMsgTypeEnum = {
-    "Unknown": 0x00,
-    # Info PDU - not currently used
-    "Info": 0x01,
-    # Event Notification - Tibit or DPoE Event
-    "Event Notification": 0x02,
-    "DPoE Get Response": 0x03,
-    "DPoE Set Response": 0x04,
-    # Specifically - a File Transfer ACK
-    "DPoE File Transfer": 0x05,
-    # Contains an embedded OMCI message
-    "OMCI Message": 0x06,
-    }
-
-Dpoe_Opcodes = {v: k for k, v in DPoEOpcodeEnum.iteritems()}
+ADTRAN_SHORTENED_VSSN = u'4144'  # 'AD'
+TIBIT_SHORTENED_VSSN  = u'5442'  # 'TB'
 
 def get_oam_msg_type(log, frame):
 
@@ -70,8 +52,8 @@
     recv_frame = frame
 
     if recv_frame.haslayer(EOAMPayload):
-        if recv_frame.haslayer(EOAMEvent):
-            recv_frame = RxedOamMsgTypeEnum["Event Notification"]
+        if recv_frame.haslayer(EOAM_EventMsg):
+            respType = RxedOamMsgTypeEnum["Event Notification"]
         elif recv_frame.haslayer(EOAM_OmciMsg):
             respType = RxedOamMsgTypeEnum["OMCI Message"]
         else:
@@ -82,25 +64,26 @@
                 dpoeOpcode = recv_frame.getlayer(EOAM_DpoeMsg).dpoe_opcode;
 
             # Get Response
-            if (dpoeOpcode == 0x02):
+            if (dpoeOpcode == DPoEOpcodes["Get Response"]):
                 respType = RxedOamMsgTypeEnum["DPoE Get Response"]
 
             # Set Response
-            elif (dpoeOpcode == 0x04):
+            elif (dpoeOpcode == DPoEOpcodes["Set Response"]):
                 respType = RxedOamMsgTypeEnum["DPoE Set Response"]
 
             # File Transfer ACK
-            elif (dpoeOpcode == 0x09):
+            elif (dpoeOpcode == DPoEOpcodes["File Transfer"]):
                 respType = RxedOamMsgTypeEnum["DPoE File Transfer"]
             else:
-                log.info('Unsupported DPoE Opcode {:0>2X}'.format(dpoeOpcode))
+                log.info("Unsupported DPoE Opcode {:0>2X}".format(dpoeOpcode))
     else:
-        log.info('Invalid OAM Header')
+        log.info("Invalid OAM Header")
 
-    log.info('Received OAM Message 0x %s' % str(respType))
+    log.info('Received OAM Message - %s' % RxedOamMsgTypes[respType])
 
     return respType
 
+
 def handle_get_value(log, loadstr, startOfTlvs, queryBranch, queryLeaf):
     retVal = False;
     value = 0
@@ -127,7 +110,7 @@
                 value = struct.unpack_from(">Q", loadstr, bytesRead)[0]
             else:
                 if (length >= 0x80):
-                    log.info('Branch 0x{:0>2X} Leaf 0x{:0>4X} {}'.format(branch, leaf, DPoEVariableResponseCodes[length]))
+                    log.info('Branch 0x{:0>2X} Leaf 0x{:0>4X} {}'.format(branch, leaf, DPoEVariableResponseEnum[length]))
                     # Set length to zero so bytesRead doesn't get mistakenly incremented below
                     length = 0
                 else:
@@ -140,7 +123,7 @@
             if (length > 0):
                 bytesRead += length
 
-            if (branch != 0xD6):
+            if (branch != OamBranches["DPoE Object"]):
                 if ( ((queryBranch == 0) and (queryLeaf == 0)) or
                      ((queryBranch == branch) and (queryLeaf == leaf)) ):
                     # Prevent zero-lengthed values from returning success
@@ -192,7 +175,7 @@
             bytesRead += 1
 
             if (length >= 0x80):
-                log.info('Branch 0x{:0>2X} Leaf 0x{:0>4X} {}'.format(branch, leaf, DPoEVariableResponseCodes[length]))
+                log.info('Branch 0x{:0>2X} Leaf 0x{:0>4X} {}'.format(branch, leaf, DPoEVariableResponseEnum[length]))
                 if (length > 0x80):
                     retVal = False;
                     break;
@@ -210,6 +193,7 @@
     leaf = 0
     status = 0
     recv_frame = frame
+
     if recv_frame.haslayer(EOAMPayload):
         payload = recv_frame.payload
         if hasattr(payload, 'body'):
@@ -223,18 +207,202 @@
     return rc,branch,leaf,status
 
 
+def handle_get_event_context(log, loadstr, startOfTlvs, queryType):
+    retVal = False;
+    value = 0
+    objType = 0
+    bytesRead = startOfTlvs
+    loadstrlen    = len(loadstr)
+
+    while (bytesRead <= loadstrlen):
+        objType = struct.unpack_from('>H', loadstr, bytesRead)[0]
+#            print "Branch/Leaf        0x{:0>2X}/0x{:0>4X}".format(branch, leaf)
+
+        if (objType != 0):
+            bytesRead += 2
+            length = struct.unpack_from('>B', loadstr, bytesRead)[0]
+#                print "Length:            0x{:0>2X} ({})".format(length,length)
+            bytesRead += 1
+
+            if (length == 1):
+                value = struct.unpack_from(">B", loadstr, bytesRead)[0]
+            elif (length == 2):
+                value = struct.unpack_from(">H", loadstr, bytesRead)[0]
+            elif (length == 4):
+                value = struct.unpack_from(">I", loadstr, bytesRead)[0]
+            elif (length == 8):
+                value = struct.unpack_from(">Q", loadstr, bytesRead)[0]
+            else:
+                valStr = ">{}s".format(length)
+                value = struct.unpack_from(valStr, loadstr, bytesRead)[0]
+
+#                print "Value:             {}".format(value)
+
+            if (length > 0):
+                bytesRead += length
+
+            if ( (queryType == 0) or (queryType == objType) ):
+                # Prevent zero-lengthed values from returning success
+                if (length > 0):
+                    retVal = True;
+                break
+        else:
+            break
+
+    if (retVal == False):
+        value = 0
+
+    return retVal,bytesRead,value,objType
+
+
+def handle_tibit_oam_event(log, loadstr):
+    bytesRead = 0
+    loadstrlen = len(loadstr)
+    if loadstrlen > 0:
+        rc = True
+        num_iters = 0
+        bytesRead = 0
+        link_mac = ""
+        msg = ""
+        # Theare are two contexts in a Tibit-specific event - Source & Reference Contexts
+        while(rc == True and num_iters < 2):
+            objType = 0
+            (rc,bytesRead,value,objType) = handle_get_event_context(log, loadstr, bytesRead, objType)
+            if (rc == True):
+                if objType == 0x0001:
+#                        print "PON Object 0x{:0>4X}  Value = {}".format(objType, value)
+                    pass
+                elif objType == 0x000A:
+                    # This is a Unicast Logical Link context. Determine if this a GPON or EPON link
+                    if value[1:5] == "TBIT":
+                        #
+                        link_mac = ''.join(s.encode('hex') for s in value[1:3])
+                        link_mac += ''.join(s.encode('hex') for s in value[5:9])
+                    else:
+                        link_mac = ''.join(s.encode('hex') for s in value[1:7])
+
+#                        print "Unicast Logical Link Object 0x{:0>4X}  Value = {}".format(objType, link_mac)
+                else:
+                    log.info("Object Type 0x{:0>4X}  value = {}".format(objType, value))
+            elif (branch != 0):
+                log.error("Object Type 0x{:0>4X}  no value".format(objType))
+            num_iters += 1
+
+        # Pull the Event Code and Event Length out of the event
+        (evtCode, evtLen) = struct.unpack_from('>HB', loadstr, bytesRead)
+        bytesRead += 3
+
+#            print "Event Code  : 0x{:0>4X}".format(evtCode)
+#            print "Event Len   : 0x{:0>4X}".format(evtLen)
+
+        # Tibit Registration Event
+        if (evtCode == 0x0001):
+            # Handle Registration Status attribute
+            regStatus = struct.unpack_from('>B', loadstr, bytesRead)[0]
+            if regStatus == 1:
+                msg = "Link {} Registered".format(link_mac)
+            else:
+                msg = "Link {} Deregistered".format(link_mac)
+
+    return objType,evtCode,msg
+
+
+def handle_dpoe_oam_event(log, loadstr):
+    bytesRead = 0
+    loadstrlen = len(loadstr)
+    if loadstrlen > 0:
+
+        (evtCode, raised, objType) = struct.unpack_from('>BBH', loadstr, bytesRead)
+        bytesRead += 4
+
+#            print "Event Code  : 0x{:0>4X}".format(evtCode)
+#            print "Event Len   : 0x{:0>4X}".format(evtLen)
+
+        if ((loadstrlen - bytesRead) == 2):
+            objInst = struct.unpack_from(">H", loadstr, bytesRead)[0]
+        elif ((loadstrlen - bytesRead) == 4):
+            objInst = struct.unpack_from(">I", loadstr, bytesRead)[0]
+
+        objTypeStr = ObjectContextEnum[objType]
+        evtCodeStr = DPoEEventCodeEnum[evtCode]
+
+        raisedStr = "Raised"
+        if (raised):
+            rasiedStr = "Cleared"
+
+        #print "{} : {} - {} {}".format(objTypeStr, objInst, evtCodeStr, raisedStr)
+        return objType,evtCode,objTypeStr+":"+evtCodeStr
+
+
+def handle_oam_event(log, frame):
+    recv_frame = frame
+    if recv_frame.haslayer(EOAM_EventMsg):
+        now = datetime.now().strftime('%Y-%m-%f %H:%M:%S.%f')
+        event = recv_frame.getlayer(EOAM_EventMsg)
+        if hasattr(event, 'body'):
+            loadstr = event.body.load
+
+            if (event.tlv_type != VENDOR_SPECIFIC_OPCODE):
+                log.error("unexpected tlv_type 0x%x (expected 0xFE)" % event.tlv_type)
+            elif (event.oui == CABLELABS_OUI):
+                log.info("DPoE Event")
+                objType,eventCode,msg = handle_dpoe_oam_event(log, loadstr)
+            elif (event.oui == TIBIT_OUI):
+                log.info("Tibit-specific Event")
+                objType,eventCode,msg = handle_tibit_oam_event(log, loadstr)
+
+            log.info("Description:    %s" % msg)
+            log.info("sequence:       0x%04x" % event.sequence)
+            log.info("tlv_type:       0x%x" % event.tlv_type)
+            log.info("length:         0x%x" % event.length)
+            log.info("oui:            0x%06x" % event.oui)
+            log.info("time_stamp:     %s" % now)
+            log.info("obj_type:       "+hex(objType))
+            log.info("event_code:     "+hex(eventCode))
+
+    # TODO - Store the event for future use or generate alarm
+    #event_data = [msg, event.sequence, objType, eventCode, now]
+
+def handle_omci(log, frame):
+    recv_frame = frame
+    if recv_frame.haslayer(EOAM_OmciMsg):
+        omci = recv_frame.getlayer(EOAM_OmciMsg)
+        if hasattr(omci, 'body'):
+            loadstr = omci.body.load
+
+            #log.info("trans_id:  0x%04x" % omci.trans_id)
+            #log.info("msg_type:  0x%x" % omci.msg_type)
+            #log.info("dev_id:    0x%x" % omci.dev_id)
+            #log.info("me_class:  0x%04x" % omci.me_class)
+            #log.info("me_inst:   0x%04x" % omci.me_inst)
+
+            bytesRead = 0
+
+    # TODO - Handle OMCI message
+
+def handle_fx_ack(log, loadstr):
+    response_code = Dpoe_FileAckRspOpcodes["OK"]
+
+    (fx_opcode, acked_block, response_code) = struct.unpack('>BHB', loadstr[0:4])
+
+    if (fx_opcode == Dpoe_FileXferOpcodes["File Transfer Ack"]):
+        pass
+        #log.info("   Acked_block: {} Code: {}".format(acked_block, DPoEFileAckRespCodeEnum[response_code]))
+    else:
+        log.error("Unexpected File Transfer Opcode {} when expecting ACK".format(DPoEFileXferOpcodeEnum[fx_opcode]))
+
+    return response_code,acked_block
+
 
 def check_resp(log, frame):
     respType = RxedOamMsgTypeEnum["Unknown"]
     recv_frame = frame
     if recv_frame.haslayer(EOAMPayload):
 
-        if recv_frame.haslayer(EOAMEvent):
-#            handle_oam_event(recv_frame)
-            pass
+        if recv_frame.haslayer(EOAM_EventMsg):
+            handle_oam_event(log, recv_frame)
         elif recv_frame.haslayer(EOAM_OmciMsg):
-#            handle_omci(recv_frame)
-            pass
+            handle_omci(log, recv_frame)
         else:
             dpoeOpcode = 0x00
             if recv_frame.haslayer(EOAM_TibitMsg):
@@ -247,7 +415,7 @@
                 loadstr = payload.body.load
 
             # Get Response
-            if (dpoeOpcode == 0x02):
+            if (dpoeOpcode == DPoEOpcodes["Get Response"]):
                 bytesRead = 0
                 rc = True
                 while(rc == True):
@@ -260,547 +428,67 @@
                         log.info('Branch 0x{:0>2X} Leaf 0x{:0>4X}  no value'.format(branch, leaf))
 
             # Set Response
-            elif (dpoeOpcode == 0x04):
+            elif (dpoeOpcode == DPoEOpcodes["Set Response"]):
                 (rc,branch,leaf,status) = check_set_resp_attrs(loadstr, 0)
                 if (rc == True):
                     log.info('Set Response had no errors')
                 else:
-                    log.info('Branch 0x{:X} Leaf 0x{:0>4X} {}'.format(branch, leaf, DPoEVariableResponseCodes[status]))
+                    log.info('Branch 0x{:X} Leaf 0x{:0>4X} {}'.format(branch, leaf, DPoEVariableResponseEnum[status]))
 
             # File Transfer ACK
-            elif (dpoeOpcode == 0x09):
-                rc = handle_fx_ack(log, loadstr, bytesRead, block_number)
+            elif (dpoeOpcode == DPoEOpcodes["File Transfer"]):
+                (rc,block) = handle_fx_ack(log, loadstr)
             else:
                 log.info('Unsupported DPoE Opcode {:0>2X}'.format(dpoeOpcode))
     else:
         log.info('Invalid OAM Header')
 
-    return respType    
+    return respType
 
 
-    
-def handle_fx_ack(log, loadstr, startOfXfer, block_number):
-    retVal = False
-    (fx_opcode, acked_block, response_code) = struct.unpack_from('>BHB', loadstr, startOfXfer)
-
-    #print "fx_opcode:      0x%x" % fx_opcode
-    #print "acked_block:    0x%x" % acked_block
-    #print "response_code:  0x%x" % response_code
-
-    if (fx_opcode != 0x03):
-        log.info('unexpected fx_opcode 0x%x (expected 0x03)' % fx_opcode)
-    elif (acked_block != block_number):
-        log.info('unexpected acked_block 0x%x (expected 0x%x)' % (acked_block, block_number))
-    elif (response_code != 0):
-        log.info('unexpected response_code 0x%x (expected 0x00)' % response_code)
-    else:
-        retVal = True;
-
-
-
-
-class EOAM():
-    """ EOAM frame layer """
-    def __init__(self, ctag=None, dryrun=False, stag=None,
-                 verbose=False, etype='8809',
-                 dst=EOAM_MULTICAST_ADDRESS,
-                 hexdump=False, interface='eth0',
-                 sleep=2.0):
-        self.verbose = verbose
-        self.dst = dst
-        self.dryrun = dryrun
-        self.hexdump = hexdump
-        self.interface = interface
-        self.etype = int(etype, 16)
-        self.stag = stag
-        self.ctag = ctag
-        self.sleep = sleep
-        if (self.verbose == True):
-            print("=== Settings ================")
-            print("ctag      = %s" % self.ctag)
-            print("stag      = %s" % self.stag)
-            print("dst       = %s" % self.dst)
-            print("dryrun    = %s" % self.dryrun)
-            print("hexdump   = %s" % self.hexdump)
-            print("interface = %s" % self.interface)
-            print("etype     = 0x%04x" % self.etype)
-            print("verbose   = %s" % self.verbose)
-            print("sleep     = %d" % self.sleep)
-            print("=== END Settings ============")
-
-    def send_frame(self, frame_body, slow_protocol=True):
-        PACKET = Ether()
-        PACKET.dst = self.dst
-        PACKET.src = self.getHwAddr(self.interface)
-        if self.stag:
-            # WARNING: September/2016: This should be 0x88a8, but the Intel 10G
-            # hardware I am currently using does not support receiving a TPID of
-            # 0x88a8. So, I send double CTAGs, and I usually set this to 0x8100.
-            # (NOTE: The Intel hardware can send a TPID of 0x88a8)
-            PACKET.type = 0x8100
-            if self.ctag:
-                PACKET/=Dot1Q(type=0x8100,vlan=int(self.stag))
-                PACKET/=Dot1Q(type=self.etype,vlan=int(self.ctag))
-            else:
-                PACKET/=Dot1Q(prio=7,type=self.etype,vlan=int(self.stag))
-        else:
-            if self.ctag:
-                PACKET.type = 0x8100
-                PACKET/=Dot1Q(type=self.etype,vlan=int(self.ctag))
-            else:
-                PACKET.type = self.etype
-#            PACKET/=Dot1Q(type=self.etype, vlan=int(self.ctag))
-        if slow_protocol:
-            PACKET /= SlowProtocolsSubtype()/FlagsBytes()/OAMPDU()
-            PACKET /= frame_body
-            PACKET /= EndOfPDU()
-        else:
-            PACKET.lastlayer().type = 0xA8C8
-            PACKET /= frame_body
-
-        if (self.verbose == True):
-            PACKET.show()
-            print '###[ Frame Length %d (before padding) ]###' % len(PACKET)
-        if (self.hexdump == True):
-            print hexdump(str(PACKET))
-        if (self.dryrun != True):
-            sendp(PACKET, iface=self.interface)
-            time.sleep(self.sleep)
-        return PACKET
-
-    def get_request(self, TLV):
-        return self.send_frame(CablelabsOUI()/DPoEOpcode_GetRequest()/TLV)
-
-    def set_request(self, TLV):
-        return self.send_frame(CablelabsOUI()/DPoEOpcode_SetRequest()/TLV)
-
-    def send_multicast_register(self, TLV):
-        '''
-        Note, for mulicast, the standard specifies a register message
-        with ActionFlags of either Register or Deregister
-        '''
-        return self.send_frame(CablelabsOUI()/DPoEOpcode_MulticastRegister()/TLV)
-
-    def set_request_broadcom(self, TLV):
-        return self.send_frame(BroadcomOUI()/DPoEOpcode_SetRequest()/TLV)
-
-    def getHwAddr(self, ifname):
-        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-        info = fcntl.ioctl(s.fileno(), 0x8927,  struct.pack('256s', ifname[:15]))
-        return ':'.join(['%02x' % ord(char) for char in info[18:24]])
-
-
-#TODO - This is duplicated from eoam_messages.py and renamed to EOAMRespPayload
-class EOAMPayload(Packet):
-    name = 'EOAM Payload'
-    fields_desc = [
-        ByteEnumField("subtype", 0x03, SlowProtocolsSubtypeEnum),
-        XShortField("flags", 0x0050),
-        XByteField("opcode", 0xfe),
-#        PacketField("body", None, Packet),
-    ]
-
-bind_layers(Ether, EOAMPayload, type=OAM_ETHERTYPE)
-
-
-#TODO - This is duplicated from eoam_messages.py
-class EOAMEvent(Packet):
-    name = 'EOAM Event'
-    fields_desc = [
-        XShortField("sequence", 0x0001),
-        XByteField("tlv_type", 0xfe),
-        XByteField("length", 0x01),
-        X3BytesField("oui", 0x001000),
-        PacketField("body", None, Packet),
-    ]
-
-bind_layers(EOAMPayload, EOAMEvent, opcode=0x01)
-
-#TODO - This is duplicated from eoam_messages.py
-class EOAM_VendSpecificMsg(Packet):
-    name = "Vendor-Specific OAM"
-    fields_desc  = [
-        X3BytesField("oui", 0x001000),
-    ]
-
-bind_layers(EOAMPayload, EOAM_VendSpecificMsg, opcode=0xFE)
-
-#TODO - This is duplicated from eoam_messages.py
-class EOAM_OmciMsg(Packet):
-    name = "OAM-encapsulated OMCI Message"
-    fields_desc  = [
-        PacketField("body", None, Packet),
-    ]
-
-bind_layers(EOAM_VendSpecificMsg, EOAM_OmciMsg, oui=0x0019A7)
-
-#TODO - This is duplicated from eoam_messages.py
-class EOAM_TibitMsg(Packet):
-    name = "Tibit OAM Message"
-    fields_desc  = [
-        ByteEnumField("dpoe_opcode", 0x01, DPoEOpcodeEnum),
-        PacketField("body", None, Packet),
-    ]
-
-bind_layers(EOAM_VendSpecificMsg, EOAM_TibitMsg, oui=0x2AEA15)
-
-#TODO - This is duplicated from eoam_messages.py
-class EOAM_DpoeMsg(Packet):
-    name = "DPoE OAM Message"
-    fields_desc  = [
-        ByteEnumField("dpoe_opcode", 0x01, DPoEOpcodeEnum),
-        PacketField("body", None, Packet),
-    ]
-
-bind_layers(EOAM_VendSpecificMsg, EOAM_DpoeMsg, oui=0x001000)
-
 def mcastIp2McastMac(ip):
     """ Convert a dot-notated IPv4 multicast address string into an multicast MAC address"""
     digits = [int(d) for d in ip.split('.')]
     return '01:00:5e:%02x:%02x:%02x' % (digits[1] & 0x7f, digits[2] & 0xff, digits[3] & 0xff)
 
+def get_olt_queue(mac, mode = None):
+    resultOltQueue = ""
+    if mode:
+        # If the MAC is the Multicast LLID, then use EPON encoding regardless of the actual
+        # mode we are in.
+        if (mac == "FFFFFFFFFFFF"):
+            mode = "EPON"
+
+        if mode.upper()[0] == "G":  #GPON
+            if mac[:4].upper() == ADTRAN_SHORTENED_VSSN:
+                vssn = "ADTN"
+            else:
+                vssn = "TBIT"
+            link = int(mac[4:12], 16)
+            resultOltQueue = "PortIngressRuleResultOLTQueue(unicastvssn=\"" + vssn + "\", unicastlink=" + str(link) + ")"
+        else:                       #EPON
+            vssn = int(mac[0:8].rjust(8,"0"), 16)
+            link = int((mac[8:12]).ljust(8,"0"), 16)
+            resultOltQueue = "PortIngressRuleResultOLTEPONQueue(unicastvssn=" + str(vssn) + ", unicastlink=" + str(link) + ")"
+    return resultOltQueue
+
+
+def get_unicast_logical_link(mac, mode = None):
+    unicastLogicalLink = ""
+    if mode:
+        if mode.upper()[0] == "G":  #GPON
+            if mac[:4].upper() == ADTRAN_SHORTENED_VSSN:
+                vssn = "ADTN"
+            else:
+                vssn = "TBIT"
+            link = int(mac[4:12], 16)
+            unicastLogicalLink = "OLTUnicastLogicalLink(unicastvssn=\"" + vssn + "\", unicastlink=" + str(link) + ")"
+        else:                       #EPON
+            vssn = int(mac[0:8].rjust(8,"0"), 16)
+            link = int((mac[8:12]).ljust(8,"0"), 16)
+            unicastLogicalLink = "OLTEPONUnicastLogicalLink(unicastvssn=" + str(vssn) + ", unicastlink=" + str(link) +")"
+    return unicastLogicalLink
+
 
 if __name__ == "__main__":
-    parser = argparse.ArgumentParser()
-    parser.add_argument('-d', '--dst', dest='dst', action='store', default=EOAM_MULTICAST_ADDRESS,
-                        help='MAC destination (default: %s)' % EOAM_MULTICAST_ADDRESS)
-    parser.add_argument('-e', '--etype', dest='etype', action='store', default='8809',
-                        help='EtherType value (default: 0x8809)')
-    parser.add_argument('-i', '--interface', dest='interface', action='store', default='eth0',
-                        help='ETH interface to send (default: eth0)')
-    parser.add_argument('-s', '--stag', dest='stag', action='store', default=None,
-                        help='STAG value (default: None)')
-    parser.add_argument('-c', '--ctag', dest='ctag', action='store', default=None,
-                        help='CTAG value (default: None)')
-    parser.add_argument('-p', '--sleep', dest='sleep', action='store', default='1.0', type=float,
-                        help='SLEEP time after frame (default: 1.0 secs)')
-    parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', default=False,
-                        help='verbose frame print out')
-    parser.add_argument('-x', '--hexdump', dest='hexdump', action='store_true', default=False,
-                        help='Hexdump the frame')
-    parser.add_argument('-y', '--dryrun', dest='dryrun', action='store_true', default=False,
-                        help='Dry run test, dont send - just print')
-
-    parser.add_argument('-t', '--test', dest='test', action='store_true', default=False,
-                        help='Run commands under test')
-    parser.add_argument('-r', '--critical', dest='critical', action='store_true', default=False,
-                        help='Send the critical OAM set of set_request()')
-    parser.add_argument('-ta', '--test_add', dest='test_add', action='store_true', default=False,
-                        help='Run commands under test')
-    parser.add_argument('-tc', '--test_clr', dest='test_clr', action='store_true', default=False,
-                        help='Run commands under test')
-    parser.add_argument('-te', '--test_eapol', dest='test_eapol', action='store_true', default=False,
-                        help='Run commands under test')
-    parser.add_argument('-ti', '--test_igmp', dest='test_igmp', action='store_true', default=False,
-                        help='Run commands under test')
-    parser.add_argument('-th', '--test_dhcp', dest='test_dhcp', action='store_true', default=False,
-                        help='Run commands under test')
-    parser.add_argument('-tu', '--test_upstream', dest='test_upstream', action='store_true', default=False,
-                        help='Run commands under test')
-    parser.add_argument('-td', '--test_downstream', dest='test_downstream', action='store_true', default=False,
-                        help='Run commands under test')
-    parser.add_argument('-tm', '--test_multicast', dest='test_multicast', action='store_true', default=False,
-                        help='Run commands under test')
-    parser.add_argument('-tp', '--test_ping', dest='test_ping', action='store_true', default=False,
-                        help='Issue a test ping to get JSON data on device version')
-
-    args = parser.parse_args()
-
-    if (args.dryrun == True):
-        args.sleep = 0.0
-
-    eoam = EOAM(
-        dryrun=args.dryrun,
-        dst=args.dst,
-        etype=args.etype,
-        hexdump=args.hexdump,
-        interface=args.interface,
-        stag=args.stag,
-        ctag=args.ctag,
-        verbose=args.verbose,
-        sleep=args.sleep
-        )
-
-    if (not args.critical
-        and not args.test
-        and not args.test_add
-        and not args.test_clr
-        and not args.test_eapol
-        and not args.test_igmp
-        and not args.test_dhcp
-        and not args.test_upstream
-        and not args.test_downstream
-        and not args.test_multicast
-        and not args.test_ping):
-        print 'WARNING: *** No frames sent, please specify \'test\' or \'critical\', etc.  See --help'
-
-
-    if (args.test == True):
-        print 'SET - Multicast Register Message 01'
-        eoam.send_multicast_register(MulticastRegisterSet(MulticastLink=0x3fe0, UnicastLink=0x1008))
-
-        print 'SET - Multicast Deregister Message 02'
-        eoam.send_multicast_register(MulticastRegisterSet(ActionFlags="Deregister",MulticastLink=0x3fe0, UnicastLink=0x1008))
-
-    if (args.test_clr == True):
-        print 'Set - Clear Static MAC Table -- User Port Object'
-        eoam.set_request(ClearStaticMacTable())
-
-    if (args.test_add == True):
-        print 'SET Add Static MAC Address -- User Port Object'
-        eoam.set_request(AddStaticMacAddress(mac=mcastIp2McastMac('230.10.10.10')))
-        time.sleep(1)
-        eoam.set_request(AddStaticMacAddress(mac=mcastIp2McastMac('231.11.11.11')))
-
-#        print 'SET Delete Static MAC Address -- User Port Object'
-#        eoam.set_request(DeleteStaticMacAddress(mac=IGMP_MULTICAST_ADDRESS))
-
-    if (args.test_eapol == True):
-        #################################################################################
-        ## EAPOL
-        #################################################################################
-        Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
-        Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
-
-        print 'SET - Port Ingress Rule -- PON Port Object -- EAPOL'
-        eoam.set_request(PonPortObject()/
-                         PortIngressRuleHeader(precedence=32)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['L2 Type/Len'],
-                                                            operator=Operator['=='], match=0x888e)/
-                         PortIngressRuleResultForward()/
-                         PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=4090)/
-                         PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])/
-                         PortIngressRuleTerminator()/
-                         AddPortIngressRule())
-
-        time.sleep(3)
-
-        print 'Delete - Port Ingress Rule -- PON Port Object -- EAPOL'
-        eoam.set_request(PonPortObject()/
-                         PortIngressRuleHeader(precedence=32)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['L2 Type/Len'],
-                                                            operator=Operator['=='], match=0x888e)/
-                         PortIngressRuleResultForward()/
-                         PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=4090)/
-                         PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])/
-                         PortIngressRuleTerminator()/
-                         DeletePortIngressRule())
-
-    if (args.test_igmp == True):
-        #################################################################################
-        ## IGMP
-        #################################################################################
-        Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
-        Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
-
-        print 'SET - Port Ingress Rule -- PON Port Object -- IGMP'
-        eoam.set_request(PonPortObject()/
-                         PortIngressRuleHeader(precedence=13)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['L2 Type/Len'],
-                                                            operator=Operator['=='], match=0x0800)/
-                         PortIngressRuleClauseMatchLength01(fieldcode=Clause['IPv4/IPv6 Protocol Type'],
-                                                            operator=Operator['=='], match=0x02)/
-                         PortIngressRuleResultForward()/
-                         PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=4000)/
-                         PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])/
-                         PortIngressRuleTerminator()/
-                         AddPortIngressRule())
-
-        time.sleep(3)
-
-        print 'Delete - Port Ingress Rule -- PON Port Object -- IGMP'
-        eoam.set_request(PonPortObject()/
-                         PortIngressRuleHeader(precedence=13)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['L2 Type/Len'],
-                                                            operator=Operator['=='], match=0x0800)/
-                         PortIngressRuleClauseMatchLength01(fieldcode=Clause['IPv4/IPv6 Protocol Type'],
-                                                            operator=Operator['=='], match=0x02)/
-                         PortIngressRuleResultForward()/
-                         PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=4000)/
-                         PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])/
-                         PortIngressRuleTerminator()/
-                         DeletePortIngressRule())
-
-    if (args.test_dhcp == True):
-        #################################################################################
-        ## DHCP
-        #################################################################################
-        Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
-        Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
-
-        print 'SET - Port Ingress Rule -- PON Port Object -- DHCP'
-        eoam.set_request(PonPortObject()/
-                         PortIngressRuleHeader(precedence=13)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['L2 Type/Len'],
-                                                            operator=Operator['=='], match=0x0800)/
-                         PortIngressRuleClauseMatchLength01(fieldcode=Clause['IPv4/IPv6 Protocol Type'],
-                                                            operator=Operator['=='], match=0x11)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['TCP/UDP source port'],
-                                                            operator=Operator['=='], match=0x0044)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['TCP/UDP destination port'],
-                                                            operator=Operator['=='], match=0x0043)/
-                         PortIngressRuleResultForward()/
-                         PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=4000)/
-                         PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])/
-                         PortIngressRuleTerminator()/
-                         AddPortIngressRule())
-
-        time.sleep(3)
-
-        print 'Delete - Port Ingress Rule -- PON Port Object -- DHCP'
-        eoam.set_request(PonPortObject()/
-                         PortIngressRuleHeader(precedence=13)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['L2 Type/Len'],
-                                                            operator=Operator['=='], match=0x0800)/
-                         PortIngressRuleClauseMatchLength01(fieldcode=Clause['IPv4/IPv6 Protocol Type'],
-                                                            operator=Operator['=='], match=0x11)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['TCP/UDP source port'],
-                                                            operator=Operator['=='], match=0x0044)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['TCP/UDP destination port'],
-                                                            operator=Operator['=='], match=0x0043)/
-                         PortIngressRuleResultForward()/
-                         PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=4000)/
-                         PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'])/
-                         PortIngressRuleTerminator()/
-                         DeletePortIngressRule())
-
-    if (args.test_upstream == True):
-        #################################################################################
-        ## UPSTREAM
-        #################################################################################
-        Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
-        Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
-
-        print 'SET - Port Ingress Rule -- OLT Unicast Logical Link -- Upstream Traffic'
-        eoam.set_request(PortIngressRuleHeader(precedence=13)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                                            operator=Operator['=='], match=0x00f1)/
-                         PortIngressRuleResultForward()/
-                         PortIngressRuleResultCopy(fieldcode=Clause['C-VLAN Tag'])/
-                         PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'], fieldinstance=1)/
-                         PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=1000)/
-                         PortIngressRuleResultReplace(fieldcode=Clause['C-VLAN Tag'])/
-                         OLTUnicastLogicalLink(unicastvssn="TBIT", unicastlink=0xe2222900)/
-                         PortIngressRuleTerminator()/
-                         AddPortIngressRule())
-
-
-        time.sleep(3)
-
-        print 'DELETE - Port Ingress Rule -- OLT Unicast Logical Link -- Upstream Traffic'
-        eoam.set_request(OLTUnicastLogicalLink(unicastvssn="TBIT", unicastlink=0xe2222900)/
-                         PortIngressRuleHeader(precedence=13)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                                            operator=Operator['=='], match=0x00f1)/
-                         PortIngressRuleResultForward()/
-                         PortIngressRuleResultCopy(fieldcode=Clause['C-VLAN Tag'])/
-                         PortIngressRuleResultInsert(fieldcode=Clause['C-VLAN Tag'], fieldinstance=1)/
-                         PortIngressRuleResultSet(fieldcode=Clause['C-VLAN Tag'], value=1000)/
-                         PortIngressRuleResultReplace(fieldcode=Clause['C-VLAN Tag'])/
-                         PortIngressRuleTerminator()/
-                         DeletePortIngressRule())
-
-    if (args.test_downstream == True):
-        #################################################################################
-        ## DOWNSTREAM
-        #################################################################################
-        Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
-        Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
-
-        print 'SET - Port Ingress Rule -- NNI Port Object -- Downstream Traffic -- 4000/241'
-        eoam.set_request(NetworkToNetworkPortObject()/
-                         PortIngressRuleHeader(precedence=13)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                                            operator=Operator['=='], match=0x0fa0)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=1,
-                                                            operator=Operator['=='], match=0x00f1)/
-                         PortIngressRuleResultOLTQueue(unicastvssn="TBIT", unicastlink=0xe2222900)/
-                         PortIngressRuleResultForward()/
-                         PortIngressRuleResultDelete(fieldcode=Clause['C-VLAN Tag'])/
-                         PortIngressRuleTerminator()/
-                         AddPortIngressRule())
-
-        time.sleep(1)
-
-        print 'SET - Port Ingress Rule -- NNI Port Object -- Downstream Traffic -- 1000/241'
-        eoam.set_request(NetworkToNetworkPortObject()/
-                         PortIngressRuleHeader(precedence=13)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                                            operator=Operator['=='], match=0x03e8)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=1,
-                                                            operator=Operator['=='], match=0x00f1)/
-                         PortIngressRuleResultOLTQueue(unicastvssn="TBIT", unicastlink=0xe2222900)/
-                         PortIngressRuleResultForward()/
-                         PortIngressRuleResultDelete(fieldcode=Clause['C-VLAN Tag'])/
-                         PortIngressRuleTerminator()/
-                         AddPortIngressRule())
-
-
-        time.sleep(1)
-
-        print 'SET - Port Ingress Rule -- NNI Port Object -- Downstream Traffic -- 4000/203'
-        eoam.set_request(NetworkToNetworkPortObject()/
-                         PortIngressRuleHeader(precedence=13)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                                            operator=Operator['=='], match=0x0fa0)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=1,
-                                                            operator=Operator['=='], match=0x00CB)/
-                         PortIngressRuleResultOLTQueue(unicastvssn="TBIT", unicastlink=0xe2220300)/
-                         PortIngressRuleResultForward()/
-                         PortIngressRuleResultDelete(fieldcode=Clause['C-VLAN Tag'])/
-                         PortIngressRuleTerminator()/
-                         AddPortIngressRule())
-
-        time.sleep(1)
-
-        print 'SET - Port Ingress Rule -- NNI Port Object -- Downstream Traffic -- 1000/203'
-        eoam.set_request(NetworkToNetworkPortObject()/
-                         PortIngressRuleHeader(precedence=13)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                                            operator=Operator['=='], match=0x03e8)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=1,
-                                                            operator=Operator['=='], match=0x00cb)/
-                         PortIngressRuleResultOLTQueue(unicastvssn="TBIT", unicastlink=0xe2220300)/
-                         PortIngressRuleResultForward()/
-                         PortIngressRuleResultDelete(fieldcode=Clause['C-VLAN Tag'])/
-                         PortIngressRuleTerminator()/
-                         AddPortIngressRule())
-
-    if (args.test_multicast == True):
-        #################################################################################
-        ## MULTICAST
-        #################################################################################
-        Clause = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
-        Operator = {v: k for k, v in RuleOperatorEnum.iteritems()}
-
-        print 'SET - Port Ingress Rule -- NNI Port Object -- Downstream Multicast Traffic'
-        eoam.set_request(NetworkToNetworkPortObject()/
-                         PortIngressRuleHeader(precedence=13)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                                            operator=Operator['=='], match=0x008c)/
-                         PortIngressRuleResultOLTBroadcastQueue()/
-                         PortIngressRuleResultForward()/
-                         PortIngressRuleResultDelete(fieldcode=Clause['C-VLAN Tag'])/
-                         PortIngressRuleTerminator()/
-                         AddPortIngressRule())
-
-
-        time.sleep(3)
-
-        print 'DELETE - Port Ingress Rule -- NNI Port Object -- Downstream Multicast Traffic'
-        eoam.set_request(NetworkToNetworkPortObject()/
-                         PortIngressRuleHeader(precedence=13)/
-                         PortIngressRuleClauseMatchLength02(fieldcode=Clause['C-VLAN Tag'], fieldinstance=0,
-                                                            operator=Operator['=='], match=0x008c)/
-                         PortIngressRuleResultOLTBroadcastQueue()/
-                         PortIngressRuleResultForward()/
-                         PortIngressRuleResultDelete(fieldcode=Clause['C-VLAN Tag'])/
-                         PortIngressRuleTerminator()/
-                         DeletePortIngressRule())
-
-
-    if (args.test_ping == True):
-        json_operation_str = '{\"operation\":\"version\"}'
-        for i in range(10000):
-            eoam.send_frame(TBJSON(data='json %s' % json_operation_str), False)
-
+    pass
diff --git a/voltha/extensions/eoam/EOAM_Layers.py b/voltha/extensions/eoam/EOAM_Layers.py
new file mode 100755
index 0000000..d48ddef
--- /dev/null
+++ b/voltha/extensions/eoam/EOAM_Layers.py
@@ -0,0 +1,141 @@
+#!/usr/bin/env python
+#--------------------------------------------------------------------------#
+# Copyright (C) 2015 - 2016 by Tibit Communications, Inc.                  #
+# All rights reserved.                                                     #
+#                                                                          #
+#    _______ ____  _ ______                                                #
+#   /_  __(_) __ )(_)_  __/                                                #
+#    / / / / __  / / / /                                                   #
+#   / / / / /_/ / / / /                                                    #
+#  /_/ /_/_____/_/ /_/                                                     #
+#                                                                          #
+#--------------------------------------------------------------------------#
+
+import sys
+import inspect
+
+# SCAPY-specific imports
+from scapy.all import Dot1Q
+from scapy.all import sniff, hexdump
+from scapy.packet import Packet, bind_layers
+from scapy.fields import StrField, PacketField, X3BytesField
+from scapy.layers.l2 import Ether
+
+from EOAM_TLV import *
+
+# Layer 2 definitions
+EOAM_MULTICAST_ADDRESS = '01:80:c2:00:00:02'   # Well-known OAM Multicast address
+UNUSED_SOURCE_ADDRESS  = '12:34:56:78:9a:bc'   # for OAM frames sent over the CLI
+IGMP_MULTICAST_ADDRESS = '01:00:5e:00:00:01'   # IGMP Multicast address
+OAM_ETHERTYPE          = 0xA8C8                # Ethertype value used to identify a 1904.2 message
+
+VENDOR_SPECIFIC_OPCODE = 0xFE
+CABLELABS_OUI          = 0x001000              # CableLabs OUI (used for DPoE OAM messages)
+TIBIT_OUI              = 0x2AEA15              # Tibit OUI
+ITU_OUI                = 0x0019A7              # ITU OUI - used to encapsulate OMCI messages
+
+# Message Types which can be received from the Tibit OLT, Tibit ONU, DPoE ONU, or GPON ONT
+# ove the 1904.2 transport
+RxedOamMsgTypeEnum = {
+    "Unknown"            : 0x00,
+    "Info"               : 0x01,    # Info PDU
+    "Event Notification" : 0x02,    # Event Notification - Tibit or DPoE Event
+    "DPoE Get Response"  : 0x03,    # DPoE Get Response
+    "DPoE Set Response"  : 0x04,    # DPoE Set Rewponse
+    "DPoE File Transfer" : 0x05,    # Specifically - a File Transfer ACK
+    "OMCI Message"       : 0x06,    # Contains an embedded OMCI message
+    }
+
+RxedOamMsgTypes = {v: k for k, v in RxedOamMsgTypeEnum.iteritems()}
+
+
+###############################################################
+# SCAPY Layer definitions used to parse 1904.2 messages
+###############################################################
+
+# OAM fields after the L2 addressing/VLAN tags
+# when the Ethertype is set to 0xA8C8
+class EOAMPayload(Packet):
+    name = 'EOAM Payload'
+    fields_desc = [
+        ByteEnumField("subtype", 0x03, SlowProtocolsSubtypeEnum),
+        XShortField("flags", 0x0050),
+        XByteField("opcode", VENDOR_SPECIFIC_OPCODE),
+    ]
+
+bind_layers(Ether, EOAMPayload, type=OAM_ETHERTYPE)
+
+
+# 1904.1 OAM Event
+class EOAM_EventMsg(Packet):
+    name = 'EOAM Event'
+    fields_desc = [
+        XShortField("sequence", 0x0001),
+        XByteField("tlv_type", VENDOR_SPECIFIC_OPCODE),
+        XByteField("length", 0x01),
+        X3BytesField("oui", CABLELABS_OUI),
+        PacketField("body", None, Packet),
+    ]
+
+bind_layers(EOAMPayload, EOAM_EventMsg, opcode=0x01)
+
+# Vendor-specific OAM message
+# indicated by an Opcode field set to 0xFE
+class EOAM_VendSpecificMsg(Packet):
+    name = "Vendor-Specific OAM"
+    fields_desc  = [
+        X3BytesField("oui", CABLELABS_OUI),
+    ]
+
+bind_layers(EOAMPayload, EOAM_VendSpecificMsg, opcode=VENDOR_SPECIFIC_OPCODE)
+
+# Tibit-specific OAM message
+# indicated by an OUI set to 0x2AEA15
+class EOAM_TibitMsg(Packet):
+    name = "Tibit OAM Message"
+    fields_desc  = [
+        ByteEnumField("dpoe_opcode", 0x01, DPoEOpcodeEnum),
+        PacketField("body", None, Packet),
+    ]
+
+bind_layers(EOAM_VendSpecificMsg, EOAM_TibitMsg, oui=TIBIT_OUI)
+
+# DPoE-specific OAM message
+# indicated by an OUI set to 0x001000
+class EOAM_DpoeMsg(Packet):
+    name = "DPoE OAM Message"
+    fields_desc  = [
+        ByteEnumField("dpoe_opcode", 0x01, DPoEOpcodeEnum),
+        PacketField("body", None, Packet),
+    ]
+
+bind_layers(EOAM_VendSpecificMsg, EOAM_DpoeMsg, oui=CABLELABS_OUI)
+
+# Embedded OMCI message
+# indicated by an OUI set to ITU OUI (0x0019A7)
+
+#class EOAM_OmciMsg(Packet):
+#    name = "OAM-encapsulated OMCI Message"
+#    fields_desc  = [
+#        XShortField("trans_id", 1),
+#        XByteField("msg_type", 0x49),
+#        XByteField("dev_id", 0x0A),
+#        XShortField("me_class", 0x0000),
+#        XShortField("me_inst", 0x0000),
+#        PacketField("body", None, Packet),
+#    ]
+
+class EOAM_OmciMsg(Packet):
+    name = "OAM-encapsulated OMCI Message"
+    fields_desc  = [
+        PacketField("body", None, Packet),
+    ]
+
+bind_layers(EOAM_VendSpecificMsg, EOAM_OmciMsg, oui=ITU_OUI)
+
+###############################################################
+# End of SCAPY Layers
+###############################################################
+
+
+
diff --git a/voltha/extensions/eoam/EOAM_TLV.py b/voltha/extensions/eoam/EOAM_TLV.py
index 545490b..2596499 100644
--- a/voltha/extensions/eoam/EOAM_TLV.py
+++ b/voltha/extensions/eoam/EOAM_TLV.py
@@ -1,4 +1,4 @@
-#--------------------------------------------------------------------------#
+##--------------------------------------------------------------------------#
 # Copyright (C) 2015 - 2016 by Tibit Communications, Inc.                  #
 # All rights reserved.                                                     #
 #                                                                          #
@@ -14,7 +14,7 @@
 from scapy.fields import ByteEnumField, XShortField, XByteField, MACField, \
     ByteField, BitEnumField, BitField, ShortField
 from scapy.fields import XLongField, StrField, StrFixedLenField, XIntField, \
-    FieldLenField, StrLenField, IntField
+    FieldLenField, StrLenField, IntField, ShortEnumField
 
 # This library strives to be an implementation of the following standard:
 
@@ -38,6 +38,24 @@
 
 SlowProtocolsSubtypeEnum = {0x03: "OAM"}
 
+### OAM Branch Enumerations
+OamBranchEnum = {
+    0x00: "End",
+    0x06: "Clause 30 Object",
+    0x07: "Clause 30 Attr",
+    0x09: "Clause 30 Action",
+    0xB7: "Tibit Attr",
+    0xB9: "Tibit Action",
+    0xC7: "DPoG Attr",
+    0xC9: "DPoG Action",
+    0xD6: "DPoE Object",
+    0xD7: "DPoE Attr",
+    0xD9: "DPoE Action",
+    }
+
+OamBranches = {v: k for k, v in OamBranchEnum.iteritems()}
+
+
 ### Multicast Action Flags
 MulticastActionFlagsEnum = {
     0x02: "Deregister",
@@ -56,8 +74,11 @@
     0x09: "File Transfer",
     }
 
+DPoEOpcodes = {v: k for k, v in DPoEOpcodeEnum.iteritems()}
+
+
 ### Table 20 - DPoE Variable Response Codes
-DPoEVariableResponseCodes = {
+DPoEVariableResponseEnum = {
     0x80: "No Error",
     0x81: "Too Long",
     0x86: "Bad Parameters",
@@ -70,6 +91,24 @@
     0xa4: "Overflow",
     }
 
+DPoEVariableResponseCodes = {v: k for k, v in DPoEVariableResponseEnum.iteritems()}
+
+
+### Table 14 - DPoE Event Codes
+DPoEEventCodeEnum = {
+    0x11: "Loss of Signal",
+    0x12: "Key Exchange Failure",
+    0x21: "Port Disabled",
+    0x41: "Power Failure",
+    0x81: "Statistics Alarm",
+    0x82: "D-ONU Busy",
+    0x83: "MAC Table Overflow",
+    0x84: "PON Interface Switch",
+    }
+
+DPoEEventCodes = {v: k for k, v in DPoEEventCodeEnum.iteritems()}
+
+
 class SlowProtocolsSubtype(Packet):
     """ Slow Protocols subtype"""
     name = "Slow Protocols subtype"
@@ -163,13 +202,33 @@
                    ]
 
 ####
-#### PORT OBJECTS
+#### OAM Context OBJECTS
 ####
+
+### Object Context Enumerations
+ObjectContextEnum = {
+    0x0000: "Device",
+    0x0001: "PON Port",
+    0x0002: "Unicast Logical Link",
+    0x0003: "Enet Port",
+    0x0004: "Queue",
+    0x0005: "SOAM MEP",
+    0x0006: "Multicast Link",
+    0x0007: "T-CONT",
+# __TIBIT_OLT_OAM__: Defined by Tibit
+    0x0009: "ONU",
+    0x000A: "OLT Unicast Link",
+    0x000B: "GPIO",
+    }
+
+ObjectContexts = {v: k for k, v in ObjectContextEnum.iteritems()}
+
+
 class DONUObject(Packet):
     """ Object Context: D-ONU Object """
     name = "Object Context: D-ONU Object"
-    fields_desc = [XByteField("branch", 0xD6),
-                   XShortField("leaf", 0x0000),
+    fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
+                   ShortEnumField("leaf", 0x0000, ObjectContextEnum),
                    XByteField("length", 1),
                    XByteField("number", 0)
                    ]
@@ -178,8 +237,8 @@
 class DOLTObject(Packet):
     """ Object Context: D-OLT Object """
     name = "Object Context: D-OLT Object"
-    fields_desc = [XByteField("branch", 0xD6),
-                   XShortField("leaf", 0x0000),
+    fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
+                   ShortEnumField("leaf", 0x0000, ObjectContextEnum),
                    XByteField("length", 1),
                    XByteField("number", 0)
                    ]
@@ -187,8 +246,8 @@
 class NetworkPortObject(Packet):
     """ Object Context: Network Port Object """
     name = "Object Context: Network Port Object"
-    fields_desc = [XByteField("branch", 0xD6),
-                   XShortField("leaf", 0x0001),
+    fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
+                   ShortEnumField("leaf", 0x0001, ObjectContextEnum),
                    XByteField("length", 1),
                    XByteField("number", 0)
                    ]
@@ -197,8 +256,8 @@
 class PonPortObject(Packet):
     """ Object Context: PON Port Object """
     name = "Object Context: PON Port Object"
-    fields_desc = [XByteField("branch", 0xD6),
-                   XShortField("leaf", 0x0001),
+    fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
+                   ShortEnumField("leaf", 0x0001, ObjectContextEnum),
                    XByteField("length", 1),
                    XByteField("number", 0)
                    ]
@@ -206,8 +265,8 @@
 class UnicastLogicalLink(Packet):
     """ Object Context: Unicast Logical Link """
     name = "Object Context: Unicast Logical Link"
-    fields_desc = [XByteField("branch", 0xD6),
-                   XShortField("leaf", 0x0002),
+    fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
+                   ShortEnumField("leaf", 0x0002, ObjectContextEnum),
                    XByteField("length", 1),
                    XByteField("number", 0)
                    ]
@@ -216,8 +275,8 @@
 class OLTUnicastLogicalLink(Packet):
     """ Object Context: OLT Unicast Logical Link """
     name = "Object Context: OLT Unicast Logical Link"
-    fields_desc = [XByteField("branch", 0xD6),
-                   XShortField("leaf", 0x000a),
+    fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
+                   ShortEnumField("leaf", 0x000A, ObjectContextEnum),
                    XByteField("length", 10),
                    XByteField("pon", 0),
                    StrField("unicastvssn", "TBIT"),
@@ -228,8 +287,8 @@
 class OLTEPONUnicastLogicalLink(Packet):
     """ Object Context: OLT Unicast Logical Link """
     name = "Object Context: OLT Unicast Logical Link"
-    fields_desc = [XByteField("branch", 0xD6),
-                   XShortField("leaf", 0x000a),
+    fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
+                   ShortEnumField("leaf", 0x000A, ObjectContextEnum),
                    XByteField("length", 10),
                    XByteField("pon", 0),
                    XIntField("unicastvssn", 0x00000000),
@@ -242,8 +301,8 @@
 class NetworkToNetworkPortObject(Packet):
     """ Object Context: Network-to-Network (NNI) Port Object """
     name = "Object Context: Network-to-Network (NNI) Port Object"
-    fields_desc = [XByteField("branch", 0xD6),
-                   XShortField("leaf", 0x0003),
+    fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
+                   ShortEnumField("leaf", 0x0003, ObjectContextEnum),
                    XByteField("length", 1),
                    XByteField("number", 0)
                    ]
@@ -251,8 +310,8 @@
 class UserPortObject(Packet):
     """ Object Context: User Port Object """
     name = "Object Context: User Port Object"
-    fields_desc = [XByteField("branch", 0xD6),
-                   XShortField("leaf", 0x0003),
+    fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
+                   ShortEnumField("leaf", 0x0003, ObjectContextEnum),
                    XByteField("length", 1),
                    XByteField("number", 0)
                    ]
@@ -260,8 +319,8 @@
 class QueueObject(Packet):
     """ Object Context: Queue Object """
     name = "Object Context: Queue Object"
-    fields_desc = [XByteField("branch", 0xD6),
-                   XShortField("leaf", 0x0004),
+    fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
+                   ShortEnumField("leaf", 0x0004, ObjectContextEnum),
                    XByteField("length", 2),
                    XByteField("instance", 0),
                    XByteField("number", 0)
@@ -270,26 +329,35 @@
 class ONUObject(Packet):
     """ Object Context: ONU Object """
     name = "Object Context: ONU Object"
-    fields_desc = [XByteField("branch", 0xD6),
-                   XShortField("leaf", 0x0009),
+    fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
+                   ShortEnumField("leaf", 0x0009, ObjectContextEnum),
                    XByteField("length", 6),
                    MACField("mac", "54:42:e2:22:11:00")
                    ]
 
+class GpioObject(Packet):
+    """ Object Context: GPIO Object """
+    name = "Object Context: GPIO Object"
+    fields_desc = [ByteEnumField("branch", 0xD6, OamBranchEnum),
+                   ShortEnumField("leaf", 0x000B, ObjectContextEnum),
+                   XByteField("length", 1),
+                   XByteField("condition", 1)
+                   ]
+
 ####
 #### 0x09 - BRANCH ATTRIBUTES
 ####
 class PhyAdminControl(Packet):
     """ Variable Descriptor: Phy Admin Control """
-    name = "Variable Descriptor: Phy Admin Control"
-    fields_desc = [XByteField("branch", 0x09),
+    name = "Phy Admin Control"
+    fields_desc = [ByteEnumField("branch", 0x09, OamBranchEnum),
                    XShortField("leaf", 0x0005),
                    ]
 
 class PhyAdminControlEnableSet(Packet):
     """ Variable Descriptor: Phy Admin Control Enable """
-    name = "Variable Descriptor: Phy Admin Control Enable"
-    fields_desc = [XByteField("branch", 0x09),
+    name = "Phy Admin Control Enable"
+    fields_desc = [ByteEnumField("branch", 0x09, OamBranchEnum),
                    XShortField("leaf", 0x0005),
                    XByteField("length", 1),
                    XByteField("value", 2)
@@ -297,8 +365,8 @@
 
 class PhyAdminControlDisableSet(Packet):
     """ Variable Descriptor: Phy Admin Control Disable """
-    name = "Variable Descriptor: Phy Admin Control Disable"
-    fields_desc = [XByteField("branch", 0x09),
+    name = "Phy Admin Control Disable"
+    fields_desc = [ByteEnumField("branch", 0x09, OamBranchEnum),
                    XShortField("leaf", 0x0005),
                    XByteField("length", 1),
                    XByteField("value", 1)
@@ -309,69 +377,72 @@
 ####
 class DeviceId(Packet):
     """ Variable Descriptor: Device ID """
-    name = "Variable Descriptor: Device ID"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Device ID"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0002)]
 
 class FirmwareInfo(Packet):
     """ Variable Descriptor: Firmware Info """
-    name = "Variable Descriptor: Firmware Info"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Firmware Info"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0003)]
 
 class ChipsetInfo(Packet):
     """ Variable Descriptor: Chipset Info """
-    name = "Variable Descriptor: Chipset Info"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Chipset Info"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0004)]
 
 class DateOfManufacture(Packet):
     """ Variable Descriptor: Date of Manufacture """
-    name = "Variable Descriptor: Date of Manufacture"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Date of Manufacture"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0005)]
 
 class ManufacturerInfo(Packet):
     """ Variable Descriptor: ManufacturerInfo """
-    name = "Variable Descriptor: ManufacturerInfo"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "ManufacturerInfo"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0006)]
 
 class MaxLogicalLinks(Packet):
     """ Variable Descriptor: Max Logical Links """
-    name = "Variable Descriptor: Max Logical Links"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Max Logical Links"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0007)]
 
 class NumberOfNetworkPorts(Packet):
     """ Variable Descriptor: Number of Network Ports """
-    name = "Variable Descriptor: Number of Network Ports"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Number of Network Ports"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0008)]
 
 class NumberOfS1Interfaces(Packet):
     """ Variable Descriptor: Number of S1 Interfaces """
-    name = "Variable Descriptor: Number of S1 Interfaces"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Number of S1 Interfaces"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0009)]
 
 class DONUPacketBuffer(Packet):
     """ Variable Descriptor: D-ONU Packet Buffer """
-    name = "Variable Descriptor: D-ONU Packet Buffer"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "D-ONU Packet Buffer"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x000a)]
 
 class ReportThresholds(Packet):
     """ Variable Descriptor: Report Thresholds """
-    name = "Variable Descriptor: Report Thresholds"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Report Thresholds"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x000b),
                    ]
 
+DFLT_NUM_QUEUE_SETS  = 4
+DFLT_NUM_REPORT_VALS = 1
+
 class ReportThresholdsSet(Packet):
     """ Variable Descriptor: Report Thresholds Set """
-    name = "Variable Descriptor: Report Thresholds Set"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Report Thresholds Set"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x000b),
                    XByteField("length", 0x0a),
                    XByteField("num_queue_sets", 4),
@@ -384,8 +455,8 @@
 
 class UnicastLogicalLinkReportThresholdsSet(Packet):
     """ Variable Descriptor: Report Thresholds Unicast Logical Link Set"""
-    name = "Variable Descriptor: Report Thresholds Unicast Logical Link Set"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Report Thresholds Unicast Logical Link Set"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x000b),
                    XByteField("length", 0x0a),
                    XByteField("num_queue_sets", 4),
@@ -398,22 +469,22 @@
 
 class LogicalLinkForwarding(Packet):
     """ Variable Descriptor: Logical Link Forwarding """
-    name = "Variable Descriptor: Logical Link Forwarding"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Logical Link Forwarding"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x000c),
                    ]
 
 class OamFrameRate(Packet):
     """ Variable Descriptor: OAM Frame Rate """
-    name = "Variable Descriptor: OAM Frame Rate"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "OAM Frame Rate"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x000d),
                    ]
 
 class OamFrameRateSet(Packet):
     """ Variable Descriptor: OAM Frame Rate """
-    name = "Variable Descriptor: OAM Frame Rate"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "OAM Frame Rate"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x000d),
                    XByteField("length", 2),
                    XByteField("max", 12),
@@ -422,57 +493,57 @@
 
 class OnuManufacturerOrganizationName(Packet):
     """ Variable Descriptor: ONU Manufacturer Organization Name """
-    name = "Variable Descriptor: ONU Manufacturer Organization Name"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "ONU Manufacturer Organization Name"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x000e),
                    ]
 
 class FirmwareMfgTimeVaryingControls(Packet):
     """ Variable Descriptor: Firmware Mfg Time Varying Controls """
-    name = "Variable Descriptor: Firmware Mfg Time Varying Controls"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Firmware Mfg Time Varying Controls"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x000f),
                    ]
 
 class VendorName(Packet):
     """ Variable Descriptor: Vendor Name """
-    name = "Variable Descriptor: Vendor Name"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Vendor Name"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0011),
                    ]
 
 class ModelNumber(Packet):
     """ Variable Descriptor: Model Number """
-    name = "Variable Descriptor: Model Number"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Model Number"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0012),
                    ]
 
 class HardwareVersion(Packet):
     """ Variable Descriptor: Hardware Version """
-    name = "Variable Descriptor: Hardware Version"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Hardware Version"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0013),
                    ]
 
 class EponMode(Packet):
     """ Variable Descriptor: EPON Mode """
-    name = "Variable Descriptor: EPON Mode"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "EPON Mode"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0014),
                    ]
 
 class DynamicAddressAgeLimit(Packet):
     """ Variable Descriptor: Dynamic Address Age Limit """
-    name = "Variable Descriptor: Dynamic Address Age Limit"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Dynamic Address Age Limit"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0102),
                    ]
 
 class DynamicAddressAgeLimitSet(Packet):
     """ Variable Descriptor: Dynamic Address Age Limit Set """
-    name = "Variable Descriptor: Dynamic Address Age Limit Set"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Dynamic Address Age Limit Set"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0102),
                    XByteField("length", 2),
                    XShortField("value", 0x0000),
@@ -480,29 +551,29 @@
 
 class DynamicMacTable(Packet):
     """ Variable Descriptor: Dynamic MAC Table """
-    name = "Variable Descriptor: Dynamic MAC Table"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Dynamic MAC Table"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0103),
                    ]
 
 class StaticMacTable(Packet):
     """ Variable Descriptor: Static MAC Table """
-    name = "Variable Descriptor: Static MAC Table"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Static MAC Table"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0104),
                    ]
 
 class SourceAddressAdmissionControl(Packet):
     """ Variable Descriptor: Source Address Admission Control """
-    name = "Variable Descriptor: Source Address Admission Control"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Source Address Admission Control"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0106),
                    ]
 
 class SourceAddressAdmissionControlSet(Packet):
     """ Variable Descriptor: Source Address Admission Control Set """
-    name = "Variable Descriptor: Source Address Admission Control Set"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Source Address Admission Control Set"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0106),
                    XByteField("length", 1),
                    XByteField("value", 1),
@@ -510,15 +581,15 @@
 
 class MacLearningMinGuarantee(Packet):
     """ Variable Descriptor: MAC Learning MIN Guarantee """
-    name = "Variable Descriptor: MAC Learning MIN Guarantee"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "MAC Learning MIN Guarantee"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0107),
                    ]
 
 class MacLearningMinGuaranteeSet(Packet):
     """ Variable Descriptor: MAC Learning MIN Guarantee Set """
-    name = "Variable Descriptor: MAC Learning MIN Guarantee Set"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "MAC Learning MIN Guarantee Set"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0107),
                    XByteField("length", 2),
                    XShortField("value", 0),
@@ -526,15 +597,15 @@
 
 class MacLearningMaxAllowed(Packet):
     """ Variable Descriptor: MAC Learning MAX Allowed """
-    name = "Variable Descriptor: MAC Learning MAX Allowed"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "MAC Learning MAX Allowed"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0108),
                    ]
 
 class MacLearningMaxAllowedSet(Packet):
     """ Variable Descriptor: MAC Learning MAX Allowed Set """
-    name = "Variable Descriptor: MAC Learning MAX Allowed Set"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "MAC Learning MAX Allowed Set"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0108),
                    XByteField("length", 2),
                    XShortField("value", 0x0010),
@@ -542,15 +613,15 @@
 
 class MacLearningAggregateLimit(Packet):
     """ Variable Descriptor: MAC Learning Aggregate Limit """
-    name = "Variable Descriptor: MAC Learning Aggregate Limit"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "MAC Learning Aggregate Limit"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0109),
                    ]
 
 class MacLearningAggregateLimitSet(Packet):
     """ Variable Descriptor: MAC Learning Aggregate Limit Set """
-    name = "Variable Descriptor: MAC Learning Aggregate Limit Set"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "MAC Learning Aggregate Limit Set"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0109),
                    XByteField("length", 2),
                    XShortField("value", 0x0040),
@@ -558,15 +629,15 @@
 
 class FloodUnknown(Packet):
     """ Variable Descriptor: Flood Unknown """
-    name = "Variable Descriptor: Flood Unknown"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Flood Unknown"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x010b),
                    ]
 
 class FloodUnknownSet(Packet):
     """ Variable Descriptor: Flood Unknown Set """
-    name = "Variable Descriptor: Flood Unknown Set"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Flood Unknown Set"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x010b),
                    XByteField("length", 1),
                    XByteField("value", 1),
@@ -574,15 +645,15 @@
 
 class LocalSwitching(Packet):
     """ Variable Descriptor: Local Switching """
-    name = "Variable Descriptor: Local Switching"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Local Switching"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x010c),
                    ]
 
 class LocalSwitchingSet(Packet):
     """ Variable Descriptor: Local Switching Set """
-    name = "Variable Descriptor: Local Switching Set"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Local Switching Set"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x010c),
                    XByteField("length", 1),
                    XByteField("value", 0),
@@ -590,29 +661,95 @@
 
 class LLIDQueueConfiguration(Packet):
     """ Variable Descriptor: LLID Queue Configuration """
-    name = "Variable Descriptor: LLID Queue Configuration"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "LLID Queue Configuration"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x010d),
                    ]
 
+DFLT_NUM_ONU_LLIDS   = 1
+DFLT_NUM_LLID_QUEUES = 1
+DFLT_NUM_UNI_PORTS   = 1
+DFLT_NUM_PORT_QUEUES = 1
+DFLT_LLID_QUEUE_SIZE = 0xA0
+
 class LLIDQueueConfigurationSet(Packet):
     """ Variable Descriptor: LLID Queue Configuration """
-    name = "Variable Descriptor: LLID Queue Configuration"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "LLID Queue Configuration"
+
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x010d),
                    XByteField("length", 6),
-                   XByteField("numLLID", 1),
-                   XByteField("LLID0-numq", 1),
-                   XByteField("l0Q0-size",0xa0),
-                   XByteField("numPort", 1),
-                   XByteField("Port0-numq", 1),
-                   XByteField("p0Q0-size",0xa0),
+                   XByteField("numLLID",    DFLT_NUM_ONU_LLIDS),
+                   XByteField("LLID0-numq", DFLT_NUM_LLID_QUEUES),
+                   XByteField("l0Q0-size",  DFLT_LLID_QUEUE_SIZE),
+                   XByteField("numPort",    DFLT_NUM_UNI_PORTS),
+                   XByteField("Port0-numq", DFLT_NUM_PORT_QUEUES),
+                   XByteField("p0Q0-size",  DFLT_LLID_QUEUE_SIZE),
                    ]
 
+
+
+class LLIDQueueConfiguration16Set(Packet):
+    """ Variable Descriptor: LLID Queue Configuration """
+    name = "LLID Queue Configuration"
+
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
+                   XShortField("leaf", 0x010d),
+                   XByteField("length", 36),
+                   XByteField("numLLID",    16),
+                   XByteField("LLID0-numq", 1),
+                   XByteField("l0Q0-size",  32),
+                   XByteField("LLID1-numq", 1),
+                   XByteField("l1Q0-size",  32),
+                   XByteField("LLID2-numq", 1),
+                   XByteField("l2Q0-size",  32),
+                   XByteField("LLID3-numq", 1),
+                   XByteField("l3Q0-size",  32),
+                   XByteField("LLID4-numq", 1),
+                   XByteField("l4Q0-size",  32),
+                   XByteField("LLID5-numq", 1),
+                   XByteField("l5Q0-size",  32),
+                   XByteField("LLID6-numq", 1),
+                   XByteField("l6Q0-size",  32),
+                   XByteField("LLID7-numq", 1),
+                   XByteField("l7Q0-size",  32),
+                   XByteField("LLID8-numq", 1),
+                   XByteField("l8Q0-size",  32),
+                   XByteField("LLID9-numq", 1),
+                   XByteField("l9Q0-size",  32),
+                   XByteField("LLID10-numq", 1),
+                   XByteField("l10Q0-size",  32),
+                   XByteField("LLID11-numq", 1),
+                   XByteField("l11Q0-size",  32),
+                   XByteField("LLID12-numq", 1),
+                   XByteField("l12Q0-size",  32),
+                   XByteField("LLID13-numq", 1),
+                   XByteField("l13Q0-size",  32),
+                   XByteField("LLID14-numq", 1),
+                   XByteField("l14Q0-size",  32),
+                   XByteField("LLID15-numq", 1),
+                   XByteField("l15Q0-size",  16),
+                   XByteField("numPort",    DFLT_NUM_UNI_PORTS),
+                   XByteField("Port0-numq", DFLT_NUM_PORT_QUEUES),
+                   XByteField("p0Q0-size",  DFLT_LLID_QUEUE_SIZE),
+                   ]
+
+
+
+class LLIDQueueConfigurationSetData(Packet):
+    """ Variable Descriptor: LLID Queue Configuration """
+    name = "LLID Queue Configuration"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
+                   XShortField("leaf", 0x010d),
+                   FieldLenField("length", None, length_of="data", fmt="B"),
+                   StrLenField("data", "", length_from=lambda x:x.length),
+                  ]
+
+
 class FirmwareFilename(Packet):
     """ Variable Descriptor: Firmware Filename """
-    name = "Variable Descriptor: Firmware Filename"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Firmware Filename"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x010e),
                    ]
 
@@ -623,36 +760,36 @@
 
 class ClearDynamicMacTable(Packet):
     """ Variable Descriptor: Clear Dynamic MAC Table """
-    name = "Variable Descriptor: Clear Dynamic MAC Table"
-    fields_desc = [XByteField("branch", 0xD9),
+    name = "Clear Dynamic MAC Table"
+    fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
                    XShortField("leaf", 0x0101),
                    ]
 
 class AddDynamicMacAddress(Packet):
     """ Variable Descriptor: Add Dynamic MAC Address """
-    name = "Variable Descriptor: Add Dynamic MAC Address"
-    fields_desc = [XByteField("branch", 0xD9),
+    name = "Add Dynamic MAC Address"
+    fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
                    XShortField("leaf", 0x0102),
                    ]
 
 class DeleteDynamicMacAddress(Packet):
     """ Variable Descriptor: Delete Dynamic MAC Address """
-    name = "Variable Descriptor: Delete Dynamic MAC Address"
-    fields_desc = [XByteField("branch", 0xD9),
+    name = "Delete Dynamic MAC Address"
+    fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
                    XShortField("leaf", 0x0103),
                    ]
 
 class ClearStaticMacTable(Packet):
     """ Variable Descriptor: Clear Static MAC Table """
-    name = "Variable Descriptor: Clear Static MAC Table"
-    fields_desc = [XByteField("branch", 0xD9),
+    name = "Clear Static MAC Table"
+    fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
                    XShortField("leaf", 0x0104),
                    ]
 
 class AddStaticMacAddress(Packet):
     """ Variable Descriptor: Add Static MAC Address """
-    name = "Variable Descriptor: Add Static MAC Address"
-    fields_desc = [XByteField("branch", 0xD9),
+    name = "Add Static MAC Address"
+    fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
                    XShortField("leaf", 0x0105),
                    ByteField("length", 6),
                    MACField("mac", "01:00:5e:00:00:00"),
@@ -660,8 +797,8 @@
 
 class DeleteStaticMacAddress(Packet):
     """ Variable Descriptor: Delete Static MAC Address """
-    name = "Variable Descriptor: Delete Static MAC Address"
-    fields_desc = [XByteField("branch", 0xD9),
+    name = "Delete Static MAC Address"
+    fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
                    XShortField("leaf", 0x0106),
                    ByteField("length", 6),
                    MACField("mac", "01:00:5e:00:00:00"),
@@ -673,148 +810,148 @@
 
 class RxFramesGreen(Packet):
     """ Variable Descriptor: RxFramesGreen """
-    name = "Variable Descriptor: RxFramesGreen"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "RxFramesGreen"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0201),
                    ]
 
 class TxFramesGreen(Packet):
     """ Variable Descriptor: TxFramesGreen """
-    name = "Variable Descriptor: TxFramesGreen"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "TxFramesGreen"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0202),
                    ]
 
 class RxFrame_64(Packet):
     """ Variable Descriptor: RxFrame_64 """
-    name = "Variable Descriptor: RxFrame_64"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "RxFrame_64"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0204),
                    ]
 
 class RxFrame_65_127(Packet):
     """ Variable Descriptor: RxFrame_65_127 """
-    name = "Variable Descriptor: RxFrame_65_127"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "RxFrame_65_127"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0205),
                    ]
 
 class RxFrame_128_255(Packet):
     """ Variable Descriptor: RxFrame_128_255 """
-    name = "Variable Descriptor: RxFrame_128_255"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "RxFrame_128_255"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0206),
                    ]
 
 class RxFrame_256_511(Packet):
     """ Variable Descriptor: RxFrame_256_511 """
-    name = "Variable Descriptor: RxFrame_256_511"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "RxFrame_256_511"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0207),
                    ]
 
 class RxFrame_512_1023(Packet):
     """ Variable Descriptor: RxFrame_512_1023 """
-    name = "Variable Descriptor: RxFrame_512_1023"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "RxFrame_512_1023"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0208),
                    ]
 
 class RxFrame_1024_1518(Packet):
     """ Variable Descriptor: RxFrame_1024_1518 """
-    name = "Variable Descriptor: RxFrame_1024_1518"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "RxFrame_1024_1518"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0209),
                    ]
 
 class RxFrame_1519Plus(Packet):
     """ Variable Descriptor: RxFrame_1024_1518 """
-    name = "Variable Descriptor: RxFrame_1024_1518"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "RxFrame_1519_Plus"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x020A),
                    ]
 
 class TxFrame_64(Packet):
     """ Variable Descriptor: TxFrame_64 """
-    name = "Variable Descriptor: TxFrame_64"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "TxFrame_64"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x020B),
                    ]
 
 class TxFrame_65_127(Packet):
     """ Variable Descriptor: TxFrame_65_127 """
-    name = "Variable Descriptor: TxFrame_65_127"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "TxFrame_65_127"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x020C),
                    ]
 
 class TxFrame_128_255(Packet):
     """ Variable Descriptor: TxFrame_128_255 """
-    name = "Variable Descriptor: TxFrame_128_255"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "TxFrame_128_255"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x020D),
                    ]
 
 class TxFrame_256_511(Packet):
     """ Variable Descriptor: TxFrame_256_511 """
-    name = "Variable Descriptor: TxFrame_256_511"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "TxFrame_256_511"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x020E),
                    ]
 
 class TxFrame_512_1023(Packet):
     """ Variable Descriptor: TxFrame_512_1023 """
-    name = "Variable Descriptor: TxFrame_512_1023"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "TxFrame_512_1023"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x020F),
                    ]
 
 class TxFrame_1024_1518(Packet):
     """ Variable Descriptor: TxFrame_1024_1518 """
-    name = "Variable Descriptor: TxFrame_1024_1518"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "TxFrame_1024_1518"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0210),
                    ]
 
 class TxFrame_1519Plus(Packet):
     """ Variable Descriptor: TxFrame_1024_1518 """
-    name = "Variable Descriptor: TxFrame_1024_1518"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "TxFrame_1519_Plus"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0211),
                    ]
 
 class FramesDropped(Packet):
     """ Variable Descriptor: Frames Dropped """
-    name = "Variable Descriptor: Frames Dropped"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Frames Dropped"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0214),
                    ]
 
 class BytesDropped(Packet):
     """ Variable Descriptor: Bytes Dropped """
-    name = "Variable Descriptor: Bytes Dropped"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Bytes Dropped"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0215),
                    ]
 
 class TxBytesUnused(Packet):
     """ Variable Descriptor: Tx Bytes Unused """
-    name = "Variable Descriptor: Tx Bytes Unused"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Tx Bytes Unused"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0217),
                    ]
 
 class TxL2Errors(Packet):
     """ Variable Descriptor: TxL2Errors """
-    name = "Variable Descriptor: TxL2Errors"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "TxL2Errors"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0235),
                    ]
 
 class RxL2Errors(Packet):
     """ Variable Descriptor: RxL2Errors """
-    name = "Variable Descriptor: RxL2Errors"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "RxL2Errors"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0236),
                    ]
 
@@ -824,15 +961,15 @@
 
 class AlarmReporting(Packet):
     """ Variable Descriptor: Alarm Reporting """
-    name = "Variable Descriptor: Alarm Reporting"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Alarm Reporting"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0303),
                    ]
 
 class AlarmReportingSet(Packet):
     """ Variable Descriptor: Alarm Reporting Set """
-    name = "Variable Descriptor: Alarm Reporting Set"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Alarm Reporting Set"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0303),
                    XByteField("length", 6),
                    XShortField("LOS", 0x1101),
@@ -845,15 +982,15 @@
 ####
 class EncryptionMode(Packet):
     """ Variable Descriptor: Encryption Mode """
-    name = "Variable Descriptor: Encryption Mode"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Encryption Mode"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0402),
                    ]
 
 class EncryptionModeSet(Packet):
     """ Variable Descriptor: Encryption Mode Set """
-    name = "Variable Descriptor: Encryption Mode Set"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Encryption Mode Set"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0402),
                    XByteField("length", 1),
                    XByteField("value", 0),
@@ -861,8 +998,8 @@
 
 class IpmcForwardingRuleConfiguration(Packet):
     """ Variable Descriptor: IPMC Forwarding Rule Configuration """
-    name = "Variable Descriptor: IPMC Forwarding Rule Configuration"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "IPMC Forwarding Rule Configuration"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0505),
                    XByteField("length", 2),
                    XShortField("value", 0x0000),
@@ -870,15 +1007,15 @@
 
 class QueueCommittedInformationRate(Packet):
     """ Variable Descriptor: Queue Committed Information Rate """
-    name = "Variable Descriptor: Queue Committed Information Rate"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Queue Committed Information Rate"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0604),
                    ]
 
 class QueueCommittedInformationRateSet(Packet):
     """ Variable Descriptor: Queue Committed Information Rate Set """
-    name = "Variable Descriptor: Queue Committed Information Rate Set"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Queue Committed Information Rate Set"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0604),
                    XByteField("length", 6),
                    XShortField("burst", 0x0fff),
@@ -888,15 +1025,15 @@
 
 class FECMode(Packet):
     """ Variable Descriptor: FEC Mode """
-    name = "Variable Descriptor: FEC Mode"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "FEC Mode"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0605),
                    ]
 
 class FECModeSet(Packet):
     """ Variable Descriptor: FEC Mode """
-    name = "Variable Descriptor: FEC Mode"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "FEC Mode"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0605),
                    XByteField("length", 2),
                    XByteField("downstream", 0x01),
@@ -905,8 +1042,8 @@
 
 class MediaType(Packet):
     """ Variable Descriptor: Media Type """
-    name = "Variable Descriptor: Media Type"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Media Type"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0822),
                    ]
 
@@ -914,6 +1051,12 @@
 ####
 #### 0xD7 - Port Ingress Rules
 ####
+RuleSubtypeEnum = {  0x00: "Terminator",
+                     0x01: "Header",
+                     0x02: "Clause",
+                     0x03: "Result",
+                     }
+
 ClauseSubtypeEnum = {0x00: "LLID Index",
                      0x01: "L2 Destination MAC address",
                      0x02: "L2 Source MAC address",
@@ -958,27 +1101,74 @@
                      0x07: "T",           #True
                      }
 
+RuleResultsEnum =  { 0x00: "NOP",
+                     0x01: "Discard",
+                     0x02: "Forward",
+                     0x03: "Queue",
+                     0x04: "Set",
+                     0x05: "Copy",
+                     0x06: "Delete",
+                     0x07: "Insert",
+                     0x08: "Replace",
+                     0x09: "Clear Delete",
+                     0x0a: "Clear Insert",
+                     0x0b: "Increment Counter",
+                     # Tibit-specific values
+                     0x13: "OLT Queue",
+                     0x14: "Learning Group"
+                     }
+
+RuleClauses = {v: k for k, v in ClauseSubtypeEnum.iteritems()}
+RuleOperators = {v: k for k, v in RuleOperatorEnum.iteritems()}
+RuleResults = {v: k for k, v in RuleResultsEnum.iteritems()}
+
 class PortIngressRule(Packet):
     """ Variable Descriptor: Port Ingress Rule """
-    name = "Variable Descriptor: Port Ingress Rule"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ]
 
 class PortIngressRuleHeader(Packet):
     """ Variable Descriptor: Port Ingress Rule Header """
-    name = "Variable Descriptor: Port Ingress Rule Header"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Header"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 2),
-                   XByteField("header", 1),
-                   XByteField("precedence", 00),
+                   XByteField("subtype", 0x01), # Header
+                   ByteField("precedence", 12),
+                   ]
+
+class PortIngressRuleClause(Packet):
+    """ Variable Descriptor: Port Ingress Rule Clause """
+    name = "Port Ingress Rule Clause"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
+                   XShortField("leaf", 0x0501),
+                   FieldLenField("length", None, length_of="match", fmt="B", adjust=lambda pkt,x: x+7),
+                   XByteField("subtype", 0x02), #Clause
+                   XByteField("fieldcode", 0),
+                   XByteField("fieldinstance", 0),
+                   XByteField("msbmask", 0),
+                   XByteField("lsbmask", 0),
+                   XByteField("operator", 0x7), # T
+                   XByteField("matchlength", 0),
+                   StrLenField("match", "", length_from=lambda x:x.matchlength),
+                   ]
+
+class PortIngressRuleResultNoData(Packet):
+    """ Variable Descriptor: Port Ingress Rule Result NOP """
+    name = "Rule Result NOP"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
+                   XShortField("leaf", 0x0501),
+                   ByteField("length", 2),
+                   XByteField("subtype", 0x03), # Result
+                   ByteField("resulttype", 0x00),
                    ]
 
 class PortIngressRuleClauseMatchLength00(Packet):
     """ Variable Descriptor: Port Ingress Rule Clause """
-    name = "Variable Descriptor: Port Ingress Rule Clause"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Clause"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 7),
                    XByteField("clause", 2),
@@ -990,10 +1180,25 @@
                    XByteField("matchlength", 0),
                    ]
 
+class PortIngressRuleClauseAlwaysMatch(Packet):
+    """ Variable Descriptor: Port Ingress Rule Clause """
+    name = "Port Ingress Rule Clause"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
+                   XShortField("leaf", 0x0501),
+                   ByteField("length", 7),
+                   XByteField("clause", 2),
+                   XByteField("fieldcode", 0),
+                   XByteField("fieldinstance", 0),
+                   XByteField("msbmask", 0),
+                   XByteField("lsbmask", 0),
+                   XByteField("operator", 7),
+                   XByteField("matchlength", 0),
+                   ]
+
 class PortIngressRuleClauseMatchLength01(Packet):
     """ Variable Descriptor: Port Ingress Rule Clause """
-    name = "Variable Descriptor: Port Ingress Rule Clause"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Clause"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 8),
                    XByteField("clause", 2),
@@ -1008,8 +1213,8 @@
 
 class PortIngressRuleClauseMatchLength02(Packet):
     """ Variable Descriptor: Port Ingress Rule Clause """
-    name = "Variable Descriptor: Port Ingress Rule Clause"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Clause"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 9),
                    XByteField("clause", 2),
@@ -1019,14 +1224,14 @@
                    XByteField("lsbmask", 0),
                    XByteField("operator", 0),
                    XByteField("matchlength", 2),
-                   XShortField("match", 0),
+                   XShortField("match", 0)
                    ]
 
 
 class PortIngressRuleClauseMatchLength06(Packet):
     """ Variable Descriptor: Port Ingress Rule Clause """
-    name = "Variable Descriptor: Port Ingress Rule Clause"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Clause"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 13),
                    XByteField("clause", 2),
@@ -1046,8 +1251,8 @@
 
 class PortIngressRuleResultForward(Packet):
     """ Variable Descriptor: Port Ingress Rule Result Forward """
-    name = "Variable Descriptor: Port Ingress Rule Result Forward"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Result Forward"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 2),
                    XByteField("result", 3),
@@ -1056,8 +1261,8 @@
 
 class PortIngressRuleResultDiscard(Packet):
     """ Variable Descriptor: Port Ingress Rule Result Discard """
-    name = "Variable Descriptor: Port Ingress Rule Result Discard"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Result Discard"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 2),
                    XByteField("result", 3),
@@ -1066,8 +1271,8 @@
 
 class PortIngressRuleResultQueue(Packet):
     """ Variable Descriptor: Port Ingress Rule Result Queue """
-    name = "Variable Descriptor: Port Ingress Rule Result Queue"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Result Queue"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 6),
                    XByteField("result", 3),
@@ -1080,8 +1285,8 @@
 # __TIBIT_OLT_OAM__: Defined by Tibit
 class PortIngressRuleResultOLTQueue(Packet):
     """ Variable Descriptor: Port Ingress Rule Result OLT Queue """
-    name = "Variable Descriptor: Port Ingress Rule Result OLT Queue"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Result OLT Queue"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 15),
                    XByteField("result", 3),
@@ -1096,8 +1301,8 @@
 
 class PortIngressRuleResultOLTEPONQueue(Packet):
     """ Variable Descriptor: Port Ingress Rule Result OLT Queue """
-    name = "Variable Descriptor: Port Ingress Rule Result OLT Queue"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Result OLT Queue"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 15),
                    XByteField("result", 3),
@@ -1115,8 +1320,8 @@
 # __TIBIT_OLT_OAM__: Defined by Tibit
 class PortIngressRuleResultOLTBroadcastQueue(Packet):
     """ Variable Descriptor: Port Ingress Rule Result OLT Broadcast Queue """
-    name = "Variable Descriptor: Port Ingress Rule Result OLT Broadcast Queue"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Result OLT Broadcast Queue"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 15),
                    XByteField("result", 3),
@@ -1128,25 +1333,38 @@
                    XByteField("pad", 0),
                    ]
 
+class PortIngressRuleResultLearningGroup(Packet):
+    """ Variable Descriptor: Port Ingress Rule Result Learning Group """
+    name = "Port Ingress Rule Result Learning Group "
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
+                   XShortField("leaf", 0x0501),
+                   ByteField("length", 6),
+                   XByteField("result", 3),
+                   XByteField("grouprule", 0x14),
+                   XShortField("objecttype", 0x0000),
+                   XByteField("instance", 0),
+                   XByteField("num", 0),
+                   ]
+
 class PortIngressRuleResultSet(Packet):
     """ Variable Descriptor: Port Ingress Rule Result Set """
-    name = "Variable Descriptor: Port Ingress Rule Result Set"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Result Set"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
-                   ByteField("length", 8),
+                   FieldLenField("length", None, length_of="value", fmt="B", adjust=lambda pkt,x: x+6),
                    XByteField("result", 3),
                    XByteField("set", 4),
                    XByteField("fieldcode", 0),
                    XByteField("fieldinstance", 0),
                    XByteField("msbmask", 0),
                    XByteField("lsbmask", 0),
-                   XShortField("value", 0),
+                   StrLenField("value", "", length_from=lambda x:x.length-6),
                    ]
 
 class PortIngressRuleResultCopy(Packet):
     """ Variable Descriptor: Port Ingress Rule Result Copy """
-    name = "Variable Descriptor: Port Ingress Rule Result Copy"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Result Copy"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 6),
                    XByteField("result", 3),
@@ -1159,20 +1377,20 @@
 
 class PortIngressRuleResultDelete(Packet):
     """ Variable Descriptor: Port Ingress Rule Result Delete """
-    name = "Variable Descriptor: Port Ingress Rule Result Delete"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Result Delete"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 4),
                    XByteField("result", 3),
                    XByteField("delete", 6),
                    XByteField("fieldcode", 0),
-                   XByteField("instance", 0),
+                   XByteField("fieldinstance", 0),
                    ]
 
 class PortIngressRuleResultInsert(Packet):
     """ Variable Descriptor: Port Ingress Rule Result Insert """
-    name = "Variable Descriptor: Port Ingress Rule Result Insert"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Result Insert"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 4),
                    XByteField("result", 3),
@@ -1183,8 +1401,8 @@
 
 class PortIngressRuleResultReplace(Packet):
     """ Variable Descriptor: Port Ingress Rule Result Replace """
-    name = "Variable Descriptor: Port Ingress Rule Result Replace"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Result Replace"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 4),
                    XByteField("result", 3),
@@ -1195,8 +1413,8 @@
 
 class PortIngressRuleTerminator(Packet):
     """ Variable Descriptor: Port Ingress Rule Terminator """
-    name = "Variable Descriptor: Port Ingress Rule Terminator"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Port Ingress Rule Terminator"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0501),
                    ByteField("length", 1),
                    XByteField("terminator", 0),
@@ -1204,8 +1422,8 @@
 
 class CustomField(Packet):
     """ Variable Descriptor: Custom Field """
-    name = "Variable Descriptor: Custom Field"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Custom Field"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0502),
                    XByteField("length", 1),
                    XByteField("value", 0),
@@ -1213,8 +1431,8 @@
 
 class CustomFieldEtherType(Packet):
     """ Variable Descriptor: Custom Field EtherType """
-    name = "Variable Descriptor: Custom Field EtherType"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Custom Field EtherType"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0502),
                    XByteField("length", 6),
                    XByteField("fieldcode", 0x19),
@@ -1227,8 +1445,8 @@
 
 class CustomFieldGenericL3(Packet):
     """ Variable Descriptor: Custom Field Generic L3 """
-    name = "Variable Descriptor: Custom Field Generic L3"
-    fields_desc = [XByteField("branch", 0xD7),
+    name = "Custom Field Generic L3"
+    fields_desc = [ByteEnumField("branch", 0xD7, OamBranchEnum),
                    XShortField("leaf", 0x0502),
                    XByteField("length", 6),
                    XByteField("fieldcode", 0x1a),
@@ -1245,30 +1463,24 @@
 
 class ClearPortIngressRules(Packet):
     """ Variable Descriptor: Clear Port Ingress Rule """
-    name = "Variable Descriptor: Clear Port Ingress Rule"
-    fields_desc = [XByteField("branch", 0xD9),
+    name = "Clear Port Ingress Rule"
+    fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
                    XShortField("leaf", 0x0501),
-                   XByteField("length", 1),
-                   XByteField("value", 0),
                    ]
 
 class AddPortIngressRule(Packet):
     """ Variable Descriptor: Add Port Ingress Rule """
-    name = "Variable Descriptor: Add Port Ingress Rule"
-    fields_desc = [XByteField("branch", 0xD9),
+    name = "Add Port Ingress Rule"
+    fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
                    XShortField("leaf", 0x0502),
-                   XByteField("length", 0x80),
-                   XByteField("value", 0),
                    ]
 
 
 class DeletePortIngressRule(Packet):
     """ Variable Descriptor: Delete Port Ingress Rule """
-    name = "Variable Descriptor: Delete Port Ingress Rule"
-    fields_desc = [XByteField("branch", 0xD9),
+    name = "Delete Port Ingress Rule"
+    fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
                    XShortField("leaf", 0x0503),
-                   XByteField("length", 0x80),
-                   XByteField("value", 0),
                    ]
 
 ####
@@ -1276,15 +1488,15 @@
 ####
 class OltMode(Packet):
     """ Variable Descriptor: OLT Mode """
-    name = "Variable Descriptor: "
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "OLT Mode"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0101),
                    ]
 
 class OltModeSet(Packet):
     """ Variable Descriptor: OLT Mode """
-    name = "Variable Descriptor: "
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "OLT Mode"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0101),
                    XByteField("length", 1),
                    XByteField("value", 0),
@@ -1292,15 +1504,15 @@
 
 class OltPonAdminState(Packet):
     """ Variable Descriptor: OLT PON Admin State """
-    name = "Variable Descriptor: "
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "PON Admin State"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0102),
                    ]
 
 class OltPonAdminStateSet(Packet):
     """ Variable Container: OLT PON Admin State """
-    name = "Variable Container: "
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "PON Admin State"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0102),
                    XByteField("length", 1),
                    XByteField("value", 0),
@@ -1308,22 +1520,22 @@
 
 class TibitLinkMacTable(Packet):
     """ Variable Descriptor: Link MAC Table """
-    name = "Variable Descriptor: "
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "Link MAC Table"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0103),
                    ]
 
 class TibitKeyExchange(Packet):
     """ Variable Descriptor: Key Exchange """
-    name = "Variable Descriptor: "
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "Key Exchange Period"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0104),
                    ]
 
 class TibitKeyExchangeSet(Packet):
     """ Variable Descriptor: Key Exchange Set"""
-    name = "Variable Container: "
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "Key Exchange Period"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0104),
                    XByteField("length", 2),
                    XShortField("value", 0x1234),
@@ -1331,15 +1543,15 @@
 
 class OnuMode(Packet):
     """ Variable Descriptor: ONU Mode """
-    name = "Variable Descriptor: "
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "ONU Mode"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0105),
                    ]
 
 class OnuModeSet(Packet):
     """ Variable Descriptor: ONU Mode """
-    name = "Variable Descriptor: "
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "ONU Mode"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0105),
                    XByteField("length", 1),
                    XByteField("value", 0),
@@ -1347,31 +1559,31 @@
 
 class TibitGrantSpacing(Packet):
     """ Variable Descriptor: Grant Spacing """
-    name = "Variable Descriptor: "
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "Grant Spacing"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0106),
                    ]
 
 class TibitGrantSpacingSet(Packet):
     """ Variable Descriptor: Grant Spacing """
-    name = "Variable Descriptor: "
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "Grant Spacing"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0106),
                    XByteField("length", 1),
                    XByteField("value", 0),
-                   ]                   
+                   ]
 
 class TibitBurstOverheadProfiles(Packet):
     """ Variable Descriptor: Burst Overhead Profiles """
-    name = "Variable Descriptor: "
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "Burst Overhead Profiles"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0107),
                    ]
 
 class TibitBurstOverheadProfilesSet(Packet):
     """ Variable Descriptor: Burst Overhead Profiles """
-    name = "Variable Descriptor: "
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "Burst Overhead Profiles"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0107),
                    # Length is one + 5 for each entry
                    XByteField("length", 6),
@@ -1387,6 +1599,158 @@
                    XByteField("us_fec", 1),
                    ]
 
+class TibitGpioConditionSet(Packet):
+    """ Variable Descriptor: GPIO condition Set """
+    name = "GPIO Condition"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x0108),
+                   XByteField("length", 1),
+                   XByteField("state", 0),
+                   ]
+
+class TibitDiscoveryPeriod(Packet):
+    """ Variable Descriptor: Discovery Period """
+    name = "Discovery Period"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x0109),
+                   ]
+
+class TibitDiscoveryPeriodSet(Packet):
+    """ Variable Descriptor: Discovery Period Set """
+    name = "Discovery Period"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x0109),
+                   XByteField("length", 2),
+                   XShortField("period", 3000),
+                   ]
+class TibitLldpPeriod(Packet):
+    """ Variable Descriptor: LLDP Period """
+    name = "LLDP Period"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x010A),
+                   ]
+
+class TibitLldpPeriodSet(Packet):
+    """ Variable Descriptor: LLDP Period Set """
+    name = "LLDP Period"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x010A),
+                   XByteField("length", 2),
+                   XShortField("period", 60),
+                   ]
+
+class TibitLldpDestAddress(Packet):
+    """ Variable Descriptor: LLDP Destination MAC Address """
+    name = "LLDP Dest Address"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x010B),
+                   ]
+
+class TibitLldpDestAddressSet(Packet):
+    """ Variable Descriptor: LLDP Destination MAC Address Set """
+    name = "LLDP Dest Address"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x010B),
+                   XByteField("length", 6),
+                   MACField("addr", "01:80:c2:00:00:0e"),
+                   ]
+
+class TibitLldpTpid(Packet):
+    """ Variable Descriptor: LLDP TPID """
+    name = "LLDP TPID"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x010C),
+                   ]
+
+class TibitLldpTpidSet(Packet):
+    """ Variable Descriptor: LLDP TPID Set """
+    name = "LLDP TPID"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x010C),
+                   XByteField("length", 2),
+                   XShortField("tpid", 0),
+                   ]
+
+class TibitLldpVid(Packet):
+    """ Variable Descriptor: LLDP TPID """
+    name = "LLDP VID"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x010D),
+                   ]
+
+class TibitLldpVidSet(Packet):
+    """ Variable Descriptor: LLDP TPID Set """
+    name = "LLDP VID"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x010D),
+                   XByteField("length", 2),
+                   XShortField("vid", 0),
+                   ]
+
+class TibitFailsafeTimer(Packet):
+    """ Variable Descriptor: Failsafe Timer """
+    name = "Failsafe Timer"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x010E),
+                   ]
+
+class TibitFailsafeTimerSet(Packet):
+    """ Variable Descriptor: Failsafe Timer Set """
+    name = "Failsafe Timer"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x010E),
+                   XByteField("length", 1),
+                   XByteField("timer", 0),
+                   ]
+
+class TibitMtu(Packet):
+    """ Variable Descriptor: MTU """
+    name = "MTU"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x010F),
+                   ]
+
+class TibitMtuSet(Packet):
+    """ Variable Descriptor: MTU Set """
+    name = "MTU"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x010F),
+                   XByteField("length", 4),
+                   XIntField("mtu", 0),
+                   ]
+
+class TibitCtagCtagMode(Packet):
+    """ Variable Descriptor: CTAG CTAG Mode """
+    name = "CTAG-CTAG Mode"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x0110),
+                   ]
+
+class TibitCtagCtagModeSet(Packet):
+    """ Variable Descriptor: CTAG CTAG Mode Set """
+    name = "CTAG-CTAG Mode"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x0110),
+                   XByteField("length", 1),
+                   XByteField("enable", 0),
+                   ]
+
+class TibitStatsOptions(Packet):
+    """ Variable Descriptor: Tibit Stats Options """
+    name = "Tibit Stats Options"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x0111),
+                   ]
+
+class TibitStatsOptionsSet(Packet):
+    """ Variable Descriptor: Tibit Stats Options Set"""
+    name = "Tibit Stats Options Set"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x0111),
+                   ByteField("length", 5),
+                   ByteField("enable", 0),
+                   IntField("period", 0),
+                   ]
 
 
 UpstreamSlaSubtypeEnum = { 0x00: "Terminator",
@@ -1403,15 +1767,15 @@
 
 class UpstreamSla(Packet):
     """ Variable Descriptor: Upstream SLA """
-    name = "Variable Descriptor: Upstream SLA"
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "Upstream SLA"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0621),
                    ]
 
 class UpstreamSlaHeader(Packet):
     """ Variable Descriptor: Upstream SLA Header """
-    name = "Variable Descriptor: Upstream SLA Header"
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "Upstream SLA Header"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0621),
                    ByteField("length", 1),
                    XByteField("subtype", 1),
@@ -1419,8 +1783,8 @@
 
 class UpstreamSlaTerminator(Packet):
     """ Variable Descriptor: Upstream SLA Terminator """
-    name = "Variable Descriptor: Upstream SLA Terminator"
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "Upstream SLA Terminator"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0621),
                    ByteField("length", 1),
                    XByteField("subtype", 0),
@@ -1428,8 +1792,8 @@
 
 class UpstreamSlaSettingLength01(Packet):
     """ Variable Descriptor: Upstream SLA Setting """
-    name = "Variable Descriptor: Upstream SLA Setting"
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "Upstream SLA Setting"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0621),
                    ByteField("length", 3),
                    XByteField("subtype", 0),
@@ -1439,8 +1803,8 @@
 
 class UpstreamSlaSettingLength02(Packet):
     """ Variable Descriptor: Upstream SLA Setting """
-    name = "Variable Descriptor: Upstream SLA Setting"
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "Upstream SLA Setting"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0621),
                    ByteField("length", 4),
                    XByteField("subtype", 0),
@@ -1450,8 +1814,8 @@
 
 class UpstreamSlaSettingLength04(Packet):
     """ Variable Descriptor: Upstream SLA Setting """
-    name = "Variable Descriptor: Upstream SLA Setting"
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "Upstream SLA Setting"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0621),
                    ByteField("length", 6),
                    XByteField("subtype", 0),
@@ -1461,20 +1825,52 @@
 
 class SlaPriorityType(Packet):
     """ Variable Descriptor: SLA Priority Type """
-    name = "Variable Descriptor: "
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "SLA Priority Type"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0622),
                    ]
 
 class SlaPriorityTypeSet(Packet):
     """ Variable Container: SLA Priority Type """
-    name = "Variable Container: "
-    fields_desc = [XByteField("branch", 0xB7),
+    name = "SLA Priority Type"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
                    XShortField("leaf", 0x0622),
                    XByteField("length", 1),
                    XByteField("value", 1),
                    ]
 
+class DsGuarRate(Packet):
+    """ Variable Descriptor: Downstream Guaranteed Rate """
+    name = "Downstream Guaranteed Rate"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x0623),
+                   ]
+
+class DsGuarRateSet(Packet):
+    """ Variable Descriptor: Downstream Guaranteed Rate Set"""
+    name = "Downstream Guaranteed Rate Set"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x0623),
+                   ByteField("length", 6),
+                   ShortField("mbs", 0),
+                   IntField("rate", 0),                  ]
+
+
+class DsBestEffortRate(Packet):
+    """ Variable Descriptor: Downstream Best Effort Rate """
+    name = "Downstream Best Effort Rate"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x0624),
+                   ]
+
+class DsBestEffortRateSet(Packet):
+    """ Variable Descriptor: Downstream Best Effort Rate Set"""
+    name = "Downstream Best Effort Rate Set"
+    fields_desc = [ByteEnumField("branch", 0xB7, OamBranchEnum),
+                   XShortField("leaf", 0x0624),
+                   ByteField("length", 6),
+                   ShortField("mbs", 0),
+                   IntField("rate", 0),                  ]
 
 
 ####
@@ -1483,23 +1879,22 @@
 
 class EnableUserTraffic(Packet):
     """ Variable Descriptor: Enable User Traffic """
-    name = "Variable Descriptor: Enable User Traffic"
-    fields_desc = [XByteField("branch", 0xD9),
+    name = "Enable User Traffic"
+    fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
                    XShortField("leaf", 0x0601),
-                   XByteField("length", 1),
-                   XByteField("value", 0),
                    ]
 
 class DisableUserTraffic(Packet):
     """ Variable Descriptor: Disable User Traffic """
-    name = "Variable Descriptor: Disable User Traffic"
-    fields_desc = [XByteField("branch", 0xD9),
-                   XShortField("leaf", 0x0602)]
+    name = "Disable User Traffic"
+    fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
+                   XShortField("leaf", 0x0602),
+                   ]
 
 class LoopbackEnable(Packet):
     """ Variable Descriptor: Loopback Enable """
-    name = "Variable Descriptor: Loopback Enable"
-    fields_desc = [XByteField("branch", 0xD9),
+    name = "Loopback Enable"
+    fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
                    XShortField("leaf", 0x0603),
                    XByteField("length", 1),
                    XByteField("location", 0),
@@ -1507,8 +1902,8 @@
 
 class LoopbackDisable(Packet):
     """ Variable Descriptor: Loopback Disable """
-    name = "Variable Descriptor: Loopback Disable"
-    fields_desc = [XByteField("branch", 0xD9),
+    name = "Loopback Disable"
+    fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
                    XShortField("leaf", 0x0604),
                    XByteField("length", 1),
                    XByteField("location", 0),
@@ -1516,43 +1911,101 @@
 
 class CurrentAlarmSummary(Packet):
     """ Variable Descriptor: Current Alarm Summary """
-    name = "Variable Descriptor: Current Alarm Summary"
-    fields_desc = [XByteField("branch", 0xD9),
+    name = "Current Alarm Summary"
+    fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
                    XShortField("leaf", 0x0301)]
 
 class DeviceReset(Packet):
     """ Variable Descriptor: Device Reset """
-    name = "Variable Descriptor: Device Reset"
-    fields_desc = [XByteField("branch", 0xD9),
+    name = "Device Reset"
+    fields_desc = [ByteEnumField("branch", 0xD9, OamBranchEnum),
                    XShortField("leaf", 0x0001),
-                   XByteField("length", 0x80),
                    ]
 
 class TibitDeviceReset(Packet):
     """ Variable Descriptor: Tibit Device Reset """
-    name = "Variable Descriptor: Tibit Device Reset"
+    name = "Tibit Device Reset"
     fields_desc = [XByteField("branch", 0xB9),
                    XShortField("leaf", 0x0001),
-                   XByteField("length", 0x80),
+                   ]
+
+class TibitPreprovisionLink(Packet):
+    """ Variable Descriptor: Tibit Preprovision Link """
+    name = "Tibit Preprovision Link"
+    fields_desc = [XByteField("branch", 0xB9),
+                   XShortField("leaf", 0x0002),
                    ]
 
 class TibitApplySla(Packet):
     """ Variable Descriptor: Apply SLA """
-    name = "Variable Descriptor: Apply Sla"
+    name = "Apply Sla"
     fields_desc = [XByteField("branch", 0xB9),
                    XShortField("leaf", 0x0601),
-                   XByteField("length", 0x80),
-                   XByteField("value", 0),
                    ]
 
 
 ##
+## DPoE File Transfer
+##
+
+### Table 156 - DPoE File Transfer Opcodes
+DPoEFileXferOpcodeEnum = {
+    0x00: "Reserved",
+    0x01: "Write Request",
+    0x02: "File Transfer Data",
+    0x03: "File Transfer Ack",
+    }
+
+Dpoe_FileXferOpcodes = {v: k for k, v in DPoEFileXferOpcodeEnum.iteritems()}
+
+
+### Table 160 - DPoE File Acknowledgement Response Codes
+DPoEFileAckRespCodeEnum = {
+    0x00: "OK",
+    0x01: "Undefined",
+    0x02: "Not Found",
+    0x03: "No Access",
+    0x04: "Full",
+    0x05: "Illegal Operation",
+    0x06: "Unknown ID",
+    0x07: "Bad Block",
+    0x08: "Timeout",
+    0x09: "Busy",
+    0x0A: "Incompatible File",
+    0x0B: "Corrupted File",
+    }
+
+Dpoe_FileAckRspOpcodes = {v: k for k, v in DPoEFileAckRespCodeEnum.iteritems()}
+
+class DpoeFileTransferWrite(Packet):
+    name = "DPoE File Transfer Write "
+    fields_desc = [ByteEnumField("opcode", 0x01, DPoEFileXferOpcodeEnum),
+                   StrField("filename", ""),
+                  ]
+
+class DpoeFileTransferData(Packet):
+    name = "DPoE File Transfer Data "
+    fields_desc = [ByteEnumField("opcode", 0x02, DPoEFileXferOpcodeEnum),
+                   ShortField("block_num", 0),
+                   FieldLenField("block_width", None, length_of="block", fmt="H"),
+                   StrLenField("block", "", length_from=lambda x:x.length),
+                  ]
+
+class DpoeFileTransferAck(Packet):
+    name = "DPoE File Transfer Data "
+    fields_desc = [ByteEnumField("opcode", 0x03, DPoEFileXferOpcodeEnum),
+                   ShortField("block_num", 0),
+                   ByteEnumField("response_code", 0x00, DPoEFileAckRespCodeEnum),
+                  ]
+
+
+##
 ## Broadcom TLVs
 ##
 class Broadcom07_7F_F1_Set01(Packet):
     """ Variable Descriptor: Broadcom 0x07/0x7ff1 """
-    name = "Variable Descriptor: Broadcom 0x07/0x7ff1"
-    fields_desc = [XByteField("branch", 0x07),
+    name = "Broadcom 0x07/0x7ff1"
+    fields_desc = [ByteEnumField("branch", 0x07, OamBranchEnum),
                    XShortField("leaf", 0x7ff1),
                    XByteField("length", 2),
                    XShortField("value0", 0x0101),
@@ -1560,8 +2013,8 @@
 
 class Broadcom07_7F_F1_Set02(Packet):
     """ Variable Descriptor: Broadcom 0x07/0x7ff1 """
-    name = "Variable Descriptor: Broadcom 0x07/0x7ff1"
-    fields_desc = [XByteField("branch", 0x07),
+    name = "Broadcom 0x07/0x7ff1"
+    fields_desc = [ByteEnumField("branch", 0x07, OamBranchEnum),
                    XShortField("leaf", 0x7ff1),
                    XByteField("length", 7),
                    XShortField("value0", 0x0201),
@@ -1572,8 +2025,8 @@
 
 class Broadcom07_7F_F1_Set03(Packet):
     """ Variable Descriptor: Broadcom 0x07/0x7ff1 """
-    name = "Variable Descriptor: Broadcom 0x07/0x7ff1"
-    fields_desc = [XByteField("branch", 0x07),
+    name = "Broadcom 0x07/0x7ff1"
+    fields_desc = [ByteEnumField("branch", 0x07, OamBranchEnum),
                    XShortField("leaf", 0x7ff1),
                    XByteField("length", 7),
                    XShortField("value0", 0x0301),
@@ -1584,8 +2037,8 @@
 
 class Broadcom07_7F_F1_Set04(Packet):
     """ Variable Descriptor: Broadcom 0x07/0x7ff1 """
-    name = "Variable Descriptor: Broadcom 0x07/0x7ff1"
-    fields_desc = [XByteField("branch", 0x07),
+    name = "Broadcom 0x07/0x7ff1"
+    fields_desc = [ByteEnumField("branch", 0x07, OamBranchEnum),
                    XShortField("leaf", 0x7ff1),
                    XByteField("length", 1),
                    XByteField("value0", 0x00),
@@ -1593,8 +2046,8 @@
 
 class Broadcom07_7F_F6_Set(Packet):
     """ Variable Descriptor: Broadcom 0x07/0x7ff6 """
-    name = "Variable Descriptor: Broadcom 0x07/0x7ff6"
-    fields_desc = [XByteField("branch", 0x07),
+    name = "Broadcom 0x07/0x7ff6"
+    fields_desc = [ByteEnumField("branch", 0x07, OamBranchEnum),
                    XShortField("leaf", 0x7ff6),
                    XByteField("length", 2),
                    XShortField("value0", 0x07d0),
@@ -1605,8 +2058,8 @@
 ###
 class Clause30AttributesMacEnable(Packet):
     """ Variable Descriptor: Clause 30 Attributes MAC Enable """
-    name = "Variable Descriptor: Clause 30 Attributes MAC Enable"
-    fields_desc = [XByteField("branch", 0x07),
+    name = "Clause 30 Attributes MAC Enable"
+    fields_desc = [ByteEnumField("branch", 0x07, OamBranchEnum),
                    XShortField("leaf", 0x001a),
                    XByteField("length", 1),
                    XByteField("value", 1),
@@ -1614,8 +2067,8 @@
 
 class GenericTLV(Packet):
     """ Variable Descriptor: Generic TLV """
-    name = "Variable Descriptor: Generic TLV"
-    fields_desc = [XByteField("branch", 0x00),
+    name = "Generic TLV"
+    fields_desc = [ByteEnumField("branch", 0x00, OamBranchEnum),
                    XShortField("leaf", 0x0000),
                    FieldLenField("length", None, length_of="value", fmt="B"),
                    StrLenField("value", "", length_from=lambda x:x.length),
