diff --git a/voltha/adapters/broadcom_onu/broadcom_onu.py b/voltha/adapters/broadcom_onu/broadcom_onu.py
index e02c9ed..a424831 100644
--- a/voltha/adapters/broadcom_onu/broadcom_onu.py
+++ b/voltha/adapters/broadcom_onu/broadcom_onu.py
@@ -20,7 +20,7 @@
 
 from uuid import uuid4
 import structlog
-from twisted.internet import reactor
+from twisted.internet import reactor, task
 from twisted.internet.defer import DeferredQueue, inlineCallbacks
 from zope.interface import implementer
 
@@ -143,6 +143,11 @@
 
     def receive_inter_adapter_message(self, msg):
         log.info('receive_inter_adapter_message', msg=msg)
+        proxy_address = msg['proxy_address']
+        assert proxy_address is not None
+
+        handler = self.devices_handlers[proxy_address.channel_id]
+        handler.event_messages.put(msg)
 
     def suppress_alarm(self, filter):
         raise NotImplementedError()
@@ -158,12 +163,65 @@
         self.device_id = device_id
         self.log = structlog.get_logger(device_id=device_id)
         self.incoming_messages = DeferredQueue()
+        self.event_messages = DeferredQueue()
         self.proxy_address = None
         self.tx_id = 0
 
+        # Need to query ONU for number of supported uni ports
+        # For now, temporarily set number of ports to 1 - port #2
+        self.uni_ports = (2,)
+
+        # Handle received ONU event messages
+        reactor.callLater(0, self.handle_onu_events)
+
     def receive_message(self, msg):
         self.incoming_messages.put(msg)
 
+    @inlineCallbacks
+    def handle_onu_events(self):
+        event_msg = yield self.event_messages.get()
+
+        if event_msg['event'] == 'activation-completed':
+
+            if event_msg['event_data']['activation_successful'] == True:
+                for uni in self.uni_ports:
+                    port_no = self.proxy_address.channel_id + uni
+                    reactor.callLater(1,
+                      self.message_exchange,
+                      self.proxy_address.onu_id,
+                      self.proxy_address.onu_session_id,
+                      port_no)
+
+                device = self.adapter_agent.get_device(self.device_id)
+                device.oper_status = OperStatus.ACTIVE
+                self.adapter_agent.update_device(device)
+
+            else:
+                device = self.adapter_agent.get_device(self.device_id)
+                device.oper_status = OperStatus.FAILED
+                self.adapter_agent.update_device(device)
+
+        elif event_msg['event'] == 'deactivation-completed':
+            device = self.adapter_agent.get_device(self.device_id)
+            device.oper_status = OperStatus.DISCOVERED
+            self.adapter_agent.update_device(device)
+
+        elif event_msg['event'] == 'ranging-completed':
+
+            if event_msg['event_data']['ranging_successful'] == True:
+                device = self.adapter_agent.get_device(self.device_id)
+                device.oper_status = OperStatus.ACTIVATING
+                self.adapter_agent.update_device(device)
+
+            else:
+                device = self.adapter_agent.get_device(self.device_id)
+                device.oper_status = OperStatus.FAILED
+                self.adapter_agent.update_device(device)
+
+        # Handle next event
+        reactor.callLater(0, self.handle_onu_events)
+
+
     def activate(self, device):
         self.log.info('activating')
 
@@ -205,11 +263,7 @@
         logical_device_id = parent_device.parent_id
         assert logical_device_id
 
-        # query ONU for number of supported uni ports
-        # temporarily set number of ports to 1 - port #2
-        uni_ports = (2,)
-
-        for uni in uni_ports:
+        for uni in self.uni_ports:
             # register physical ports
             uni_port = Port(
                 port_no=uni,
@@ -244,14 +298,8 @@
                 device_port_no=uni_port.port_no
             ))
 
-            reactor.callLater(10,
-                              self.message_exchange,
-                              self.proxy_address.onu_id,
-                              self.proxy_address.onu_session_id,
-                              port_no)
-
         device = self.adapter_agent.get_device(device.id)
-        device.oper_status = OperStatus.ACTIVE
+        device.oper_status = OperStatus.DISCOVERED
         self.adapter_agent.update_device(device)
 
     @inlineCallbacks
diff --git a/voltha/adapters/maple_olt/maple_olt.py b/voltha/adapters/maple_olt/maple_olt.py
index 89204b7..f77db19 100644
--- a/voltha/adapters/maple_olt/maple_olt.py
+++ b/voltha/adapters/maple_olt/maple_olt.py
@@ -293,14 +293,17 @@
             # event: 'disable-completed'
             #     event_data: {'serial_num-vendor_id': <str>
             #                  'serial_num-vendor_specific: <str>}
-            event_dict = {'event':event, 'event_data':event_data}
 
             # Get child_device from onu_id
             child_device = self.adapter_agent.get_child_device(self.device_id, onu_id=key['onu_id'])
             assert child_device is not None
 
+            # Build the message, the ONU adapter uses the proxy_address
+            # to uniquely identify a specific ONU
+            msg = {'proxy_address':child_device.proxy_address, 'event':event, 'event_data':event_data}
+
             # Send the event message to the ONU adapter
-            self.adapter_agent.publish_inter_adapter_message(child_device.id, event_dict)
+            self.adapter_agent.publish_inter_adapter_message(child_device.id, msg)
 
         elif _object == 'alloc_id':
             # key: {'device_id': <int>, 'pon_ni': <int>, 'onu_id': <int>, 'alloc_id': ,<int>}
