diff --git a/python/adapters/brcm_openomci_onu/VERSION b/python/adapters/brcm_openomci_onu/VERSION
deleted file mode 100644
index 97ade15..0000000
--- a/python/adapters/brcm_openomci_onu/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2.2.0-dev
diff --git a/python/adapters/brcm_openomci_onu/brcm_openomci_onu_adapter.py b/python/adapters/brcm_openomci_onu/brcm_openomci_onu_adapter.py
index 54840e7..a921ef8 100644
--- a/python/adapters/brcm_openomci_onu/brcm_openomci_onu_adapter.py
+++ b/python/adapters/brcm_openomci_onu/brcm_openomci_onu_adapter.py
@@ -42,8 +42,6 @@
 from omci.brcm_capabilities_task import BrcmCapabilitiesTask
 from copy import deepcopy
 
-log = structlog.get_logger()
-
 
 @implementer(IAdapterInterface)
 class BrcmOpenomciOnuAdapter(object):
@@ -59,15 +57,17 @@
         )
     ]
 
-    def __init__(self, core_proxy, adapter_proxy, config):
-        log.debug('BrcmOpenomciOnuAdapter-function-entry', config=config)
+    def __init__(self, core_proxy, adapter_proxy, config, build_info):
+        self.log = structlog.get_logger()
+        self.log.debug('starting-adapter', config=config)
+
         self.core_proxy = core_proxy
         self.adapter_proxy = adapter_proxy
         self.config = config
         self.descriptor = Adapter(
             id=self.name,
-            vendor='Voltha project',
-            version='2.0',
+            vendor='VOLTHA OpenONU',
+            version=build_info.version,
             config=AdapterConfig(log_level=LogLevel.INFO)
         )
         self.devices_handlers = dict()
@@ -89,25 +89,25 @@
     @property
     def omci_agent(self):
         if not hasattr(self, '_omci_agent') or self._omci_agent is None:
-            log.debug('creating-omci-agent')
+            self.log.debug('creating-omci-agent')
             self._omci_agent = OpenOMCIAgent(self.core_proxy,
                                              self.adapter_proxy,
                                              support_classes=self.broadcom_omci)
         return self._omci_agent
 
     def start(self):
-        log.debug('starting')
+        self.log.debug('starting')
         self.omci_agent.start()
-        log.info('started')
+        self.log.info('started')
 
     def stop(self):
-        log.debug('stopping')
+        self.log.debug('stopping')
 
         omci, self._omci_agent = self._omci_agent, None
         if omci is not None:
             self._omci_agent.stop()
 
-        log.info('stopped')
+        self.log.info('stopped')
 
     def adapter_descriptor(self):
         return self.descriptor
@@ -122,13 +122,13 @@
         raise NotImplementedError()
 
     def adopt_device(self, device):
-        log.info('adopt_device', device_id=device.id)
+        self.log.info('adopt-device', device_id=device.id)
         self.devices_handlers[device.id] = BrcmOpenomciOnuHandler(self, device.id)
         reactor.callLater(0, self.devices_handlers[device.id].activate, device)
         return device
 
     def reconcile_device(self, device):
-        log.info('reconcile-device', device_id=device.id)
+        self.log.info('reconcile-device', device_id=device.id)
         self.devices_handlers[device.id] = BrcmOpenomciOnuHandler(self, device.id)
         reactor.callLater(0, self.devices_handlers[device.id].reconcile, device)
 
@@ -136,21 +136,21 @@
         raise NotImplementedError()
 
     def disable_device(self, device):
-        log.info('disable-onu-device', device_id=device.id)
+        self.log.info('disable-onu-device', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
                 handler.disable(device)
 
     def reenable_device(self, device):
-        log.info('reenable-onu-device', device_id=device.id)
+        self.log.info('reenable-onu-device', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
                 handler.reenable(device)
 
     def reboot_device(self, device):
-        log.info('reboot-device', device_id=device.id)
+        self.log.info('reboot-device', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
@@ -177,11 +177,11 @@
         :param device: A Voltha.Device object.
         :return: Will return result of self test
         """
-        log.info('self-test-device - Not implemented yet', device_id=device.id, serial_number=device.serial_number)
+        self.log.info('self-test-device - Not implemented yet', device_id=device.id, serial_number=device.serial_number)
         raise NotImplementedError()
 
     def delete_device(self, device):
-        log.info('delete-device', device_id=device.id)
+        self.log.info('delete-device', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
@@ -194,7 +194,7 @@
 
     # TODO(smbaker): When BrcmOpenomciOnuAdapter is updated to inherit from OnuAdapter, this function can be deleted
     def update_pm_config(self, device, pm_config):
-        log.info("adapter-update-pm-config", device_id=device.id, serial_number=device.serial_number,
+        self.log.info("adapter-update-pm-config", device_id=device.id, serial_number=device.serial_number,
                  pm_config=pm_config)
         handler = self.devices_handlers[device.id]
         handler.update_pm_config(device, pm_config)
@@ -212,11 +212,11 @@
         raise NotImplementedError()
 
     def send_proxied_message(self, proxy_address, msg):
-        log.debug('send-proxied-message', proxy_address=proxy_address, msg=msg)
+        self.log.debug('send-proxied-message', proxy_address=proxy_address, msg=msg)
 
     @inlineCallbacks
     def receive_proxied_message(self, proxy_address, msg):
-        log.debug('receive-proxied-message', proxy_address=proxy_address,
+        self.log.debug('receive-proxied-message', proxy_address=proxy_address,
                  device_id=proxy_address.device_id, msg=hexify(msg))
         # Device_id from the proxy_address is the olt device id. We need to
         # get the onu device id using the port number in the proxy_address
@@ -227,12 +227,12 @@
             handler.receive_message(msg)
 
     def receive_packet_out(self, logical_device_id, egress_port_no, msg):
-        log.info('packet-out', logical_device_id=logical_device_id,
+        self.log.debug('packet-out', logical_device_id=logical_device_id,
                  egress_port_no=egress_port_no, msg_len=len(msg))
 
     @inlineCallbacks
     def receive_inter_adapter_message(self, msg):
-        log.debug('receive_inter_adapter_message', msg=msg)
+        self.log.debug('receive-inter-adapter-message', msg=msg)
         proxy_address = msg['proxy_address']
         assert proxy_address is not None
         # Device_id from the proxy_address is the olt device id. We need to
@@ -243,106 +243,39 @@
             handler = self.devices_handlers[device.id]
             handler.event_messages.put(msg)
         else:
-            log.error("device-not-found")
+            self.log.error("device-not-found")
 
     def get_ofp_port_info(self, device, port_no):
         ofp_port_info = self.devices_handlers[device.id].get_ofp_port_info(device, port_no)
-        log.debug('get_ofp_port_info', device_id=device.id,
+        self.log.debug('get-ofp-port-info', device_id=device.id,
                   port_name=ofp_port_info.port.ofp_port.name, port_no=ofp_port_info.port.device_port_no)
         return ofp_port_info
 
     def process_inter_adapter_message(self, msg):
         # Unpack the header to know which device needs to handle this message
         if msg.header:
-            log.debug('process-inter-adapter-message', type=msg.header.type, from_topic=msg.header.from_topic,
+            self.log.debug('process-inter-adapter-message', type=msg.header.type, from_topic=msg.header.from_topic,
                       to_topic=msg.header.to_topic, to_device_id=msg.header.to_device_id)
             handler = self.devices_handlers[msg.header.to_device_id]
             handler.process_inter_adapter_message(msg)
 
     def create_interface(self, device, data):
-        log.debug('create-interface', device_id=device.id)
+        self.log.debug('create-interface', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
                 handler.create_interface(data)
 
     def update_interface(self, device, data):
-        log.debug('update-interface', device_id=device.id)
+        self.log.debug('update-interface', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
                 handler.update_interface(data)
 
     def remove_interface(self, device, data):
-        log.debug('remove-interface', device_id=device.id)
+        self.log.debug('remove-interface', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
                 handler.remove_interface(data)
-
-    def receive_onu_detect_state(self, device_id, state):
-        raise NotImplementedError()
-
-    def create_tcont(self, device, tcont_data, traffic_descriptor_data):
-        log.debug('create-tcont', device_id=device.id)
-        if device.id in self.devices_handlers:
-            handler = self.devices_handlers[device.id]
-            if handler is not None:
-                handler.create_tcont(tcont_data, traffic_descriptor_data)
-
-    def update_tcont(self, device, tcont_data, traffic_descriptor_data):
-        raise NotImplementedError()
-
-    def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
-        log.debug('remove-tcont', device_id=device.id)
-        if device.id in self.devices_handlers:
-            handler = self.devices_handlers[device.id]
-            if handler is not None:
-                handler.remove_tcont(tcont_data, traffic_descriptor_data)
-
-    def create_gemport(self, device, data):
-        log.debug('create-gemport', device_id=device.id)
-        if device.id in self.devices_handlers:
-            handler = self.devices_handlers[device.id]
-            if handler is not None:
-                handler.create_gemport(data)
-
-    def update_gemport(self, device, data):
-        raise NotImplementedError()
-
-    def remove_gemport(self, device, data):
-        log.debug('remove-gemport', device_id=device.id)
-        if device.id in self.devices_handlers:
-            handler = self.devices_handlers[device.id]
-            if handler is not None:
-                handler.remove_gemport(data)
-
-    def create_multicast_gemport(self, device, data):
-        log.debug('create-multicast-gemport', device_id=device.id)
-        if device.id in self.devices_handlers:
-            handler = self.devices_handlers[device.id]
-            if handler is not None:
-                handler.create_multicast_gemport(data)
-
-    def update_multicast_gemport(self, device, data):
-        raise NotImplementedError()
-
-    def remove_multicast_gemport(self, device, data):
-        raise NotImplementedError()
-
-    def create_multicast_distribution_set(self, device, data):
-        raise NotImplementedError()
-
-    def update_multicast_distribution_set(self, device, data):
-        raise NotImplementedError()
-
-    def remove_multicast_distribution_set(self, device, data):
-        raise NotImplementedError()
-
-    def suppress_alarm(self, filter):
-        raise NotImplementedError()
-
-    def unsuppress_alarm(self, filter):
-        raise NotImplementedError()
-
-
diff --git a/python/adapters/brcm_openomci_onu/brcm_openomci_onu_handler.py b/python/adapters/brcm_openomci_onu/brcm_openomci_onu_handler.py
index 05d6730..f05b293 100644
--- a/python/adapters/brcm_openomci_onu/brcm_openomci_onu_handler.py
+++ b/python/adapters/brcm_openomci_onu/brcm_openomci_onu_handler.py
@@ -78,7 +78,7 @@
 
     def __init__(self, adapter, device_id):
         self.log = structlog.get_logger(device_id=device_id)
-        self.log.debug('BrcmOpenomciOnuHandler')
+        self.log.debug('starting-handler')
         self.adapter = adapter
         self.core_proxy = adapter.core_proxy
         self.adapter_proxy = adapter.adapter_proxy
@@ -137,8 +137,8 @@
             self.kv_client = ConsulStore(host, port,
                                          TechProfile.KV_STORE_TECH_PROFILE_PATH_PREFIX)
         else:
-            self.log.error('Invalid-backend')
-            raise Exception("Invalid-backend-for-kv-store")
+            self.log.error('invalid-backend')
+            raise Exception("invalid-backend-for-kv-store")
 
     @property
     def enabled(self):
@@ -187,7 +187,7 @@
             self.omci_cc.receive_message(msg)
 
     def get_ofp_port_info(self, device, port_no):
-        self.log.info('get_ofp_port_info', port_no=port_no, device_id=device.id)
+        self.log.debug('get-ofp-port-info', port_no=port_no, device_id=device.id)
         cap = OFPPF_1GB_FD | OFPPF_FIBER
 
         hw_addr = mac_str_to_tuple('08:%02x:%02x:%02x:%02x:%02x' %
@@ -199,7 +199,7 @@
 
         uni_port = self.uni_port(int(port_no))
         name = device.serial_number + '-' + str(uni_port.mac_bridge_port_num)
-        self.log.debug('ofp_port_name', port_no=port_no, name=name, uni_port=uni_port)
+        self.log.debug('ofp-port-name', port_no=port_no, name=name, uni_port=uni_port)
 
         ofstate = OFPPS_LINK_DOWN
         if uni_port.operstatus is OperStatus.ACTIVE:
@@ -247,7 +247,7 @@
             self.logical_device_id = self.device_id
 
             yield self.core_proxy.device_update(device)
-            self.log.debug('device updated', device_id=device.id, serial_number=device.serial_number)
+            self.log.debug('device-updated', device_id=device.id, serial_number=device.serial_number)
 
             yield self._init_pon_state()
 
@@ -264,7 +264,7 @@
                 'heartbeat': self.heartbeat,
                 OnuOmciPmMetrics.OMCI_DEV_KEY: self._onu_omci_device
             }
-            self.log.debug('create-OnuPmMetrics', device_id=device.id, serial_number=device.serial_number)
+            self.log.debug('create-pm-metrics', device_id=device.id, serial_number=device.serial_number)
             self.pm_metrics = OnuPmMetrics(self.events, self.core_proxy, self.device_id,
                                            self.logical_device_id, device.serial_number,
                                            grouped=True, freq_override=False, **kwargs)
@@ -330,7 +330,7 @@
 
     @inlineCallbacks
     def _init_pon_state(self):
-        self.log.debug('_init-pon-state', device_id=self.device_id, device_logical_id=self.logical_device_id)
+        self.log.debug('init-pon-state', device_id=self.device_id, device_logical_id=self.logical_device_id)
 
         self._pon = PonPort.create(self, self._pon_port_number)
         self._pon.add_peer(self.parent_id, self._pon_port_number)
@@ -712,7 +712,6 @@
             _set_vlan_vid = None
             _tunnel_id = None
 
-            self.log.debug('bulk-flow-update', device_id=device.id, flow=flow)
             try:
                 write_metadata = fd.get_write_metadata(flow)
                 if write_metadata is None:
@@ -721,7 +720,7 @@
 
                 # extract tp id from flow
                 tp_id = (write_metadata >> 32) & 0xFFFF
-                self.log.info("tp-id-in-flow", tp_id=tp_id)
+                self.log.debug("tp-id-in-flow", tp_id=tp_id)
 
                 _in_port = fd.get_in_port(flow)
                 assert _in_port is not None
@@ -941,7 +940,7 @@
     # Called each time there is an onu "up" indication from the olt handler
     @inlineCallbacks
     def create_interface(self, onu_indication):
-        self.log.debug('create-interface', onu_id=onu_indication.onu_id,
+        self.log.info('create-interface', onu_id=onu_indication.onu_id,
                        serial_number=onu_indication.serial_number)
         self._onu_indication = onu_indication
 
@@ -961,7 +960,7 @@
     # TODO: possibly other reasons to "update" from the olt?
     @inlineCallbacks
     def update_interface(self, onu_indication):
-        self.log.debug('update-interface', onu_id=onu_indication.onu_id,
+        self.log.info('update-interface', onu_id=onu_indication.onu_id,
                        serial_number=onu_indication.serial_number)
 
         if onu_indication.oper_state == 'down' or onu_indication.oper_state == "unreachable":
@@ -984,7 +983,7 @@
     # Not currently called by olt or anything else
     @inlineCallbacks
     def remove_interface(self, data):
-        self.log.debug('remove-interface', data=data)
+        self.log.info('remove-interface', data=data)
 
         self.log.debug('stopping-openomci-statemachine')
         reactor.callLater(0, self._onu_omci_device.stop)
@@ -998,39 +997,10 @@
         yield self.disable_ports(lock_ports=False)
         yield self.core_proxy.device_reason_update(self.device_id, "stopping-openomci")
 
-        # TODO: im sure there is more to do here
-
-    # Not currently called.  Would be called presumably from the olt handler
-    @inlineCallbacks
-    def remove_gemport(self, data):
-        self.log.debug('remove-gemport', data=data)
-        device = yield self.core_proxy.get_device(self.device_id)
-        if device.connect_status != ConnectStatus.REACHABLE:
-            self.log.error('device-unreachable')
-            return
-
-    # Not currently called.  Would be called presumably from the olt handler
-    @inlineCallbacks
-    def remove_tcont(self, tcont_data, traffic_descriptor_data):
-        self.log.debug('remove-tcont', tcont_data=tcont_data, traffic_descriptor_data=traffic_descriptor_data)
-        device = yield self.core_proxy.get_device(self.device_id)
-        if device.connect_status != ConnectStatus.REACHABLE:
-            self.log.error('device-unreachable')
-            return
-
-        # TODO: Create some omci task that encompases this what intended
-
-    # Not currently called.  Would be called presumably from the olt handler
-    def create_multicast_gemport(self, data):
-        self.log.debug('create-multicast-gem-port', data=data)
-
-        # TODO: create objects and populate for later omci calls
-
     @inlineCallbacks
     def disable(self, device):
-        self.log.debug('disable', device_id=device.id, serial_number=device.serial_number)
+        self.log.info('disable', device_id=device.id, serial_number=device.serial_number)
         try:
-            self.log.info('sending-uni-lock-towards-device', device_id=device.id, serial_number=device.serial_number)
             yield self.disable_ports(lock_ports=True)
             yield self.core_proxy.device_reason_update(self.device_id, "omci-admin-lock")
             yield self.core_proxy.device_state_update(self.device_id, oper_status=OperStatus.UNKNOWN)
@@ -1040,9 +1010,8 @@
 
     @inlineCallbacks
     def reenable(self, device):
-        self.log.debug('reenable', device_id=device.id, serial_number=device.serial_number)
+        self.log.info('reenable', device_id=device.id, serial_number=device.serial_number)
         try:
-            self.log.info('sending-uni-unlock-towards-device', device_id=device.id, serial_number=device.serial_number)
             yield self.core_proxy.device_state_update(device.id,
                                                       oper_status=OperStatus.ACTIVE,
                                                       connect_status=ConnectStatus.REACHABLE)
@@ -1074,7 +1043,6 @@
     def disable_ports(self, lock_ports=True):
         self.log.info('disable-ports', device_id=self.device_id)
 
-        self.log.info('unsubscribe-to-port-events', device_id=self.device_id)
         bus = self._onu_omci_device.event_bus
         bus.unsubscribe(self._port_state_subscription)
         self._port_state_subscription = None
@@ -1085,7 +1053,6 @@
             self.log.info('disable-port', device_id=self.device_id, port=port)
 
         if lock_ports is True:
-            self.log.info('locking-ports', device_id=self.device_id)
             self.lock_ports(lock=True)
 
         yield self.core_proxy.ports_state_update(self.device_id, OperStatus.UNKNOWN)
@@ -1095,13 +1062,10 @@
         self.log.info('enable-ports', device_id=self.device_id)
 
         # Listen for UNI link state alarms and set the oper_state based on that rather than assuming all UNI are up
-        self.log.info('subscribe-to-port-events', device_id=self.device_id)
         bus = self._onu_omci_device.event_bus
         topic = OnuDeviceEntry.event_bus_topic(self.device_id,
                                                OnuDeviceEvents.PortEvent)
         self._port_state_subscription = bus.subscribe(topic, self.port_state_handler)
-
-        self.log.info('unlocking-ports', device_id=self.device_id)
         self.lock_ports(lock=False)
 
         # TODO: Currently the only VEIP capable ONU i can test with does not send UNI link state alarms
diff --git a/python/adapters/brcm_openomci_onu/main.py b/python/adapters/brcm_openomci_onu/main.py
index f6d45ef..b1e9873 100755
--- a/python/adapters/brcm_openomci_onu/main.py
+++ b/python/adapters/brcm_openomci_onu/main.py
@@ -21,13 +21,13 @@
 import argparse
 import os
 import time
-import logging
+import types
 
 import arrow
 import yaml
 import socketserver
+import configparser
 
-from packaging.version import Version
 from simplejson import dumps
 from twisted.internet.defer import inlineCallbacks, returnValue
 from twisted.internet.task import LoopingCall
@@ -52,7 +52,7 @@
 from probe import Probe
 
 defs = dict(
-    version_file='./VERSION',
+    build_info_file='./BUILDINFO',
     config=os.environ.get('CONFIG', './openonu.yml'),
     container_name_regex=os.environ.get('CONTAINER_NUMBER_EXTRACTOR', '^.*\.(['
                                                                       '0-9]+)\..*$'),
@@ -237,7 +237,6 @@
                         default=defs['event_topic'],
                         help=_help)
 
-
     _help = '<hostname>:<port> for liveness and readiness probes (default: %s)' % defs['probe']
     parser.add_argument(
         '-P', '--probe', dest='probe', action='store',
@@ -265,11 +264,31 @@
     return config
 
 
+def get_build_info():
+    path = defs['build_info_file']
+    if not path.startswith('/'):
+        dir = os.path.dirname(os.path.abspath(__file__))
+        path = os.path.join(dir, path)
+    path = os.path.abspath(path)
+    build_info = configparser.ConfigParser()
+    build_info.read(path)
+    results = types.SimpleNamespace(
+        version=build_info.get('buildinfo', 'version', fallback='unknown'),
+        vcs_ref=build_info.get('buildinfo', 'vcs_ref', fallback='unknown'),
+        vcs_dirty=build_info.get('buildinfo', 'vcs_dirty', fallback='unknown'),
+        build_time=build_info.get('buildinfo', 'build_time', fallback='unknown')
+    )
+    return results
+
+
 def print_banner(log):
-   log.info('                                                    ')
-   log.info('               OpenOnu Adapter                      ')
-   log.info('                                                    ')
-   log.info('(to stop: press Ctrl-C)')
+    log.info('       ___________ _____ _   _ _____ _   _ _   _       ')
+    log.info('      |  _  | ___ \  ___| \ | |  _  | \ | | | | |      ')
+    log.info('      | | | | |_/ / |__ |  \| | | | |  \| | | | |      ')
+    log.info('      | | | |  __/|  __|| . ` | | | | . ` | | | |      ')
+    log.info('      \ \_/ / |   | |___| |\  \ \_/ / |\  | |_| |      ')
+    log.info('       \___/\_|   \____/\_| \_/\___/\_| \_/\___/       ')
+    log.info('                                                       ')
 
 
 @implementer(IComponent)
@@ -298,8 +317,8 @@
         self.log.info('container-number-extractor',
                       regex=args.container_name_regex)
 
-        self.adapter_version = self.get_version()
-        self.log.info('OpenONU-Adapter-Version', version=self.adapter_version)
+        self.build_info = get_build_info()
+        self.log.info('OpenONU-Adapter-Version', build_version=self.build_info)
 
         if not args.no_banner:
             print_banner(self.log)
@@ -319,23 +338,6 @@
             self.start_heartbeat()
             self.start_kafka_cluster_heartbeat(self.instance_id)
 
-    def get_version(self):
-        path = defs['version_file']
-        if not path.startswith('/'):
-            dir = os.path.dirname(os.path.abspath(__file__))
-            path = os.path.join(dir, path)
-
-        path = os.path.abspath(path)
-        version_file = open(path, 'r')
-        v = version_file.read()
-
-        # Use Version to validate the version string - exception will be raised
-        # if the version is invalid
-        Version(v)
-
-        version_file.close()
-        return v
-
     def start(self):
         self.start_reactor()  # will not return except Keyboard interrupt
 
@@ -392,7 +394,8 @@
 
             self.adapter = BrcmOpenomciOnuAdapter(
                 core_proxy=self.core_proxy, adapter_proxy=self.adapter_proxy,
-                config=config)
+                config=config,
+                build_info=self.build_info)
 
             self.adapter.start()
 
diff --git a/python/adapters/brcm_openomci_onu/omci/brcm_capabilities_task.py b/python/adapters/brcm_openomci_onu/omci/brcm_capabilities_task.py
index b6ca406..80e6463 100644
--- a/python/adapters/brcm_openomci_onu/omci/brcm_capabilities_task.py
+++ b/python/adapters/brcm_openomci_onu/omci/brcm_capabilities_task.py
@@ -14,7 +14,6 @@
 # limitations under the License.
 
 from __future__ import absolute_import
-import structlog
 from pyvoltha.adapters.extensions.omci.tasks.onu_capabilities_task import OnuCapabilitiesTask
 from twisted.internet.defer import failure
 
@@ -44,9 +43,6 @@
         :param omci_agent: (OmciAdapterAgent) OMCI Adapter agent
         :param device_id: (str) ONU Device ID
         """
-        self.log = structlog.get_logger(device_id=device_id)
-        self.log.debug('function-entry')
-
         super(BrcmCapabilitiesTask, self).__init__(omci_agent, device_id)
         self._omci_managed = False      # TODO: Look up capabilities/model number
 
@@ -59,7 +55,6 @@
 
         :return: (set of ints)
         """
-        self.log.debug('function-entry')
 
         if self._omci_managed:
             return super(BrcmCapabilitiesTask, self).supported_managed_entities
@@ -83,7 +78,6 @@
 
         :return: (set of EntityOperations)
         """
-        self.log.debug('function-entry')
 
         if self._omci_managed:
             return super(BrcmCapabilitiesTask, self).supported_message_types
@@ -127,7 +121,6 @@
         Then a loop is entered and get-next commands are sent for each sequence
         requested.
         """
-        self.log.debug('function-entry')
 
         self.log.info('perform-get')
 
diff --git a/python/adapters/brcm_openomci_onu/omci/brcm_mib_download_task.py b/python/adapters/brcm_openomci_onu/omci/brcm_mib_download_task.py
index eaa8ff5..b0fe3d8 100644
--- a/python/adapters/brcm_openomci_onu/omci/brcm_mib_download_task.py
+++ b/python/adapters/brcm_openomci_onu/omci/brcm_mib_download_task.py
@@ -13,7 +13,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import structlog
 from twisted.internet import reactor
 from twisted.internet.defer import inlineCallbacks, returnValue, TimeoutError, failure
 from pyvoltha.adapters.extensions.omci.omci_me import PptpEthernetUniFrame, GalEthernetProfileFrame, \
@@ -65,10 +64,6 @@
         :param omci_agent: (OmciAdapterAgent) OMCI Adapter agent
         :param device_id: (str) ONU Device ID
         """
-
-        self.log = structlog.get_logger(device_id=handler.device_id)
-        self.log.debug('function-entry')
-
         super(BrcmMibDownloadTask, self).__init__(BrcmMibDownloadTask.name,
                                                   omci_agent,
                                                   handler.device_id,
@@ -102,7 +97,6 @@
         self._free_dl_prior_q_entity_ids = set()
 
     def cancel_deferred(self):
-        self.log.debug('function-entry')
         super(BrcmMibDownloadTask, self).cancel_deferred()
 
         d, self._local_deferred = self._local_deferred, None
@@ -116,7 +110,6 @@
         """
         Start the MIB Download
         """
-        self.log.debug('function-entry')
         super(BrcmMibDownloadTask, self).start()
         self._local_deferred = reactor.callLater(0, self.perform_mib_download)
 
@@ -124,9 +117,6 @@
         """
         Shutdown MIB Synchronization tasks
         """
-        self.log.debug('function-entry')
-        self.log.debug('stopping')
-
         self.cancel_deferred()
         super(BrcmMibDownloadTask, self).stop()
 
@@ -139,7 +129,6 @@
         :param operation: (str) what operation was being performed
         :return: True if successful, False if the entity existed (already created)
         """
-        self.log.debug('function-entry')
 
         omci_msg = results.fields['omci_message'].fields
         status = omci_msg['success_code']
@@ -170,7 +159,6 @@
         and other characteristics are done as needed.
         """
         try:
-            self.log.debug('function-entry')
             self.log.info('perform-download')
 
             if self._handler.enabled and len(self._handler.uni_ports) > 0:
@@ -207,7 +195,6 @@
 
     @inlineCallbacks
     def perform_initial_bridge_setup(self):
-        self.log.debug('function-entry')
 
         omci_cc = self._onu_device.omci_cc
         try:
@@ -240,7 +227,6 @@
 
     @inlineCallbacks
     def perform_uni_initial_bridge_setup(self, uni_port):
-        self.log.debug('function-entry')
         omci_cc = self._onu_device.omci_cc
         frame = None
         try:
diff --git a/python/adapters/brcm_openomci_onu/omci/brcm_tp_delete_task.py b/python/adapters/brcm_openomci_onu/omci/brcm_tp_delete_task.py
index b75d791..3fa3ddc 100644
--- a/python/adapters/brcm_openomci_onu/omci/brcm_tp_delete_task.py
+++ b/python/adapters/brcm_openomci_onu/omci/brcm_tp_delete_task.py
@@ -60,16 +60,17 @@
         :param uni_id: (int) numeric id of the uni port on the onu device, starts at 0
         :param tp_table_id: (int) Technology Profile Table-ID
         """
-        log = structlog.get_logger(device_id=handler.device_id, uni_id=uni_id)
-        log.debug('function-entry')
-
         super(BrcmTpDeleteTask, self).__init__(BrcmTpDeleteTask.name,
                                                omci_agent,
                                                handler.device_id,
                                                priority=DELETE_TP_TASK_PRIORITY,
                                                exclusive=True)
 
-        self.log = log
+        self.log = structlog.get_logger(device_id=handler.device_id,
+                                        name=BrcmTpDeleteTask.name,
+                                        task_id=self._task_id,
+                                        uni_id=uni_id,
+                                        tp_table_id=tp_table_id)
 
         self._onu_device = omci_agent.get_device(handler.device_id)
         self._local_deferred = None
@@ -96,7 +97,6 @@
             handler.pon_port.mac_bridge_port_ani_entity_id
 
     def cancel_deferred(self):
-        self.log.debug('function-entry')
         super(BrcmTpDeleteTask, self).cancel_deferred()
 
         d, self._local_deferred = self._local_deferred, None
@@ -110,7 +110,6 @@
         """
         Start the Tech-Profile Delete
         """
-        self.log.debug('function-entry')
         super(BrcmTpDeleteTask, self).start()
         if self._tcont is not None:
             self._local_deferred = reactor.callLater(0, self.delete_tcont_and_associated_me)
@@ -123,9 +122,6 @@
         """
         Shutdown Tech-Profile delete tasks
         """
-        self.log.debug('function-entry')
-        self.log.debug('stopping')
-
         self.cancel_deferred()
         super(BrcmTpDeleteTask, self).stop()
 
@@ -138,7 +134,6 @@
         :param operation: (str) what operation was being performed
         :return: True if successful, False if the entity existed (already created)
         """
-        self.log.debug('function-entry')
 
         omci_msg = results.fields['omci_message'].fields
         status = omci_msg['success_code']
@@ -162,7 +157,7 @@
 
     @inlineCallbacks
     def delete_tcont_and_associated_me(self):
-        self.log.debug('function-entry')
+        self.log.info('deleting-tcont')
 
         omci_cc = self._onu_device.omci_cc
 
@@ -213,6 +208,8 @@
 
     @inlineCallbacks
     def delete_gem_port_nw_ctp_and_associated_me(self):
+        self.log.info('deleting-gem-port-iw')
+
         omci_cc = self._onu_device.omci_cc
         try:
             ################################################################################
diff --git a/python/adapters/brcm_openomci_onu/omci/brcm_tp_setup_task.py b/python/adapters/brcm_openomci_onu/omci/brcm_tp_setup_task.py
index cca0b06..d93224a 100644
--- a/python/adapters/brcm_openomci_onu/omci/brcm_tp_setup_task.py
+++ b/python/adapters/brcm_openomci_onu/omci/brcm_tp_setup_task.py
@@ -59,16 +59,19 @@
         :param uni_id: (int) numeric id of the uni port on the onu device, starts at 0
         :param tp_table_id: (int) Technology Profile Table-ID
         """
-        log = structlog.get_logger(device_id=handler.device_id, uni_id=uni_id)
-        log.debug('function-entry')
-
         super(BrcmTpSetupTask, self).__init__(BrcmTpSetupTask.name,
                                               omci_agent,
                                               handler.device_id,
                                               priority=SETUP_TP_TASK_PRIORITY,
                                               exclusive=True)
 
-        self.log = log
+        self.log = structlog.get_logger(device_id=handler.device_id,
+                                        name=BrcmTpSetupTask.name,
+                                        task_id=self._task_id,
+                                        tconts=tconts,
+                                        gem_ports=gem_ports,
+                                        uni_id=uni_id,
+                                        tp_table_id=tp_table_id)
 
         self._onu_device = omci_agent.get_device(handler.device_id)
         self._local_deferred = None
@@ -103,7 +106,6 @@
         self.uni_port_to_queue_map = dict()
 
     def cancel_deferred(self):
-        self.log.debug('function-entry')
         super(BrcmTpSetupTask, self).cancel_deferred()
 
         d, self._local_deferred = self._local_deferred, None
@@ -117,7 +119,6 @@
         """
         Start the Tech-Profile Download
         """
-        self.log.debug('function-entry')
         super(BrcmTpSetupTask, self).start()
         self._local_deferred = reactor.callLater(0, self.perform_service_specific_steps)
 
@@ -125,9 +126,6 @@
         """
         Shutdown Tech-Profile download tasks
         """
-        self.log.debug('function-entry')
-        self.log.debug('stopping')
-
         self.cancel_deferred()
         super(BrcmTpSetupTask, self).stop()
 
@@ -140,7 +138,6 @@
         :param operation: (str) what operation was being performed
         :return: True if successful, False if the entity existed (already created)
         """
-        self.log.debug('function-entry')
 
         omci_msg = results.fields['omci_message'].fields
         status = omci_msg['success_code']
@@ -164,7 +161,7 @@
 
     @inlineCallbacks
     def perform_service_specific_steps(self):
-        self.log.debug('function-entry')
+        self.log.info('creating-tcont-mapper-gemport-iw')
 
         omci_cc = self._onu_device.omci_cc
         gem_pq_associativity = dict()
diff --git a/python/adapters/brcm_openomci_onu/omci/brcm_uni_lock_task.py b/python/adapters/brcm_openomci_onu/omci/brcm_uni_lock_task.py
index 2edd43c..3884620 100644
--- a/python/adapters/brcm_openomci_onu/omci/brcm_uni_lock_task.py
+++ b/python/adapters/brcm_openomci_onu/omci/brcm_uni_lock_task.py
@@ -15,6 +15,7 @@
 #
 
 from __future__ import absolute_import
+import structlog
 from pyvoltha.adapters.extensions.omci.tasks.task import Task
 from twisted.internet import reactor
 from twisted.internet.defer import inlineCallbacks, failure, returnValue
@@ -51,6 +52,12 @@
                                               device_id,
                                               priority=priority,
                                               exclusive=True)
+
+        self.log = structlog.get_logger(device_id=device_id,
+                                        name=BrcmUniLockTask.name,
+                                        task_id=self._task_id,
+                                        setting_lock=lock)
+
         self._device = omci_agent.get_device(device_id)
         self._lock = lock
         self._results = None
diff --git a/python/adapters/brcm_openomci_onu/omci/brcm_vlan_filter_task.py b/python/adapters/brcm_openomci_onu/omci/brcm_vlan_filter_task.py
index deee947..6f704fd 100644
--- a/python/adapters/brcm_openomci_onu/omci/brcm_vlan_filter_task.py
+++ b/python/adapters/brcm_openomci_onu/omci/brcm_vlan_filter_task.py
@@ -52,14 +52,20 @@
         :param tp_id: (int) TP ID for the flow
         :param priority: (int) OpenOMCI Task priority (0..255) 255 is the highest
         """
-
-        self.log = structlog.get_logger(device_id=handler.device_id, uni_port=uni_port.port_number)
-
         super(BrcmVlanFilterTask, self).__init__(BrcmVlanFilterTask.name,
                                                  omci_agent,
                                                  handler.device_id,
                                                  priority=priority,
                                                  exclusive=True)
+
+        self.log = structlog.get_logger(device_id=handler.device_id,
+                                        name=BrcmVlanFilterTask.name,
+                                        task_id=self._task_id,
+                                        entity_id=uni_port.entity_id,
+                                        uni_id=uni_port.uni_id,
+                                        uni_port=uni_port.port_number,
+                                        set_vlan_id=set_vlan_id)
+
         self._device = omci_agent.get_device(handler.device_id)
         self._uni_port = uni_port
         self._set_vlan_id = set_vlan_id
diff --git a/python/adapters/brcm_openomci_onu/onu_gem_port.py b/python/adapters/brcm_openomci_onu/onu_gem_port.py
index 5e618cc..dcde287 100644
--- a/python/adapters/brcm_openomci_onu/onu_gem_port.py
+++ b/python/adapters/brcm_openomci_onu/onu_gem_port.py
@@ -48,7 +48,6 @@
                  handler=None):
 
         self.log = structlog.get_logger(device_id=handler.device_id, uni_id=uni_id, gem_id=gem_id)
-        self.log.debug('function-entry')
 
         self.name = name
         self.gem_id = gem_id
@@ -98,39 +97,32 @@
 
     @property
     def pon_id(self):
-        self.log.debug('function-entry')
         return self._pon_id
 
     @pon_id.setter
     def pon_id(self, pon_id):
-        self.log.debug('function-entry')
         assert self._pon_id is None or self._pon_id == pon_id, 'PON-ID can only be set once'
         self._pon_id = pon_id
 
     @property
     def onu_id(self):
-        self.log.debug('function-entry')
         return self._onu_id
 
     @onu_id.setter
     def onu_id(self, onu_id):
-        self.log.debug('function-entry', onu_id=onu_id)
         assert self._onu_id is None or self._onu_id == onu_id, 'ONU-ID can only be set once'
         self._onu_id = onu_id
 
     @property
     def alloc_id(self):
-        self.log.debug('function-entry')
         return self._alloc_id
 
     @property
     def direction(self):
-        self.log.debug('function-entry')
         return self._direction
 
     @direction.setter
     def direction(self, direction):
-        self.log.debug('function-entry')
         # GEM Port CTP are configured separately in UPSTREAM and DOWNSTREAM.
         # BIDIRECTIONAL is not supported.
         assert direction == "UPSTREAM" or direction == "DOWNSTREAM" or \
@@ -146,17 +138,14 @@
 
     @property
     def tcont(self):
-        self.log.debug('function-entry')
         tcont_item = self._handler.pon_port.tconts.get(self.alloc_id)
         return tcont_item
 
     @property
     def omci_transport(self):
-        self.log.debug('function-entry')
         return self._omci_transport
 
     def to_dict(self):
-        self.log.debug('function-entry')
         return {
             'port-id': self.gem_id,
             'alloc-id': self.alloc_id,
@@ -166,22 +155,18 @@
 
     @property
     def entity_id(self):
-        self.log.debug('function-entry')
         return self._entity_id
 
     @entity_id.setter
     def entity_id(self, value):
-        self.log.debug('function-entry')
         self._entity_id = value
 
     @property
     def encryption(self):
-        self.log.debug('function-entry')
         return self._encryption
 
     @encryption.setter
     def encryption(self, value):
-        self.log.debug('function-entry')
         # FIXME The encryption should come as boolean by default
         value = eval(value)
         assert isinstance(value, bool), 'encryption is a boolean'
@@ -191,12 +176,10 @@
 
     @property
     def discard_config(self):
-        self.log.debug('function-entry')
         return self._discard_config
 
     @discard_config.setter
     def discard_config(self, discard_config):
-        self.log.debug('function-entry')
         assert isinstance(discard_config, dict), "discard_config not dict"
         assert 'max_probability' in discard_config, "max_probability missing"
         assert 'max_threshold' in discard_config, "max_threshold missing"
@@ -205,12 +188,10 @@
 
     @property
     def discard_policy(self):
-        self.log.debug('function-entry')
         return self._discard_policy
 
     @discard_policy.setter
     def discard_policy(self, discard_policy):
-        self.log.debug('function-entry')
         dp = ("TailDrop", "WTailDrop", "RED", "WRED")
         assert (isinstance(discard_policy, str))
         assert (discard_policy in dp)
@@ -218,12 +199,10 @@
 
     @property
     def max_q_size(self):
-        self.log.debug('function-entry')
         return self._max_q_size
 
     @max_q_size.setter
     def max_q_size(self, max_q_size):
-        self.log.debug('function-entry')
         if isinstance(max_q_size, str):
             assert (max_q_size == "auto")
         else:
@@ -233,12 +212,10 @@
 
     @property
     def pbit_map(self):
-        self.log.debug('function-entry')
         return self._pbit_map
 
     @pbit_map.setter
     def pbit_map(self, pbit_map):
-        self.log.debug('function-entry')
         assert (isinstance(pbit_map, str))
         assert (len(pbit_map[2:]) == 8)  # Example format of pbit_map: "0b00000101"
         try:
@@ -251,12 +228,10 @@
 
     @property
     def scheduling_policy(self):
-        self.log.debug('function-entry')
         return self._scheduling_policy
 
     @scheduling_policy.setter
     def scheduling_policy(self, scheduling_policy):
-        self.log.debug('function-entry')
         sp = ("WRR", "StrictPriority")
         assert (isinstance(scheduling_policy, str))
         assert (scheduling_policy in sp)
@@ -264,8 +239,6 @@
 
     @staticmethod
     def create(handler, gem_port):
-        log = structlog.get_logger(gem_port=gem_port)
-        log.debug('function-entry', gem_port=gem_port)
 
         return OnuGemPort(gem_id=gem_port['gemport_id'],
                           uni_id=gem_port['uni_id'],
@@ -344,7 +317,6 @@
 
     @inlineCallbacks
     def remove_from_hardware(self, omci):
-        self.log.debug('function-entry', omci=omci)
         self.log.debug('remove-from-hardware', gem_id=self.gem_id)
 
         try:
@@ -370,7 +342,6 @@
         returnValue(results)
 
     def check_status_and_state(self, results, operation=''):
-        self.log.debug('function-entry')
         omci_msg = results.fields['omci_message'].fields
         status = omci_msg['success_code']
         error_mask = omci_msg.get('parameter_error_attributes_mask', 'n/a')
diff --git a/python/adapters/brcm_openomci_onu/onu_tcont.py b/python/adapters/brcm_openomci_onu/onu_tcont.py
index bc1f230..da639d3 100644
--- a/python/adapters/brcm_openomci_onu/onu_tcont.py
+++ b/python/adapters/brcm_openomci_onu/onu_tcont.py
@@ -40,7 +40,6 @@
     def __init__(self, handler, uni_id, alloc_id, q_sched_policy, traffic_descriptor):
 
         self.log = structlog.get_logger(device_id=handler.device_id, uni_id=uni_id, alloc_id=alloc_id)
-        self.log.debug('function-entry')
 
         self.uni_id = uni_id
         self.alloc_id = alloc_id
@@ -60,12 +59,10 @@
 
     @property
     def entity_id(self):
-        self.log.debug('function-entry')
         return self._entity_id
 
     @property
     def q_sched_policy(self):
-        self.log.debug('function-entry')
         return self._q_sched_policy
 
     @q_sched_policy.setter
@@ -78,8 +75,6 @@
 
     @staticmethod
     def create(handler, tcont, td):
-        log = structlog.get_logger(tcont=tcont, td=td)
-        log.debug('function-entry', tcont=tcont)
 
         return OnuTCont(handler,
                         tcont['uni_id'],
@@ -112,7 +107,6 @@
 
     @inlineCallbacks
     def remove_from_hardware(self, omci):
-        self.log.debug('function-entry', omci=omci)
         self.log.debug('remove-from-hardware', tcont_entity_id=self.entity_id)
 
         # Release tcont by setting alloc_id=0xFFFF
@@ -138,7 +132,6 @@
         returnValue(results)
 
     def check_status_and_state(self, results, operation=''):
-        self.log.debug('function-entry')
         omci_msg = results.fields['omci_message'].fields
         status = omci_msg['success_code']
         error_mask = omci_msg.get('parameter_error_attributes_mask', 'n/a')
diff --git a/python/adapters/brcm_openomci_onu/onu_traffic_descriptor.py b/python/adapters/brcm_openomci_onu/onu_traffic_descriptor.py
index 1391e75..0e8820d 100644
--- a/python/adapters/brcm_openomci_onu/onu_traffic_descriptor.py
+++ b/python/adapters/brcm_openomci_onu/onu_traffic_descriptor.py
@@ -34,7 +34,6 @@
                  name=None):
 
         self.log = structlog.get_logger(fixed=fixed, assured=assured, maximum=maximum, additional=additional)
-        self.log.debug('function-entry')
 
         self.name = name
         self.fixed_bandwidth = fixed       # bps
@@ -47,8 +46,6 @@
 
     @staticmethod
     def to_string(value):
-        log = structlog.get_logger()
-        log.debug('function-entry', value=value)
         return {
             NON_ASSURED_SHARING: "non-assured-sharing",
             BEST_EFFORT_SHARING: "best-effort-sharing",
@@ -58,8 +55,6 @@
 
     @staticmethod
     def from_value(value):
-        log = structlog.get_logger()
-        log.debug('function-entry', value=value)
         return {
             0: NONE,
             1: BEST_EFFORT_SHARING,
@@ -68,14 +63,12 @@
 
 
     def __str__(self):
-        self.log.debug('function-entry')
         return "OnuTrafficDescriptor: {}, {}/{}/{}".format(self.name,
                                                         self.fixed_bandwidth,
                                                         self.assured_bandwidth,
                                                         self.maximum_bandwidth)
 
     def to_dict(self):
-        self.log.debug('function-entry')
         val = {
             'fixed-bandwidth': self.fixed_bandwidth,
             'assured-bandwidth': self.assured_bandwidth,
@@ -87,8 +80,6 @@
 
     @staticmethod
     def create(traffic_disc):
-        log = structlog.get_logger()
-        log.debug('function-entry',traffic_disc=traffic_disc)
 
         additional = OnuTrafficDescriptor.from_value(
             traffic_disc['additional-bw-eligibility-indicator'])
@@ -105,7 +96,6 @@
 
     @inlineCallbacks
     def add_to_hardware(self, omci):
-       self.log.debug('function-entry', omci=omci)
        results = succeed('TODO: Implement me')
        returnValue(results)
 
diff --git a/python/adapters/brcm_openomci_onu/pon_port.py b/python/adapters/brcm_openomci_onu/pon_port.py
index e8eb38d..f644ec8 100644
--- a/python/adapters/brcm_openomci_onu/pon_port.py
+++ b/python/adapters/brcm_openomci_onu/pon_port.py
@@ -34,7 +34,6 @@
 
     def __init__(self, handler, port_no):
         self.log = structlog.get_logger(device_id=handler.device_id, port_no=port_no)
-        self.log.debug('function-entry')
 
         self._enabled = False
         self._valid = True
@@ -63,14 +62,11 @@
 
     @staticmethod
     def create(handler, port_no):
-        log = structlog.get_logger(device_id=handler.device_id, port_no=port_no)
-        log.debug('function-entry')
         port = PonPort(handler, port_no)
 
         return port
 
     def _start(self):
-        self.log.debug('function-entry')
         self._cancel_deferred()
 
         self._admin_state = AdminState.ENABLED
@@ -78,7 +74,6 @@
         self._update_adapter_agent()
 
     def _stop(self):
-        self.log.debug('function-entry')
         self._cancel_deferred()
 
         self._admin_state = AdminState.DISABLED
@@ -88,7 +83,6 @@
         # TODO: stop h/w sync
 
     def _cancel_deferred(self):
-        self.log.debug('function-entry')
         d1, self._deferred = self._deferred, None
 
         for d in [d1]:
@@ -99,19 +93,16 @@
                 pass
 
     def delete(self):
-        self.log.debug('function-entry')
         self.enabled = False
         self._valid = False
         self._handler = None
 
     @property
     def enabled(self):
-        self.log.debug('function-entry')
         return self._enabled
 
     @enabled.setter
     def enabled(self, value):
-        self.log.debug('function-entry')
         if self._enabled != value:
             self._enabled = value
 
@@ -122,17 +113,14 @@
 
     @property
     def port_number(self):
-        self.log.debug('function-entry')
         return self._port_number
 
     @property
     def tconts(self):
-        self.log.debug('function-entry')
         return self._tconts
 
     @property
     def gem_ports(self):
-        self.log.debug('function-entry')
         return self._gem_ports
 
     def get_port(self):
@@ -140,7 +128,6 @@
         Get the VOLTHA PORT object for this port
         :return: VOLTHA Port object
         """
-        self.log.debug('function-entry')
 
         self._port = Port(port_no=self.port_number,
                           label='PON port',
@@ -160,7 +147,6 @@
         """
         Update the port status and state in the core
         """
-        self.log.debug('function-entry')
         self.log.debug('update-adapter-agent', admin_state=self._admin_state,
                        oper_status=self._oper_status)
 
@@ -183,7 +169,6 @@
         :param reflow: (boolean) If true, force add (used during h/w resync)
         :return: (deferred)
         """
-        self.log.debug('function-entry', tcont=tcont.alloc_id)
 
         if not self._valid:
             return  # Deleting
@@ -195,7 +180,6 @@
         self._tconts[tcont.alloc_id] = tcont
 
     def update_tcont_td(self, alloc_id, new_td):
-        self.log.debug('function-entry')
 
         tcont = self._tconts.get(alloc_id)
 
@@ -216,7 +200,6 @@
 
     @inlineCallbacks
     def remove_tcont(self, alloc_id, remove_from_hw=True):
-        self.log.debug('function-entry')
 
         tcont = self._tconts.get(alloc_id)
 
@@ -234,13 +217,11 @@
             raise
 
     def gem_port(self, gem_id, direction):
-        self.log.debug('function-entry')
         return self._gem_ports.get((gem_id, direction))
 
     @property
     def gem_ids(self):
         """Get all GEM Port IDs used by this ONU"""
-        self.log.debug('function-entry')
         return sorted([gem_id_and_direction[0] for gem_id_and_direction, gem in self._gem_ports.items()])
 
     def add_gem_port(self, gem_port, reflow=False):
@@ -251,7 +232,6 @@
         :param reflow: (boolean) If true, force add (used during h/w resync)
         :return: (deferred)
         """
-        self.log.debug('function-entry', gem_port=gem_port.gem_id)
 
         if not self._valid:
             return  # Deleting
@@ -274,7 +254,6 @@
         :param remove_from_hw: Remove the GemPort from hardware (remove if True else not)
         :return: deferred
         """
-        self.log.debug('function-entry', gem_id=gem_id)
 
         gem_port = self._gem_ports.get((gem_id, direction))
 
diff --git a/python/adapters/brcm_openomci_onu/uni_port.py b/python/adapters/brcm_openomci_onu/uni_port.py
index 99d42cd..d42bf84 100644
--- a/python/adapters/brcm_openomci_onu/uni_port.py
+++ b/python/adapters/brcm_openomci_onu/uni_port.py
@@ -18,11 +18,6 @@
 from enum import Enum
 from voltha_protos.common_pb2 import OperStatus, AdminState
 from voltha_protos.device_pb2 import Port
-from voltha_protos.openflow_13_pb2 import OFPPF_10GB_FD
-from pyvoltha.common.utils.nethelpers import mac_str_to_tuple
-from voltha_protos.logical_device_pb2 import LogicalPort
-from voltha_protos.openflow_13_pb2 import OFPPS_LIVE, OFPPF_FIBER, OFPPS_LINK_DOWN
-from voltha_protos.openflow_13_pb2 import ofp_port
 
 class UniType(Enum):
     """
