diff --git a/voltha/adapters/microsemi_olt/ActivationWatcher.py b/voltha/adapters/microsemi_olt/ActivationWatcher.py
index 7fe30cd..ee0e309 100644
--- a/voltha/adapters/microsemi_olt/ActivationWatcher.py
+++ b/voltha/adapters/microsemi_olt/ActivationWatcher.py
@@ -13,12 +13,25 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+from struct import pack, unpack
+
 from scapy.automaton import ATMT
 import structlog
 from voltha.adapters.microsemi_olt.BaseOltAutomaton import BaseOltAutomaton
 from voltha.adapters.microsemi_olt.PAS5211 import PAS5211EventOnuActivation, PAS5211MsgGetActivationAuthMode, \
-    PAS5211MsgGetActivationAuthModeResponse, PON_ACTIVATION_AUTH_AUTO, PON_ENABLE, PAS5211MsgSetOnuOmciPortId, \
-    PAS5211MsgSetOnuOmciPortIdResponse, PAS5211MsgSendFrame, PON_PORT_PON, PAS5211MsgSendFrameResponse
+    PAS5211MsgGetActivationAuthModeResponse, PAS5211MsgSetOnuOmciPortId, \
+    PAS5211MsgSetOnuOmciPortIdResponse, PAS5211MsgSendFrame, PAS5211MsgSendFrameResponse, \
+    PAS5211MsgGetLogicalObjectStatus, PAS5211MsgGetLogicalObjectStatusResponse, PAS5211MsgSetOnuAllocId, \
+    PAS5211MsgGetDbaMode, PAS5211MsgGetDbaModeResponse, PAS5211MsgSendDbaAlgorithmMsg, \
+    PAS5211MsgSendDbaAlgorithmMsgResponse, PAS5211EventDbaAlgorithm, PAS5211MsgSetPortIdConfig, \
+    PAS5211MsgSetPortIdConfigResponse, PAS5211MsgGetOnuIdByPortId, PAS5211MsgGetOnuIdByPortIdResponse, \
+    PAS5211SetVlanUplinkConfiguration, PAS5211SetVlanUplinkConfigurationResponse, PAS5211MsgSetOnuAllocIdResponse
+from voltha.adapters.microsemi_olt.PAS5211_constants import PON_ACTIVATION_AUTH_AUTO, PON_ENABLE, PON_PORT_PON, \
+    PON_LOGICAL_OBJECT_TYPE_ALLOC_ID, PON_LOGICAL_OBJECT_TYPE_ONU_ID_BY_ALLOC_ID, PON_TRUE, \
+    PMC_OFAL_MAX_BI_DIRECTIONAL_FLOW_PER_ONU, PMC_OFAL_START_FLOW_ID_BASE, PON_DBA_MODE_RUNNING, \
+    PYTHAGORAS_UPDATE_AID_SLA, SLA_be_bw_gros, SLA_gr_bw_gros, SLA_gr_bw_fine, SLA_be_bw_fine, PYTHAGORAS_DBA_DATA_COS, \
+    PYTHAGORAS_DBA_STATUS_REPORT_NSR, PYTHAGORAS_SET_SLA_RESP_SIZE, PON_PORT_TYPE_GEM, PON_PORT_DESTINATION_CNI0, \
+    PON_FALSE, PON_DISABLE
 from voltha.extensions.omci.omci_entities import CircuitPack
 from voltha.extensions.omci.omci_frame import OmciFrame
 from voltha.extensions.omci.omci_messages import OmciGet, OmciGetResponse
@@ -29,6 +42,14 @@
 log = structlog.get_logger()
 _verbose = False
 
+ALLOC_ID = 1000
+
+def alloc_id(onu_id):
+    for i in range(0, PMC_OFAL_MAX_BI_DIRECTIONAL_FLOW_PER_ONU):
+        alloc_id = PMC_OFAL_START_FLOW_ID_BASE + \
+                   (onu_id * PMC_OFAL_MAX_BI_DIRECTIONAL_FLOW_PER_ONU) + i
+        yield alloc_id
+
 def hexstring(string):
     return ":".join("{:02x}".format(ord(c)) for c in string)
 
@@ -39,6 +60,8 @@
     onu_session_id = None
     port_id = None
     channel_id = None
+    alloc_id = None
+    vendor = None
 
     def parse_args(self, debug=0, store=0, **kwargs):
         self.onu_id = kwargs.pop('onu_id')
@@ -46,6 +69,7 @@
         self.onu_session_id = kwargs.pop('onu_session_id')
         self.port_id = self.onu_id
         self.channel_id = kwargs.pop('channel_id')
+        self.alloc_id = alloc_id(self.onu_id)
 
         if self.onu_id is None or self.serial_number is None or \
                 self.onu_session_id is None or self.channel_id is None:
@@ -85,13 +109,45 @@
     def wait_omci_get(self):
         pass
 
+    @ATMT.state()
+    def wait_logical_object_status(self):
+        pass
+
+    @ATMT.state()
+    def wait_set_alloc_id(self):
+        pass
+
+    @ATMT.state()
+    def wait_dba_mode(self):
+        pass
+
+    @ATMT.state()
+    def wait_send_dba_alg_msg(self):
+        pass
+
+    @ATMT.state()
+    def wait_dba_alg_event(self):
+        pass
+
+    @ATMT.state()
+    def wait_set_port_id_config(self):
+        pass
+
+    @ATMT.state()
+    def wait_get_onu_id_by_port_id(self):
+        pass
+
+    @ATMT.state()
+    def wait_set_vlan_uplink_config(self):
+        pass
+
     @ATMT.state(final=1)
     def end(self):
         pass
 
     @ATMT.state(error=1)
-    def error(self):
-        pass
+    def error(self, msg):
+        log.error(msg)
 
     """
     Utility Methods
@@ -114,6 +170,21 @@
         log.error(msg)
         raise self.error()
 
+    def detect_onu(self):
+        log.info("Activated {} ONT".format(self.vendor))
+        self.create_port(self.vendor)
+        print self.channel_id
+        print self.onu_id
+        try:
+            self.device.onu_detected(
+                parent_port_no=self.channel_id,
+                child_device_type='%s_onu' % self.vendor.lower(),
+                onu_id=self.onu_id,
+                serial_number=hexstring(self.serial_number)
+            )
+        except Exception as e:
+            print e
+
     """
     Transitions
     """
@@ -128,7 +199,7 @@
     # Transitions from wait_get_auth_mode
     @ATMT.timeout(wait_get_auth_mode, 3)
     def timeout_get_auth_mode(self):
-        self.error('Could not get auth mode for OLT {}; dropping activation event for {}'
+        raise self.error('Could not get auth mode for OLT {}; dropping activation event for {}'
                    .format(self.target, hexstring(self.serial_number)))
 
     @ATMT.receive_condition(wait_get_auth_mode)
@@ -152,7 +223,7 @@
     # Transitions from wait_omci_port_id
     @ATMT.timeout(wait_omci_port_id, 3)
     def timeout_omci_port_id(self):
-        self.error('Could not set omci port id for OLT {}; dropping activation event for {}'
+        raise self.error('Could not set omci port id for OLT {}; dropping activation event for {}'
                    .format(self.target, hexstring(self.serial_number)))
 
     @ATMT.receive_condition(wait_omci_port_id)
@@ -180,6 +251,7 @@
         omci_frame = PAS5211MsgSendFrame(port_type=PON_PORT_PON, port_id=self.port_id,
                                          management_frame=PON_ENABLE, frame=frame)
 
+
         self.send(self.px(omci_frame))
 
         raise self.wait_send_frame()
@@ -187,7 +259,7 @@
     # Transitions from wait_send_frame
     @ATMT.timeout(wait_send_frame, 3)
     def timeout_send_frame(self):
-        self.error('Could not send omci to OLT {}; dropping activation event for {}'
+        raise self.error('Could not send omci to OLT {}; dropping activation event for {}'
                    .format(self.target, hexstring(self.serial_number)))
 
     @ATMT.receive_condition(wait_send_frame)
@@ -198,22 +270,180 @@
     # Transitions from wait_omci_get
     @ATMT.timeout(wait_omci_get, 3)
     def timeout_send_frame(self):
-        self.error('Did not receive omci get event from OLT {}; dropping activation event for {}'
+        raise self.error('Did not receive omci get event from OLT {}; dropping activation event for {}'
                    .format(self.target, hexstring(self.serial_number)))
 
     @ATMT.receive_condition(wait_omci_get)
     def wait_for_omci_get(self, pkt):
         if OmciGetResponse in pkt:
-            vendor = pkt['OmciGetResponse'].data['vendor_id']
-            log.info("Activated {} ONT".format(vendor))
-            self.create_port(vendor)
+            self.allocId = self.alloc_id.next()
+            self.vendor = pkt['OmciGetResponse'].data['vendor_id']
+            l_obj_status = PAS5211MsgGetLogicalObjectStatus(
+                            type=PON_LOGICAL_OBJECT_TYPE_ALLOC_ID,
+                            value=self.allocId)
+            self.send(self.px(l_obj_status))
+            raise self.wait_logical_object_status()
 
-            self.device.onu_detected(
-                parent_port_no=self.channel_id,
-                child_device_type='%s_onu' % vendor.lower(),
-                onu_id=self.port_id,
+    # Transitions from wait_logical_object_status
+    @ATMT.timeout(wait_logical_object_status, 3)
+    def timeout_logical_object_status(self):
+        raise self.error('Did not receive info about alloc id status for {}; dropping activation event for {}'
+                   .format(self.target, hexstring(self.serial_number)))
+
+    @ATMT.receive_condition(wait_logical_object_status)
+    def wait_for_logical_object_status(self, pkt):
+        if PAS5211MsgGetLogicalObjectStatusResponse in pkt:
+            if pkt.type == PON_LOGICAL_OBJECT_TYPE_ALLOC_ID:
+                if pkt.return_value == 0:
+                    # alloc-id not set
+                    set_alloc_id = PAS5211MsgSetOnuAllocId(
+                                    alloc_id=self.allocId,
+                                    allocate=PON_ENABLE
+                                )
+                    self.onu_id = -1
+                    self.port_id = self.allocId
+                    self.send(self.px(set_alloc_id))
+                    raise self.wait_set_alloc_id()
+                else:
+                    l_obj_status = PAS5211MsgGetLogicalObjectStatus(
+                        type=PON_LOGICAL_OBJECT_TYPE_ONU_ID_BY_ALLOC_ID,
+                        value=self.allocId)
+                    self.send(self.px(l_obj_status))
+                    raise self.wait_logical_object_status()
+            elif pkt.type == PON_LOGICAL_OBJECT_TYPE_ONU_ID_BY_ALLOC_ID:
+                # That's your onu id.
+                self.onu_id = pkt.return_value
+                # FIXME Need to iterate to get the port id as
+                # in PMC_OFAL_flow_db.c line 656
+                # UPDATE PORT_ID
+                set_alloc_id = PAS5211MsgSetOnuAllocId(
+                    alloc_id=self.allocId,
+                    allocate=PON_ENABLE
+                )
+                self.send(self.px(set_alloc_id))
+                raise self.wait_for_set_alloc_id() #FIXME are we done? probably not but check
+
+    # Transitions from wait_set_alloc_id
+    @ATMT.timeout(wait_set_alloc_id, 3)
+    def timeout_set_alloc_id(self):
+        raise self.error('Was not able to set alloc id for {}; dropping activation event for {}'
+                   .format(self.target, hexstring(self.serial_number)))
+
+    @ATMT.receive_condition(wait_set_alloc_id)
+    def wait_for_set_alloc_id(self, pkt):
+        if PAS5211MsgSetOnuAllocIdResponse in pkt:
+            self.send(self.px(PAS5211MsgGetDbaMode()))
+            raise self.wait_dba_mode()
+
+    # Transitions from wait for dba mode (See Pythagoras_api.c line 344 & PMC_OFAL.c 2062)
+    @ATMT.timeout(wait_dba_mode, 3)
+    def timeout_wait_dba_mode(self):
+        raise self.error('Did not get DBA mode for {}; dropping activation event for {}'
+                   .format(self.target, hexstring(self.serial_number)))
+
+
+    @ATMT.receive_condition(wait_dba_mode)
+    def wait_for_dba_mode(self, pkt):
+        if PAS5211MsgGetDbaModeResponse in pkt:
+            if pkt.dba_mode != PON_DBA_MODE_RUNNING:
+                raise self.error('DBA is not running; dropping activation event for {}'
+                           .format(hexstring(self.serial_number)))
+
+            data = pack('<LLHHBBBB', PYTHAGORAS_UPDATE_AID_SLA,
+                        self.allocId, SLA_gr_bw_gros, SLA_be_bw_gros,
+                        SLA_gr_bw_fine, SLA_be_bw_fine, PYTHAGORAS_DBA_DATA_COS,
+                        PYTHAGORAS_DBA_STATUS_REPORT_NSR)
+
+            send_dba_alg = PAS5211MsgSendDbaAlgorithmMsg(data=data)
+            self.send(self.px(send_dba_alg))
+            raise self.wait_send_dba_alg_msg()
+
+    # Transitions from wait_send_dba_alg_msg
+    @ATMT.timeout(wait_send_dba_alg_msg, 3)
+    def timeout_wait_for_send_dba_alg_msg(self):
+        raise self.error('Unable to set dba alg params for {}; dropping activation event for {}'
+                         .format(self.target, hexstring(self.serial_number)))
+
+    @ATMT.receive_condition(wait_send_dba_alg_msg)
+    def wait_for_send_dba_alg_msg(self, pkt):
+        if PAS5211MsgSendDbaAlgorithmMsgResponse in pkt:
+            raise self.wait_dba_alg_event()
+
+    # Transitions from wait_dba_alg_event
+    @ATMT.timeout(wait_dba_alg_event, 3)
+    def timeout_wait_for_send_dba_alg_event(self):
+        raise self.error('DBA params ont set for {}; dropping activation event for {}'
+                         .format(self.target, hexstring(self.serial_number)))
+
+    @ATMT.receive_condition(wait_dba_alg_event)
+    def wait_for_send_dba_alg_event(self, pkt):
+        if PAS5211EventDbaAlgorithm in pkt:
+            if pkt.size < PYTHAGORAS_SET_SLA_RESP_SIZE:
+                raise self.error('DBA Event message too small for {}, dropping activation event for {}'
+                                 .format(self.target, hexstring(self.serial_number)))
+
+            (_, aid, _) = unpack('<LLH',pkt.data)
+            if aid == self.allocId:
+                # All is well moving on.
+                # There is some more shit at PYTHAGORAS.c line 395 but fuck it.
+                set_port_id_config = PAS5211MsgSetPortIdConfig(
+                    port_id=self.port_id,
+                    activate=PON_ENABLE,
+                    alloc_id=self.allocId,
+                    type=PON_PORT_TYPE_GEM,
+                    destination=PON_PORT_DESTINATION_CNI0
+                )
+                self.send(self.px(set_port_id_config))
+                raise self.wait_set_port_id_config()
+
+    # Transitions from wait_set_port_id_config
+    @ATMT.timeout(wait_set_port_id_config, 3)
+    def timeout_wait_set_port_id_config(self):
+        raise self.error('Could not set port id config for {}; dropping activation event for {}'
+                         .format(self.target, hexstring(self.serial_number)))
+
+    @ATMT.receive_condition(wait_set_port_id_config)
+    def wait_for_set_port_id_config(self, pkt):
+        if PAS5211MsgSetPortIdConfigResponse in pkt:
+            get_onu_id = PAS5211MsgGetOnuIdByPortId(
+                port_id=self.port_id
             )
+            self.send(self.px(get_onu_id))
+            raise self.wait_get_onu_id_by_port_id()
 
+    # Transistions from wait_get_onu_id_by_port_id
+    @ATMT.timeout(wait_get_onu_id_by_port_id, 3)
+    def timeout_wait_get_onu_id_by_port_id(self):
+        raise self.error('Could not get onu id for {}; dropping activation event for {}'
+                         .format(self.target, hexstring(self.serial_number)))
+
+    @ATMT.receive_condition(wait_get_onu_id_by_port_id)
+    def wait_for_get_onu_id_by_port_id(self, pkt):
+        if PAS5211MsgGetOnuIdByPortIdResponse in pkt:
+            self.onu_id = pkt['PAS5211MsgGetOnuIdByPortIdResponse'].onu_id
+            # There may be more things to do here. but traces indicate that no.
+            # see PAS.c line 977 and onwards.
+            set_vlan_uplink_config = PAS5211SetVlanUplinkConfiguration(
+                port_id=self.port_id,
+                pvid_config_enabled=PON_FALSE,
+                min_cos=0,
+                max_cos=7,
+                de_bit=PON_DISABLE
+            )
+            self.send(self.px(set_vlan_uplink_config))
+            raise self.wait_set_vlan_uplink_config()
+
+    # Transitions from wait_set_vlan_uplink_config
+    @ATMT.timeout(wait_set_vlan_uplink_config, 3)
+    def timeout_wait_set_vlan_uplink_config(self):
+        raise self.error('Could not set vlan uplink config for {}; dropping activation event for {}'
+                                 .format(self.target, hexstring(self.serial_number)))
+
+    @ATMT.receive_condition(wait_set_vlan_uplink_config)
+    def wait_for_set_vlan_uplink_config(self, pkt):
+        if PAS5211SetVlanUplinkConfigurationResponse in pkt:
+            # YAY we made it.
+            self.detect_onu()
             raise self.end()
 
 
diff --git a/voltha/adapters/microsemi_olt/DeviceManager.py b/voltha/adapters/microsemi_olt/DeviceManager.py
index ea2b607..e468a0d 100644
--- a/voltha/adapters/microsemi_olt/DeviceManager.py
+++ b/voltha/adapters/microsemi_olt/DeviceManager.py
@@ -104,11 +104,13 @@
 
     def onu_detected(self, parent_port_no=None,
                         child_device_type=None,
-                        onu_id=None):
+                        onu_id=None,
+                        serial_number=None):
         self.adapter_agent.child_device_detected(
             parent_device_id=self.device.id,
             parent_port_no=parent_port_no,
             child_device_type=child_device_type,
+            serial_number=serial_number,
             proxy_address=Device.ProxyAddress(
                 device_id=self.device.id,
                 channel_id=onu_id
diff --git a/voltha/adapters/microsemi_olt/OltStateMachine.py b/voltha/adapters/microsemi_olt/OltStateMachine.py
index 3c77415..ff61817 100644
--- a/voltha/adapters/microsemi_olt/OltStateMachine.py
+++ b/voltha/adapters/microsemi_olt/OltStateMachine.py
@@ -19,13 +19,14 @@
 from voltha.adapters.microsemi_olt.PAS5211 import PAS5211MsgGetProtocolVersion, PAS5211MsgGetOltVersion, \
     PAS5211MsgGetOltVersionResponse, PAS5211MsgGetProtocolVersionResponse, \
     SnrBurstDelay, RngBurstDelay, GeneralOpticsParams, ResetValues, ResetTimingCtrl, PreambleParams, \
-    PAS5211MsgSetOltOpticsResponse, CHANNELS, PON_OPTICS_VOLTAGE_IF_LVPECL, PON_ENABLE, PON_POLARITY_ACTIVE_HIGH, \
-    PON_SD_SOURCE_LASER_SD, PON_RESET_TYPE_DELAY_BASED, PON_DISABLE, PON_RESET_TYPE_NORMAL_START_BURST_BASED, \
-    PAS5211MsgSetOpticsIoControlResponse, PON_TX_ENABLE_DEFAULT, PAS5211MsgGetGeneralParamResponse, PAS5211MsgAddOltChannel, \
-    PAS5211MsgAddOltChannelResponse, PON_ALARM_LOS, PAS5211MsgSetAlarmConfigResponse, PAS5211MsgGetDbaMode, \
-    PAS5211MsgGetDbaModeResponse, PON_DBA_MODE_LOADED_NOT_RUNNING, PAS5211MsgStartDbaAlgorithm, \
-    PAS5211MsgStartDbaAlgorithmResponse, PON_DBA_MODE_RUNNING, PAS5211MsgSetOltChannelActivationPeriod, \
+    PAS5211MsgSetOltOpticsResponse, CHANNELS, PAS5211MsgSetOpticsIoControlResponse, PAS5211MsgGetGeneralParamResponse, PAS5211MsgAddOltChannel, \
+    PAS5211MsgAddOltChannelResponse, PAS5211MsgSetAlarmConfigResponse, PAS5211MsgGetDbaMode, \
+    PAS5211MsgGetDbaModeResponse, PAS5211MsgStartDbaAlgorithm, \
+    PAS5211MsgStartDbaAlgorithmResponse,  PAS5211MsgSetOltChannelActivationPeriod, \
     PAS5211MsgSetOltChannelActivationPeriodResponse
+from voltha.adapters.microsemi_olt.PAS5211_constants import PON_OPTICS_VOLTAGE_IF_LVPECL, PON_ENABLE, PON_POLARITY_ACTIVE_HIGH, \
+    PON_SD_SOURCE_LASER_SD, PON_RESET_TYPE_DELAY_BASED, PON_DISABLE, PON_RESET_TYPE_NORMAL_START_BURST_BASED, \
+    PON_TX_ENABLE_DEFAULT, PON_ALARM_LOS,  PON_DBA_MODE_LOADED_NOT_RUNNING,  PON_DBA_MODE_RUNNING
 from voltha.adapters.microsemi_olt.PAS5211_utils import general_param, olt_optics_pkt, burst_timing, io_ctrl_optics, \
     alarm_config
 
diff --git a/voltha/adapters/microsemi_olt/PAS5211.py b/voltha/adapters/microsemi_olt/PAS5211.py
index e564a99..d6cb387 100644
--- a/voltha/adapters/microsemi_olt/PAS5211.py
+++ b/voltha/adapters/microsemi_olt/PAS5211.py
@@ -22,12 +22,14 @@
 
 
 from scapy.fields import LEShortField, Field, LEIntField, LESignedIntField, FieldLenField, FieldListField, PacketField, \
-    ByteField, StrFixedLenField, ConditionalField, StrField, MACField, LELongField, LenField
+    ByteField, StrFixedLenField, ConditionalField, StrField, MACField, LELongField, LenField, StrLenField
 from scapy.layers.l2 import DestMACField, ETHER_ANY, Ether
 from scapy.packet import Packet, bind_layers
 from scapy.utils import lhex
 from scapy.volatile import RandSInt
 from scapy.layers.ntp import XLEShortField
+
+from voltha.adapters.microsemi_olt.PAS5211_constants import PON_ENABLE, PON_PORT_PON, PON_FALSE, PON_TRUE
 from voltha.extensions.omci.omci_frame import OmciFrame
 
 """
@@ -36,174 +38,6 @@
 #TODO get range from olt_version message
 CHANNELS=range(0,4)
 
-# from enum PON_true_false_t
-PON_FALSE = 0
-PON_TRUE = 1
-
-# from enum PON_enable_disable_t
-PON_DISABLE = 0
-PON_ENABLE = 1
-
-# from enym PON_mac_t
-PON_MII = 0
-PON_GMII = 1
-PON_TBI = 2
-
-PON_POLARITY_ACTIVE_LOW = 0
-PON_POLARITY_ACTIVE_HIGH = 1
-
-PON_OPTICS_VOLTAGE_IF_UNDEFINED = 0
-PON_OPTICS_VOLTAGE_IF_CML = 1
-PON_OPTICS_VOLTAGE_IF_LVPECL = 2
-
-PON_SD_SOURCE_LASER_SD = 0
-PON_SD_SOURCE_BCDR_LOCK = 1
-PON_SD_SOURCE_BCDR_SD = 2
-
-PON_RESET_TYPE_DELAY_BASED = 0
-PON_RESET_TYPE_SINGLE_RESET = 1
-PON_RESET_TYPE_DOUBLE_RESET = 2
-
-PON_RESET_TYPE_NORMAL_START_BURST_BASED = 0
-PON_RESET_TYPE_NORMAL_END_BURST_BASED = 1
-
-PON_GPIO_LINE_0 = 0
-PON_GPIO_LINE_1 = 1
-PON_GPIO_LINE_2 = 2
-PON_GPIO_LINE_3 = 3
-PON_GPIO_LINE_4 = 4
-PON_GPIO_LINE_5 = 5
-PON_GPIO_LINE_6 = 6
-PON_GPIO_LINE_7 = 7
-def PON_EXT_GPIO_LINE(line):
-    return line + 8
-
-# from enum PON_alarm_t
-PON_ALARM_SOFTWARE_ERROR = 0
-PON_ALARM_LOS = 1
-PON_ALARM_LOSI = 2
-PON_ALARM_DOWI = 3
-PON_ALARM_LOFI = 4
-PON_ALARM_RDII = 5
-PON_ALARM_LOAMI = 6
-PON_ALARM_LCDGI = 7
-PON_ALARM_LOAI = 8
-PON_ALARM_SDI = 9
-PON_ALARM_SFI = 10
-PON_ALARM_PEE = 11
-PON_ALARM_DGI = 12
-PON_ALARM_LOKI = 13
-PON_ALARM_TIWI = 14
-PON_ALARM_TIA = 15
-PON_ALARM_VIRTUAL_SCOPE_ONU_LASER_ALWAYS_ON = 16
-PON_ALARM_VIRTUAL_SCOPE_ONU_SIGNAL_DEGRADATION = 17
-PON_ALARM_VIRTUAL_SCOPE_ONU_EOL = 18
-PON_ALARM_VIRTUAL_SCOPE_ONU_EOL_DATABASE_IS_FULL = 19
-PON_ALARM_AUTH_FAILED_IN_REGISTRATION_ID_MODE = 20
-PON_ALARM_SUFI = 21
-PON_ALARM_LAST_ALARM = 22
-
-# from enum PON_general_parameters_type_t
-PON_COMBINED_LOSI_LOFI 		            = 1000
-PON_TX_ENABLE_DEFAULT 		            = 1001
-
-# Enable or disable False queue full event from DBA
-PON_FALSE_Q_FULL_EVENT_MODE             = 1002
-
-# Set PID_AID_MISMATCH min silence period. 0 - disable, Else - period in secs
-PON_PID_AID_MISMATCH_MIN_SILENCE_PERIOD = 1003
-
-# Set if FW generate clear alarm. 0 - generate clear alarm, Else - don't
-# generate clear alarm
-PON_ENABLE_CLEAR_ALARM                  = 1004
-
-# Enable or disabl send assign alloc id ploam. 0 - disable, 1 - enable
-PON_ASSIGN_ALLOC_ID_PLOAM               = 1005
-
-# BIP error polling period, 200 - 65000, 0 - Disabled, Recommended: 5000
-# (default)
-PON_BIP_ERR_POLLING_PERIOD_MS           = 1006
-
-# Ignore SN when decatived 0 - consider SN (deactivate the onu if received
-# same SN when activated (default)	1 - Ignore
-PON_IGNORE_SN_WHEN_ACTIVE		        = 1007
-
-# 0xffffffff - Disabled (default). Any other value (0 - 0xfffe) indicates
-# that PA delay is enabled, with the specified delay value and included in
-# the US_OVERHEAD PLOAM
-PON_ONU_PRE_ASSIGNED_DELAY		        = 1008
-
-# Enable or disable DS fragmentation, 0 disable, 1 enable
-PON_DS_FRAGMENTATION			        = 1009
-
-# Set if fw report rei alarm when errors is 0, 0 disable (default), 1 enable
-PON_REI_ERRORS_REPORT_ALL		        = 1010
-
-# Set if igonre sfi deactivation, 0 disable (default), 1 enable
-PON_IGNORE_SFI_DEACTIVATION		        = 1011
-
-# Allows to override the allocation overhead set by optic-params
-# configuration. This configuration is only allowed when the the pon channel
-# is disabled
-PON_OVERRIDE_ALLOCATION_OVERHEAD	    = 1012
-
-# Optics timeline offset, -128-127, : this parameter is very sensitive and
-# requires coordination with PMC
-PON_OPTICS_TIMELINE_OFFSET	            = 1013
-
-# Last general meter
-PON_LAST_GENERAL_PARAMETER		        = PON_OPTICS_TIMELINE_OFFSET
-
-# from enum PON_dba_mode_t
-PON_DBA_MODE_NOT_LOADED                 = 0
-PON_DBA_MODE_LOADED_NOT_RUNNING         = 1
-PON_DBA_MODE_RUNNING                    = 2
-PON_DBA_MODE_LAST                       = 3
-
-# from enum type typedef enum PON_port_frame_destination_t
-PON_PORT_PON = 0
-PON_PORT_SYSTEM = 1
-
-# from enum PON_olt_hw_classification_t
-
-PON_OLT_HW_CLASSIFICATION_PAUSE                    = 0
-PON_OLT_HW_CLASSIFICATION_LINK_CONSTRAINT          = 1
-PON_OLT_HW_CLASSIFICATION_IGMP                     = 2
-PON_OLT_HW_CLASSIFICATION_MPCP                     = 3
-PON_OLT_HW_CLASSIFICATION_OAM                      = 4
-PON_OLT_HW_CLASSIFICATION_802_1X                   = 5
-PON_OLT_HW_CLASSIFICATION_PPPOE_DISCOVERY          = 6
-PON_OLT_HW_CLASSIFICATION_PPPOE_SESSION            = 7
-PON_OLT_HW_CLASSIFICATION_DHCP_V4                  = 8
-PON_OLT_HW_CLASSIFICATION_PIM                      = 9
-PON_OLT_HW_CLASSIFICATION_DHCP_V6                  = 10
-PON_OLT_HW_CLASSIFICATION_ICMP_V4                  = 11
-PON_OLT_HW_CLASSIFICATION_MLD                      = 12
-PON_OLT_HW_CLASSIFICATION_ARP                      = 13
-PON_OLT_HW_CLASSIFICATION_CONF_DA                  = 14
-PON_OLT_HW_CLASSIFICATION_CONF_RULE                = 15
-PON_OLT_HW_CLASSIFICATION_DA_EQ_SA                 = 16
-PON_OLT_HW_CLASSIFICATION_DA_EQ_MAC                = 17
-PON_OLT_HW_CLASSIFICATION_DA_EQ_SEC_MAC            = 18
-PON_OLT_HW_CLASSIFICATION_SA_EQ_MAC                = 19
-PON_OLT_HW_CLASSIFICATION_SA_EQ_SEC_MAC            = 20
-PON_OLT_HW_CLASSIFICATION_ETHERNET_MANAGEMENT      = 100
-PON_OLT_HW_CLASSIFICATION_IPV4_LOCAL_MULTICAST     = 101
-PON_OLT_HW_CLASSIFICATION_IPV4_MANAGEMENT          = 102
-PON_OLT_HW_CLASSIFICATION_ALL_IPV4_MULTICAST       = 103
-PON_OLT_HW_CLASSIFICATION_IPV6_LOCAL_MULTICAST     = 104
-PON_OLT_HW_CLASSIFICATION_IPV6_MANAGEMENT          = 105
-PON_OLT_HW_CLASSIFICATION_ALL_IPV6_MULTICAST       = 106
-PON_OLT_HW_CLASSIFICATION_OTHER			           = 107
-PON_OLT_HW_CLASSIFICATION_LAST_RULE                = 108
-
-
-PON_ACTIVATION_AUTH_AUTO 			  				= 0
-PON_ACTIVATION_AUTH_HOST_CONTROLLED_SEPARATE_EVENTS = 1 # Host controlled: Separate events
-PON_ACTIVATION_AUTH_HOST_CONTROLLED_LUMPED_SN   	= 2 # Host controlled: Lumped-SN-Response
-PON_ACTIVATION_AUTH_REGISTRATION_ID_RAW   			= 3 # Registration-ID Raw
-PON_ACTIVATION_AUTH_REGISTRATION_ID_LEARN   		= 4  # Registration-ID Learn
-
 
 class XLESignedIntField(Field):
     def __init__(self, name, default):
@@ -641,14 +475,14 @@
     opcode = 47
     name = "PAS5211MsgSendDbaAlgorithmMsg"
     fields_desc = [
-        LEShortField("id", None),
-        LEShortField("size", None),
-        ByteField("data", None)
+        #LEShortField("id", None),
+        FieldLenField("size", None, fmt="<H", length_of="data"),
+        StrLenField("data", "", length_from=lambda x:x.size)
     ]
 
 class PAS5211MsgSendDbaAlgorithmMsgResponse(PAS5211Msg):
     opcode = 10287
-    name = "PAS5211MsgSendDbaAlgorithmMsgReponse"
+    name = "PAS5211MsgSendDbaAlgorithmMsgResponse"
     fields_desc = []
 
 class PAS5211MsgSetPortIdConfig(PAS5211Msg):
@@ -675,7 +509,7 @@
     name = "PAS5211MsgGetOnuIdByPortId"
     fields_desc = [
         LEShortField("port_id", None),
-        LEShortField("reserved", None)
+        LEShortField("reserved", 0)
     ]
 
 
@@ -693,11 +527,11 @@
     name = "PAS5211SetVlanUplinkConfiguration"
     fields_desc = [
         LEShortField("port_id", None),
-        LEIntField("pvid_config_enabled", None),
+        LEShortField("pvid_config_enabled", None),
         LEShortField("min_cos", None),
         LEShortField("max_cos", None),
         LEIntField("de_bit", None),
-        LEShortField("reserved", None)
+        LEShortField("reserved", 0)
     ]
 
 
@@ -812,8 +646,8 @@
 class PAS5211EventDbaAlgorithm(PAS5211Event):
     name = "PAS5211EventDbaAlgorithm"
     fields_desc = [
-        LEShortField("size", None),
-        ByteField("event_buffer", None) # According to Pythagoras_API.c line 264. Am I certain? No.
+        FieldLenField("size", None, fmt="<H", length_of="data"),
+        StrLenField("data", "", length_from=lambda x: x.size)
     ]
 
 
diff --git a/voltha/adapters/microsemi_olt/PAS5211_constants.py b/voltha/adapters/microsemi_olt/PAS5211_constants.py
index 0c9c866..47db0b7 100644
--- a/voltha/adapters/microsemi_olt/PAS5211_constants.py
+++ b/voltha/adapters/microsemi_olt/PAS5211_constants.py
@@ -146,6 +146,15 @@
 PON_PORT_PON = 0
 PON_PORT_SYSTEM = 1
 
+PON_PORT_TYPE_GEM  = 0
+PON_PORT_TYPE_TDM  = 1
+PON_PORT_TYPE_OMCI = 2
+
+PON_PORT_DESTINATION_CNI0 = 0
+PON_PORT_DESTINATION_CNI1 = 1
+PON_PORT_DESTINATION_CNI2 = 2
+PON_PORT_DESTINATION_CPU  = 3
+
 # from enum PON_olt_hw_classification_t
 
 PON_OLT_HW_CLASSIFICATION_PAUSE                    = 0
@@ -178,3 +187,34 @@
 PON_OLT_HW_CLASSIFICATION_ALL_IPV6_MULTICAST       = 106
 PON_OLT_HW_CLASSIFICATION_OTHER			           = 107
 PON_OLT_HW_CLASSIFICATION_LAST_RULE                = 108
+
+PON_ACTIVATION_AUTH_AUTO 			  				= 0
+PON_ACTIVATION_AUTH_HOST_CONTROLLED_SEPARATE_EVENTS = 1 # Host controlled: Separate events
+PON_ACTIVATION_AUTH_HOST_CONTROLLED_LUMPED_SN   	= 2 # Host controlled: Lumped-SN-Response
+PON_ACTIVATION_AUTH_REGISTRATION_ID_RAW   			= 3 # Registration-ID Raw
+PON_ACTIVATION_AUTH_REGISTRATION_ID_LEARN   		= 4  # Registration-ID Learn
+
+PON_LOGICAL_OBJECT_TYPE_ALLOC_ID	        = 0
+PON_LOGICAL_OBJECT_TYPE_ONU_ID_BY_ALLOC_ID  = 1
+PON_LOGICAL_OBJECT_TYPE_MAX			        = PON_LOGICAL_OBJECT_TYPE_ONU_ID_BY_ALLOC_ID
+
+
+PMC_OFAL_MAX_BI_DIRECTIONAL_FLOW_PER_ONU    = 16
+PMC_OFAL_START_FLOW_ID_BASE                 = 1000
+
+# SLA
+
+PYTHAGORAS_UPDATE_AID_SLA                   = 21
+
+PYTHAGORAS_DBA_DATA_COS                     = 0
+PYTHAGORAS_DBA_STATUS_REPORT_NSR            = 0
+
+PYTHAGORAS_SET_SLA_RESP_SIZE                = 10
+
+# Random values found in PMC code
+SLA_gr_bw_gros = 1;
+SLA_be_bw_gros = 10;
+SLA_gr_bw_fine = 0;
+SLA_be_bw_fine = 0
+
+
diff --git a/voltha/adapters/microsemi_olt/PAS5211_utils.py b/voltha/adapters/microsemi_olt/PAS5211_utils.py
index 709af3f..2437be5 100644
--- a/voltha/adapters/microsemi_olt/PAS5211_utils.py
+++ b/voltha/adapters/microsemi_olt/PAS5211_utils.py
@@ -14,11 +14,12 @@
 # limitations under the License.
 #
 
-from voltha.adapters.microsemi_olt.PAS5211 import PAS5211MsgGetGeneralParam, PON_POLARITY_ACTIVE_LOW, \
-    PON_POLARITY_ACTIVE_HIGH, PAS5211MsgSetOpticsIoControl, BurstTimingCtrl, PAS5211MsgSetOltOptics, PON_ALARM_LOS, \
+from voltha.adapters.microsemi_olt.PAS5211 import PAS5211MsgGetGeneralParam, PAS5211MsgSetOpticsIoControl, \
+    BurstTimingCtrl, PAS5211MsgSetOltOptics, PAS5211MsgSetAlarmConfig
+from voltha.adapters.microsemi_olt.PAS5211_constants import PON_POLARITY_ACTIVE_LOW, \
+    PON_POLARITY_ACTIVE_HIGH, PON_ALARM_LOS, \
     PON_ALARM_LOSI, PON_ALARM_DOWI, PON_ALARM_LOFI, PON_ALARM_RDII, PON_ALARM_LOAMI, PON_ALARM_LCDGI, PON_ALARM_LOAI, \
-    PON_ALARM_SDI, PON_ALARM_SFI, PON_ALARM_PEE, PON_ALARM_DGI, PON_ALARM_LOKI, PON_ALARM_TIWI, PON_ALARM_TIA, \
-    PAS5211MsgSetAlarmConfig
+    PON_ALARM_SDI, PON_ALARM_SFI, PON_ALARM_PEE, PON_ALARM_DGI, PON_ALARM_LOKI, PON_ALARM_TIWI, PON_ALARM_TIA
 from voltha.adapters.microsemi_olt.PAS5211_hardware import PON_ALARM_CODE_LOS, PON_ALARM_CODE_LOSI, PON_ALARM_CODE_DOWI, \
     PON_ALARM_CODE_LOFI, PON_ALARM_CODE_RDII, PON_ALARM_CODE_LOAMI, PON_ALARM_CODE_LCDGI, PON_ALARM_CODE_LOAI, \
     PON_ALARM_CODE_SDI, PON_ALARM_CODE_SFI, PON_ALARM_CODE_PEE, PON_ALARM_CODE_DGI, PON_ALARM_CODE_LOKI, \
