diff --git a/voltha/adapters/microsemi_olt/microsemi_olt.py b/voltha/adapters/microsemi_olt/microsemi_olt.py
index 532915d..098140c 100644
--- a/voltha/adapters/microsemi_olt/microsemi_olt.py
+++ b/voltha/adapters/microsemi_olt/microsemi_olt.py
@@ -132,12 +132,19 @@
                   flows=flows, groups=groups)
 
     def send_proxied_message(self, proxy_address, msg):
-        log.info('send-proxied-message', proxy_address=proxy_address, msg=msg)
-        # TODO make this more efficient
-        omci_proxy = OMCIProxy(proxy_address=proxy_address,
-                               msg=msg)
-        omci_proxy.run()
-        del omci_proxy
+        if msg.opcode == "0x302a":
+            log.info('send-omci-proxied-message', proxy_address=proxy_address, msg=msg)
+            # TODO make this more efficient
+            omci_proxy = OMCIProxy(proxy_address=proxy_address,
+                                   msg=msg)
+            omci_proxy.run()
+            del omci_proxy
+
+        else:
+            log.info('send-proxied-message', proxy_address=proxy_address, msg=msg)
+            api_proxy = APIProxy(device.proxy_address,msg)
+            api_proxy.run()
+            del api_proxy 
 
     def receive_proxied_message(self, proxy_address, msg):
         raise NotImplementedError()
diff --git a/voltha/adapters/pmcs_onu/pmcs_onu.py b/voltha/adapters/pmcs_onu/pmcs_onu.py
index f4e11e0..c9812e0 100644
--- a/voltha/adapters/pmcs_onu/pmcs_onu.py
+++ b/voltha/adapters/pmcs_onu/pmcs_onu.py
@@ -36,7 +36,11 @@
 
 from voltha.extensions.omci.omci_entities import CircuitPack
 from voltha.extensions.omci.omci_frame import OmciFrame
+<<<<<<< HEAD
 from voltha.extensions.omci.omci_messages import OmciGet, OmciGetResponse
+=======
+from voltha.extensions.omci.omci_messages import OmciGet, OmciGetResponse, OmciCreate
+>>>>>>> pmcs message sequence completed
 
 _ = third_party
 log = structlog.get_logger()
@@ -213,6 +217,7 @@
     def _initialize_onu(self, device):
         # DO things to the ONU
 
+
         # |###[ OmciFrame ]### 
         #     |  transaction_id= 1
         #     |  message_type= 79
@@ -223,33 +228,12 @@
         #     |   |  entity_id = 0
         #     |  omci_trailer= 40
 
-        msg = OmciMibReset(entity_class=2, entity_id=0)
-        response = yield send_proxied_message(message, device.proxy_address)
+        # OmciMibReset
+        msg = OmciMibReset(entity_class = 2, entity_id = 0)
+        response = yield self.adapter_agent.send_proxied_message(device.proxy_address, msg)
 
-        if OmciMibResetResponse in response ...
-
-        # ###[ PAS5211EventFrameReceived ]### 
-        #            length    = 48
-        #            port_type = 0
-        #            port_id   = 0
-        #            management_frame= 1
-        #            classification_entity= 21
-        #            l3_offset = 32
-        #            l4_offset = 19
-        #            ignored   = 24576
-        #            \frame     \
-        #             |###[ OmciFrame ]### 
-        #             |  transaction_id= 1
-        #             |  message_type= 47
-        #             |  omci      = 10
-        #             |  \omci_message\
-        #             |   |###[ OmciMibResetResponse ]### 
-        #             |   |  entity_class= 2
-        #             |   |  entity_id = 0
-        #             |   |  success_code= 0
-        #             |  omci_trailer= 40
-        #             |###[ Raw ]### 
-        #             |     load      = "nz\x9d'"
+        if not OmciMibResetResponse in response:
+            pass
 
         # ###[ PAS5211Dot3 ]### 
         #   dst       = 00:0c:d5:00:01:00
@@ -273,7 +257,14 @@
         #               load      = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
 
 
-        # ###[ PAS5211Dot3 ]### 
+        
+        msg = PAS5211GetOnuAllocs()
+        response = yield self.adapter_agent.send_proxied_message(device.proxy_address, msg)
+
+        if not PAS5211GetOnuAllocsResponse in response:
+            pass
+
+        #  ###[ PAS5211Dot3 ]### 
         #   dst       = 00:0c:d5:00:01:00
         #   src       = 90:e2:ba:82:f9:77
         #   len       = 30
@@ -294,6 +285,13 @@
         # ###[ Raw ]### 
         #               load      = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
 
+
+        msg = PAS5211GetSnInfo(serial_number=device.serial_number)
+        response = yield self.adapter_agent.send_proxied_message(device.proxy_address, msg)   
+
+        if not PAS5211GetSnInfoResponse in response:
+            pass
+
         # ###[ PAS5211Dot3 ]### 
         #   dst       = 00:0c:d5:00:01:00
         #   src       = 90:e2:ba:82:f9:77
@@ -314,22 +312,226 @@
         #            nothing   = 0
         # ###[ Raw ]### 
         #               load      = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+        
+        msg = PAS5211GetOnusRange()
+        response = yield self.adapter_agent.send_proxied_message(device.proxy_address, msg)  
 
-        # ###[ PAS5211MsgSendFrame ]### 
-        #            length    = 44
-        #            port_type = 0
-        #            port_id   = 0
-        #            management_frame= 1
-        #            \frame     \
-        #             |###[ OmciFrame ]### 
-        #             |  transaction_id= 2
-        #             |  message_type= 72
-        #             |  omci      = 10
-        #             |  \omci_message\
-        #             |   |###[ OmciSet ]### 
-        #             |   |  entity_class= 262
-        #             |   |  entity_id = 32769
-        #             |   |  attributes_mask= 32768
-        #             |   |  data      = {'alloc_id': 1000}
-        #             |  omci_trailer= 40
+        if not PAS5211GetOnusRangeResponse in response:
+            pass       
+       
+        #  |  ###[ OmciFrame ]###
+        # | transaction_id = 2
+        # | message_type = 72
+        # | omci = 10
+        # |   \omci_message \
+        #      | |  ###[ OmciSet ]###
+        # | | entity_class = 262
+        # | | entity_id = 32769
+        # | | attributes_mask = 32768
+        # | | data = {'alloc_id': 1000}
+        # | omci_trailer = 40
+
+        # OmciSet
+        # TODO: maskdata
+        msg = OmciSet(entity_class = 262, entity_id = 32769, attributes_mask = 32768,
+                      data=dict(
+                        alloc_id = 1000
+                    ))
+        response = yield self.adapter_agent.send_proxied_message(device.proxy_address, msg)
+
+        if not OmciSetResponse in response:
+            pass
+
+
+        # ﻿  ###[ PAS5211MsgSendFrame ]###
+        # length = 44
+        # port_type = 0
+        # port_id = 0
+        # management_frame = 1
+        # \frame \
+        #  |  ###[ OmciFrame ]###
+        # | transaction_id = 3
+        # | message_type = 68
+        # | omci = 10
+        # |   \omci_message \
+        #      | |  ###[ OmciCreate ]###
+        # | | entity_class = 45
+        # | | entity_id = 1
+        # | | data = {'max_age': 5120, 'hello_time': 512, 'priority': 32768, 'port_bridging_ind': 0,
+        #             'spanning_tree_ind': 0, 'unknown_mac_address_discard': 0, 'mac_learning_depth': 128,
+        #             'learning_ind': 0, 'forward_delay': 3840}
+        # | |  ###[ Raw ]###
+        # | | load = '\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+        # | omci_trailer = 40
+
+
+        # OmciCreate
+        msg = OmciCreate(entity_class=45, entity_id=1,
+                         data=dict(
+                             max_age = 5120, hello_time = 512, priority = 32768,
+                             port_bridging_ind = 0, spanning_tree_ind= 0, unknown_mac_address_discard= 0, mac_learning_depth=128
+                             learning_ind= 0, forward_delay= 3840
+                         ))
+        response = yield self.adapter_agent.send_proxied_message(device.proxy_address, msg)
+
+        if not OmciCreateResponse in response:
+            pass
+
+
+        # |###[ OmciFrame ]### 
+        #     |  transaction_id= 4
+        #     |  message_type= 68
+        #     |  omci      = 10
+        #     |  \omci_message\
+        #     |   |###[ OmciCreate ]### 
+        #     |   |  entity_class= 47
+        #     |   |  entity_id = 0
+        #     |   |  data      = {'tp_pointer': 257, 'encapsulation_methods': 1, 'port_num': 0, 'port_priority': 10, 'tp_type': 1, 'port_path_cost': 100, 'port_spanning_tree_in': 0, 'lan_fcs_ind': 0, 'bridge_id_pointer': 1}
+        #     |  omci_trailer= 40
+
+        # OmciCreate
+        msg = OmciCreate(entity_class=47, entity_id=0,
+                         data=dict(
+                                tp_pointer= 257, encapsulation_methods =  1,
+                                port_num = 0, port_priority = 10, tp_type = 1,
+                                port_path_cost = 100, port_spanning_tree_in = 0,
+                                lan_fcs_ind = 0, bridge_id_pointer = 1
+                         ))
+        response = yield self.adapter_agent.send_proxied_message(device.proxy_address, msg)
+        
+        if not OmciCreateResponse in response:
+            pass
+
+        # |###[ OmciFrame ]### 
+        # |  transaction_id= 5
+        # |  message_type= 68
+        # |  omci      = 10
+        # |  \omci_message\
+        # |   |###[ OmciCreate ]### 
+        # |   |  entity_class= 171
+        # |   |  entity_id = 0
+        # |   |  data      = {'association_type': 2, 'associated_me_pointer': 257}
+        # |  omci_trailer= 40
+
+        msg = OmciCreate(entity_class=171, entity_id=0,
+                         data=dict(
+                                association_type= 2, associated_me_pointer= 257
+                         ))
+        response = yield self.adapter_agent.send_proxied_message(device.proxy_address, msg)
+
+        if not OmciCreateResponse in response:
+            pass
+
+        # |###[ OmciFrame ]### 
+        # |  transaction_id= 6
+        # |  message_type= 72
+        # |  omci      = 10
+        # |  \omci_message\
+        # |   |###[ OmciSet ]### 
+        # |   |  entity_class= 171
+        # |   |  entity_id = 0
+        # |   |  attributes_mask= 47616
+        # |   |  data      = {'association_type': 2, 'input_tpid': 33024, 'associated_me_pointer': 257, 'downstream_mode': 0, 'output_tpid': 33024}
+        # |  omci_trailer= 40
+
+        msg = OmciSet(entity_class = 171, entity_id = 0, attributes_mask = 47616,
+                      data=dict(
+                        association_type = 2, input_tpid = 33024, associated_me_pointer= 257,
+                    downstream_mode= 0, output_tpid= 33024
+                    ))
+
+        response = yield self.adapter_agent.send_proxied_message(device.proxy_address, msg)
+
+        if not OmciSetResponse in response:
+            pass
+
+        # |###[ OmciFrame ]### 
+        # |  transaction_id= 7
+        # |  message_type= 68
+        # |  omci      = 10
+        # |  \omci_message\
+        # |   |###[ OmciCreate ]### 
+        # |   |  entity_class= 130
+        # |   |  entity_id = 1
+        # |   |  data      = {'tp_pointer': 65535, 'unmarked_frame_option': 1, 'interwork_tp_pointer_for_p_bit_priority_6': 65535, 'interwork_tp_pointer_for_p_bit_priority_7': 65535, 'interwork_tp_pointer_for_p_bit_priority_4': 65535, 'interwork_tp_pointer_for_p_bit_priority_5': 65535, 'interwork_tp_pointer_for_p_bit_priority_2': 65535, 'interwork_tp_pointer_for_p_bit_priority_3': 65535, 'interwork_tp_pointer_for_p_bit_priority_0': 65535, 'interwork_tp_pointer_for_p_bit_priority_1': 65535, 'tp_type': 0, 'default_p_bit_marking': 0}
+        # |  omci_trailer= 40
+
+        msg = OmciCreate(entity_class=130, entity_id=1,
+                         data=dict(
+                                tp_pointer= 65535, unmarked_frame_option= 1, interwork_tp_pointer_for_p_bit_priority_6= 65535, 
+                                interwork_tp_pointer_for_p_bit_priority_7= 65535, interwork_tp_pointer_for_p_bit_priority_4= 65535, 
+                                interwork_tp_pointer_for_p_bit_priority_5= 65535, interwork_tp_pointer_for_p_bit_priority_2= 65535, 
+                                interwork_tp_pointer_for_p_bit_priority_3= 65535, interwork_tp_pointer_for_p_bit_priority_0: 65535, 
+                                interwork_tp_pointer_for_p_bit_priority_1= 65535, tp_type= 0, default_p_bit_marking= 0}
+                         ))
+        response = yield self.adapter_agent.send_proxied_message(device.proxy_address, msg)
+
+        if not OmciCreateResponse in response:
+            pass
+
+        # |###[ OmciFrame ]### 
+        # |  transaction_id= 8
+        # |  message_type= 68
+        # |  omci      = 10
+        # |  \omci_message\
+        # |   |###[ OmciCreate ]### 
+        # |   |  entity_class= 130
+        # |   |  entity_id = 1
+        # |   |  data      = {'tp_pointer': 1, 'encapsulation_methods': 1, 'port_num': 1, 'port_priority': 3, 'tp_type': 5, 'port_path_cost': 32, 'port_spanning_tree_in': 1, 'lan_fcs_ind': 0, 'bridge_id_pointer': 1}
+        # |  omci_trailer= 40
+
+        msg = OmciCreate(entity_class=130, entity_id=1,
+                         data=dict(
+                                tp_pointer= 1, encapsulation_methods= 1, port_num= 1, port_priority= 3, tp_type= 5, 
+                                port_path_cost= 32, port_spanning_tree_in= 1, lan_fcs_ind= 0, bridge_id_pointer= 1
+                         ))
+        response = yield self.adapter_agent.send_proxied_message(self, device.proxy_address, msg)
+
+        if not OmciCreateResponse in response:
+            pass
+
+        # |###[ OmciFrame ]### 
+        # |  transaction_id= 9
+        # |  message_type= 68
+        # |  omci      = 10
+        # |  \omci_message\
+        # |   |###[ OmciCreate ]### 
+        # |   |  entity_class= 268
+        # |   |  entity_id = 1
+        # |   |  data      = {'priority_queue_pointer_downstream': 0, 'direction': 3, 'tcont_pointer': 32769, 'traffic_descriptor_profile_pointer': 0, 'traffic_management_pointer_upstream': 4, 'port_id': 1000}
+        # |  omci_trailer= 40
+
+        msg = OmciCreate(entity_class=268, entity_id=1,
+                         data=dict(
+                                priority_queue_pointer_downstream= 0, direction= 3, tcont_pointer= 32769, 
+                                traffic_descriptor_profile_pointer= 0, traffic_management_pointer_upstream= 4, 
+                                port_id= 1000
+                         ))
+        response = yield self.adapter_agent.send_proxied_message(device.proxy_address, msg)
+
+        if not OmciCreateResponse in response:
+            pass
+
+        # |###[ OmciFrame ]### 
+        # |  transaction_id= 10
+        # |  message_type= 68
+        # |  omci      = 10
+        # |  \omci_message\
+        # |   |###[ OmciCreate ]### 
+        # |   |  entity_class= 266
+        # |   |  entity_id = 1
+        # |   |  data      = {'gem_port_network_ctp_pointer': 1, 'gal_profile_pointer': 0, 'service_profile_pointer': 1, 'interworking_option': 5, 'interworking_tp_pointer': 0}
+        # |  omci_trailer= 40
+
+        msg = OmciCreate(entity_class=266, entity_id=1,
+                         data=dict(
+                                gem_port_network_ctp_pointer= 1, gal_profile_pointer= 0, 
+                                service_profile_pointer= 1, interworking_option= 5, 
+                                interworking_tp_pointer= 0
+                         ))
+        response = yield self.adapter_agent.send_proxied_message(device.proxy_address, msg)
+
+        if not OmciCreateResponse in response:
+            pass
+
         pass
\ No newline at end of file
