diff --git a/voltha/adapters/adtran_onu/adtran_onu_handler.py b/voltha/adapters/adtran_onu/adtran_onu_handler.py
index e3290f8..0801796 100644
--- a/voltha/adapters/adtran_onu/adtran_onu_handler.py
+++ b/voltha/adapters/adtran_onu/adtran_onu_handler.py
@@ -35,6 +35,7 @@
 from voltha.protos.device_pb2 import Image
 from common.utils.indexpool import IndexPool
 from voltha.extensions.omci.openomci_agent import OpenOMCIAgent
+from voltha.extensions.omci.omci_me import *
 
 _ = third_party
 _MAXIMUM_PORT = 128          # PON and UNI ports
@@ -650,13 +651,16 @@
         # Remove the uni logical port from the OLT, if still present
         parent_device = self.adapter_agent.get_device(device.parent_id)
         assert parent_device
-        logical_device_id = parent_device.parent_id
-        assert logical_device_id
+
 
         for uni in self.uni_ports:
-            port_id = 'uni-{}'.format(uni.port_number)
+            #port_id = 'uni-{}'.format(uni.port_number)
+            port_id = uni.port_id_name()
 
             try:
+                #TODO: there is no logical device if olt disables first
+                logical_device_id = parent_device.parent_id
+                assert logical_device_id
                 port = self.adapter_agent.get_logical_port(logical_device_id,
                                                            port_id)
                 self.adapter_agent.delete_logical_port(logical_device_id, port)
@@ -664,10 +668,32 @@
                 self.log.info('logical-port-not-found', device_id=self.device_id,
                               portid=port_id)
 
-        # Remove pon port from parent
+        # Remove pon port from parent and disable
         if self._pon is not None:
             self.adapter_agent.delete_port_reference_from_parent(self.device_id,
                                                                  self._pon.get_port())
+            self._pon.enabled = False
+
+        # Send Uni Admin State Down
+
+        # ethernet_uni_entity_id = 0x101
+        # omci = self._handler.omci
+        # attributes = dict(
+        #     administrative_state=1  # - lock
+        # )
+        # frame = PptpEthernetUniFrame(
+        #     ethernet_uni_entity_id,  # Entity ID
+        #     attributes=attributes  # See above
+        # ).set()
+        # results = yield omci.send(frame)
+        #
+        # status = results.fields['omci_message'].fields['success_code']
+        # failed_attributes_mask = results.fields['omci_message'].fields['failed_attributes_mask']
+        # unsupported_attributes_mask = results.fields['omci_message'].fields['unsupported_attributes_mask']
+        # self.log.debug('set-pptp-ethernet-uni', status=status,
+        #                failed_attributes_mask=failed_attributes_mask,
+        #                unsupported_attributes_mask=unsupported_attributes_mask)
+
 
         # Just updating the port status may be an option as well
         # port.ofp_port.config = OFPPC_NO_RECV
@@ -708,7 +734,7 @@
 
             # Add the pon port reference to the parent
             if self._pon is not None:
-                # TODO: Send 'enable' to PonPort?
+                self._pon.enabled = True
                 self.adapter_agent.add_port_reference_to_parent(device.id,
                                                                 self._pon.get_port())
 
@@ -725,15 +751,23 @@
                 # vlan non-zero if created via legacy method (not xPON)
                 self.uni_port('deprecated').add_logical_port(device.vlan, device.vlan,
                                                              subscriber_vlan=device.vlan)
+            else:
+                # reestablish logical ports for each UNI
+                for uni in self.uni_ports:
+                    self.adapter_agent.add_port(device.id, uni.get_port())
+                    uni.add_logical_port(uni.logical_port_number, subscriber_vlan=uni.subscriber_vlan)
 
             device = self.adapter_agent.get_device(device.id)
             device.oper_status = OperStatus.ACTIVE
+            device.connect_status = ConnectStatus.REACHABLE
             device.reason = ''
 
             self.enabled = True
             self.adapter_agent.update_device(device)
 
             self.log.info('re-enabled', device_id=device.id)
+            self._pon._dev_info_loaded = False
+            self._bridge_initialized = False
         except Exception, e:
             self.log.exception('error-reenabling', e=e)
 
@@ -751,7 +785,6 @@
         if self._omci_agent is not None:
             self._omci_agent.remove_device(self.device_id, cleanup=True)
             self._omci_agent = None
-
         #
         # handling needed here
         # self.enabled = False
diff --git a/voltha/adapters/adtran_onu/onu_pm_metrics.py b/voltha/adapters/adtran_onu/onu_pm_metrics.py
index ac0b02e..52e1fc7 100644
--- a/voltha/adapters/adtran_onu/onu_pm_metrics.py
+++ b/voltha/adapters/adtran_onu/onu_pm_metrics.py
@@ -28,7 +28,7 @@
             ('tx_errors', PmConfig.COUNTER),
             ('rx_frames', PmConfig.COUNTER),
             ('rx_unknown_tid', PmConfig.COUNTER),
-            ('rx_onu_frames', PmConfig.COUNTER),        # Rx ONU autonomouse messages
+            ('rx_onu_frames', PmConfig.COUNTER),        # Rx ONU autonomous messages
             ('rx_alarm_overflow', PmConfig.COUNTER),    # Autonomous ONU generated alarm message overflows
             ('rx_avc_overflow', PmConfig.COUNTER),      # Autonomous ONU generated AVC message overflows
             ('rx_onu_discards', PmConfig.COUNTER),      # Autonomous ONU message unknown type discards
diff --git a/voltha/adapters/adtran_onu/pon_port.py b/voltha/adapters/adtran_onu/pon_port.py
index 0b14ee1..2edb6f7 100644
--- a/voltha/adapters/adtran_onu/pon_port.py
+++ b/voltha/adapters/adtran_onu/pon_port.py
@@ -175,9 +175,19 @@
         return self._port
 
     def _update_adapter_agent(self):
-        # TODO: Currently does the adapter_agent allow 'update' of port status
-        # self.adapter_agent.update_port(self.olt.device_id, self.get_port())
-        pass
+        """
+        Update the port status and state in the core
+        """
+        self.log.debug('update-adapter-agent', admin_state=self._admin_state,
+            oper_status=self._oper_status)
+
+        if self._port is not None:
+            self._port.admin_state = self._admin_state
+            self._port.oper_status = self._oper_status
+
+        # adapter_agent add_port also does an update of port status
+        self._handler.adapter_agent.add_port(self._handler.device_id, self.get_port())
+
 
     @property
     def onu_omci_device(self):
@@ -206,6 +216,9 @@
                 for uni in self._handler.uni_ports:
                     uni.add_logical_port(None, None)
 
+                #BKP
+                device = self._handler.adapter_agent.get_device(self._handler.device_id)
+
                 vendor = omci.query_mib_single_attribute(OntG.class_id, 0, 'vendor_id') or 'ADTN'
                 assert vendor == 'ADTN', \
                     "Invalid Device/Wrong device adapter assigned: '{}'".format(vendor)
@@ -263,6 +276,7 @@
                 # Save our device information
                 self._handler.adapter_agent.update_device(device)
                 self._dev_info_loaded = True
+                self._bridge_initialized = False
 
             except Exception as e:
                 self.log.exception('device-info-load', e=e)
@@ -274,9 +288,11 @@
     def resync_omci_settings(self):
         self._cancel_resync_deferred()
 
-        if not self._bridge_initialized:
+        device = self._handler.adapter_agent.get_device(self._handler.device_id)
+
+        if not self._bridge_initialized and device.vlan > 0 :
             self.log.info('resync-omci-settings', initialized=self._bridge_initialized)
-            device = self._handler.adapter_agent.get_device(self._handler.device_id)
+            #device = self._handler.adapter_agent.get_device(self._handler.device_id)
 
             if not self.enabled or device is None:
                 returnValue('not-enabled')
@@ -664,6 +680,9 @@
                 # Try again later
                 self._deferred = reactor.callLater(_STARTUP_RETRY_WAIT,
                                                    self.resync_omci_settings)
+        else:
+                self._deferred = reactor.callLater(_STARTUP_RETRY_WAIT,
+                                                   self.resync_omci_settings)
 
     def add_tcont(self, tcont, reflow=False):
         """
diff --git a/voltha/adapters/adtran_onu/uni_port.py b/voltha/adapters/adtran_onu/uni_port.py
index 6fc7b04..d965144 100644
--- a/voltha/adapters/adtran_onu/uni_port.py
+++ b/voltha/adapters/adtran_onu/uni_port.py
@@ -107,6 +107,14 @@
         return self._port_number
 
     @property
+    def subscriber_vlan(self):
+        """
+        Subscriber vlan assigned to this UNI
+        :return: (int) subscriber vlan
+        """
+        return self._subscriber_vlan
+
+    @property
     def logical_port_number(self):
         """
         Logical device port number (used as OpenFlow port for UNI)
@@ -115,9 +123,19 @@
         return self._logical_port_number
 
     def _update_adapter_agent(self):
-        # TODO: Currently does the adapter_agent allow 'update' of port status
-        # self.adapter_agent.update_port(self.olt.device_id, self.get_port())
-        pass
+        """
+        Update the port status and state in the core
+        """
+        self.log.debug('update-adapter-agent', admin_state=self._admin_state,
+            oper_status=self._oper_status)
+
+        if self._port is not None:
+            self._port.admin_state = self._admin_state
+            self._port.oper_status = self._oper_status
+
+        # adapter_agent add_port also does an update of existing port
+        self._handler.adapter_agent.add_port(self._handler.logical_device_id,
+                                             self.get_port())
 
     @staticmethod
     def decode_venet(venet_info):
@@ -165,10 +183,26 @@
                               oper_status=self._oper_status)
         return self._port
 
+    def port_id_name(self):
+        return 'uni-{}'.format(self._logical_port_number)
+
     def add_logical_port(self, openflow_port_no, subscriber_vlan=None,
                          capabilities=OFPPF_10GB_FD | OFPPF_FIBER,
                          speed=OFPPF_10GB_FD):
 
+        if self._logical_port_number is not None:
+            # delete old logical port if it exists
+            try:
+                port = self.adapter_agent.get_logical_port(self._handler.logical_device_id,
+                                                           self.port_id_name())
+                self.adapter_agent.delete_logical_port(self._handler.logical_device_id, port)
+
+            except Exception as e:
+                # assume this exception was because logical port does not already exist
+                pass
+
+            self._logical_port_number = None
+
         # Use vENET provisioned values if none supplied
         port_no = openflow_port_no or self._ofp_port_no
         vlan = subscriber_vlan or self._subscriber_vlan
@@ -190,7 +224,7 @@
                                           device.parent_port_no & 0xff,
                                           (port_no >> 8) & 0xff,
                                           port_no & 0xff)),
-                name='uni-{}'.format(port_no),
+                name=self.port_id_name(),
                 config=0,
                 state=OFPPS_LIVE,
                 curr=capabilities,
@@ -201,7 +235,7 @@
             )
             self._handler.adapter_agent.add_logical_port(self._handler.logical_device_id,
                                                          LogicalPort(
-                                                             id='uni-{}'.format(port_no),
+                                                             id=self.port_id_name(),
                                                              ofp_port=openflow_port,
                                                              device_id=device.id,
                                                              device_port_no=self._port_number))
