diff --git a/python/adapters/brcm_openomci_onu/main.py b/python/adapters/brcm_openomci_onu/main.py
index 5a23832..b7867bb 100755
--- a/python/adapters/brcm_openomci_onu/main.py
+++ b/python/adapters/brcm_openomci_onu/main.py
@@ -34,7 +34,7 @@
 from twisted.internet.task import LoopingCall
 from zope.interface import implementer
 
-from pyvoltha.common.structlog_setup import setup_logging, update_logging
+from pyvoltha.common.structlog_setup import setup_logging, update_logging, string_to_int
 from pyvoltha.common.utils.asleep import asleep
 from pyvoltha.common.utils.deferred_utils import TimeOutError
 from pyvoltha.common.utils.dockerhelpers import get_my_containers_name
@@ -51,6 +51,7 @@
 
 from brcm_openomci_onu_adapter import BrcmOpenomciOnuAdapter
 from probe import Probe
+from pyvoltha.adapters.log_controller import LogController, KV_STORE_DATA_PATH_PREFIX
 
 defs = dict(
     build_info_file='./BUILDINFO',
@@ -74,7 +75,8 @@
     retry_interval=os.environ.get('RETRY_INTERVAL', 2),
     heartbeat_topic=os.environ.get('HEARTBEAT_TOPIC', "adapters.heartbeat"),
     probe=os.environ.get('PROBE', ':8080'),
-    log_level=os.environ.get('LOG_LEVEL', 'WARN')
+    log_level=os.environ.get('LOG_LEVEL', 'WARN'),
+    component_name=os.environ.get('COMPONENT_NAME', "adapter-open-onu")
 )
 
 
@@ -186,6 +188,12 @@
                         default=defs['log_level'],
                         help=_help)
 
+    _help = 'get the component name'
+    parser.add_argument('-cn', '--component_name',
+                        dest='env',
+                        action='store',
+                        help=_help)
+
     _help = ('use docker container name as conatiner instance id'
              ' (overrides -i/--instance-id option)')
     parser.add_argument('--instance-id-is-container-name',
@@ -297,20 +305,17 @@
         self.config = load_config(args)
 
         # log levels in python are:
-        # 1 - DEBUG => verbosity_adjust = 0
-        # 2 - INFO => verbosity_adjust = 1
-        # 3 - WARNING => verbosity_adjust = 2
-        # 4 - ERROR
-        # 5 - CRITICAL
-        # If no flags are set we want to stick with INFO,
-        # if verbose is set we want to go down to DEBUG
-        # if quiet is set we want to go up to WARNING
-        # if you set both, you're doing something non-sense and you'll be back at INFO
+        # 1 - DEBUG => verbosity_adjust = 10
+        # 2 - INFO => verbosity_adjust = 20
+        # 3 - WARNING => verbosity_adjust = 30
+        # 4 - ERROR => verbosity_adjust = 40
+        # 5 - CRITICAL => verbosity_adjust = 50
 
-        verbosity_adjust = self.string_to_int(str(args.log_level))
-        if verbosity_adjust == -1:
-            print("Invalid loglevel is given: " + str(args.log_level))
-            sys.exit(0)
+        verbosity_adjust = string_to_int(str(args.log_level))
+
+        if verbosity_adjust == 0:
+            raise ValueError("Invalid loglevel is given: " + str(args.log_level))
+            sys.exit(1)
 
         self.log = setup_logging(self.config.get('logging', {}),
                                  args.instance_id,
@@ -324,6 +329,11 @@
         if not args.no_banner:
             print_banner(self.log)
 
+        self.etcd_host = str(args.etcd).split(':')[0]
+        self.etcd_port = str(args.etcd).split(':')[1]
+
+        self.controller = LogController(self.etcd_host, self.etcd_port)
+
         self.adapter = None
         # Create a unique instance id using the passed-in instance id and
         # UTC timestamp
@@ -341,15 +351,6 @@
     def start(self):
         self.start_reactor()  # will not return except Keyboard interrupt
 
-    def string_to_int(self, loglevel):
-        l = loglevel.upper()
-        if l == "DEBUG": return 0
-        elif l == "INFO": return 1
-        elif l == "WARN": return 2
-        elif l == "ERROR": return 3
-        elif l == "CRITICAL": return 4
-        else: return -1
-
     def stop(self):
         pass
 
@@ -374,10 +375,6 @@
 
             registry.register('main', self)
 
-            # Update the logger to output the vcore id.
-            self.log = update_logging(instance_id=self.instance_id,
-                                      vcore_id=None)
-
             yield registry.register(
                 'kafka_cluster_proxy',
                 KafkaProxy(
@@ -459,12 +456,13 @@
             t.join()
 
     def start_reactor(self):
-        from twisted.internet import reactor
+        from twisted.internet import reactor, defer
         reactor.callWhenRunning(
             lambda: self.log.info('twisted-reactor-started'))
         reactor.addSystemEventTrigger('before', 'shutdown',
                                       self.shutdown_components)
         reactor.callInThread(self.start_probe)
+        defer.maybeDeferred(self.controller.start_watch_log_config_change, self.args.instance_id, str(self.args.log_level))
         reactor.run()
 
     def start_probe(self):
diff --git a/python/requirements.txt b/python/requirements.txt
index e35a619..7be20c6 100644
--- a/python/requirements.txt
+++ b/python/requirements.txt
@@ -1,2 +1,2 @@
 voltha-protos==3.2.8
-pyvoltha==2.3.26
+pyvoltha==2.4.0
